2

すべてのビルドでビルド番号を自動インクリメントするために、このスクリプトを作成しました。

#!/bin/bash
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" $INFOPLIST_FILE)
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" $INFOPLIST_FILE

「バンドルリソースのコピー」の前のビルドフェーズに挿入しました。最初に、Shell フィールドでデフォルトの /bin/sh のままにしましたが、次のようにShell Script Invocation Error言いました。

Command /bin/sh failed with exit code 1

そこで、何をすべきかを調べたところ、シェルを変更すると/bin/bash修正できることがわかりました。私はそうしましたが、まだ同じエラーがあります。それはまだ私にそれを教えてくれますCommand /bin/sh failed with exit code 1。/bin/sh がもう存在しないのに、エラーがあるとまだ言われているのはなぜですか?

4

4 に答える 4

3

この質問が 1 年半以上前のものであることは承知していますが、この問題を検索すると、この質問が検索結果の上部に表示されました。共有したい別の修正を見つけました。

plistbuddy スクリプトを使用したときに受け取ったエラーの詳細を次に示します (これは、OP で発生したエラーと同じだと思います)。

Set: Entry, ":CFBundleBuildVersionString", Does Not Exist
File Doesn't Exist, Will Create: /Users/*YourFilePathHere/YourAppName*.app/Info.plist
Set: Entry, ":CFBundleBuildDateVersionString", Does Not Exist
Command /bin/sh failed with exit code 1

スクリーンショット コマンド bin sh が終了コード 1 エラーで失敗しました

しようとしましたが、成功せずcleanに削除しました。Derived Data実際の解決策は非常に単純であることがわかりました。buildスクリプト中に、 Xcode によって実際に生成されるplist前に、生成された値を に追加しようとしていたことがわかりました。plist

スクリーンショット ターゲット ビルド フェーズ

Targets > Build Phases > Extra Version Dataこのスクリプトは実行されていますか。ただしTargets > Build Phases > Copy Bundle Resourcesplistが生成される場所です。

スクリーンショット ターゲット ビルド フェーズ

スクリプトが生成された値を追加しようとする前に、クリックしてドラッグExtra Version DataしてリストされるCopy Bundle Resourcesようにします。plist

スクリーンショット ターゲット ビルド フェーズの修正

その後build、ビールを飲みながらお楽しみください。

(Xcode 5.1 を使用)

于 2014-05-14T17:14:00.517 に答える
0

この問題が発生したばかりで、新しいターゲットを作成し、XCode でサフィックス「コピー」を追加した結果、INFOPLIST_FILE のファイル名にスペースが含まれていることがわかりました。このスクリプトの作成方法では、PlistBuddy はそのスペースを処理できないようです。

スペースなしでファイルの名前を変更し、ビルド設定で一致するように名前を更新すると、このエラーはなくなりました。

于 2012-12-11T05:33:19.083 に答える