## PROGRAM
## iPhone アプリのビルド番号を自動的に更新する
Xcode 4.2 の iOS アプリでは、ビルド番号を設定できるようになっています。
プロジェクトの TARGETS にあるアイコンを選択すると "Summary" のところで Build 番号を設定できるようになっています。
この値は、実際にはこのアプリ用の Info.plist に "Bundle version" (CFBundleVersion) に記録されています。
### ビルド番号を自動更新するスクリプト
ビルド番号を変更する場合、通常はそれらを手で調整してビルドしてあげる感じになりますが、スクリプトを使ってビルドの度に、自動で更新することもできます。
スクリプトでビルド番号を更新するには、次のようなスクリプトを使います。
echo "Update build number."
INFOPLIST="${SRCROOT}/${PROJECT_NAME}/${PRODUCT_NAME}-Info.plist"
BUNDLE_VERSION=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" ${INFOPLIST})
BUNDLE_VERSION=$(($BUNDLE_VERSION + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUNDLE_VERSION" ${INFOPLIST}
このスクリプトでは PlistBuddy というプログラムを使って、Info.plist の内容を読み書きしています。
対象の Info.plist ファイルを INFOPLIST 変数に設定したら、そのファイルから Bundle Version を読み込んで、その値に 1 を加え、それを再び Bundle Version に書き戻すという処理を行います。
このスクリプトでは、ビルド番号が整数であることを想定しているので、ビルド番号が "1.0" といった形式の場合には、予め "1" などに設定しておく必要があります。
### ビルド番号をビルド後に更新する
ビルド番号をバイナリに設定した後に更新したい場合は、このスクリプトを、TARGET の "Build Phases" に登録します。
プロジェクトの "Build Phases" のタブを開いたら、右下の "Add Build Phase" を選択します。
ここで "Add Run Script2 を選択すると、Build Phase に Run Script が追加されます。
ここの "Type a script or drag a script file from your workspace" のところに、先ほどのスクリプトを入力します。
Web からコピー＆ペーストで持ってくると、改行の違いが影響するのか、スクリプトが正常動作しないことがあったので注意してください。
後はこの "Run Script" の実行順序を調整して、好きなタイミングでビルド番号が増加されるようにします。
ただ、このスクリプトをどの位置に移動しても、生成されるバイナリのビルド番号は、増加させる前の番号が設定されるようでした。
### ビルド番号をビルド前に更新する
ビルド番号をビルド前に更新したい場合には、Schema の Pre-action を設定します。
Xcode のシステムメニューの "Product" から "Edit Schema" を開いたら、"Build" の "Pre-action" を開きます。
ここで、下のほうの [ + ] から "New Run Script Action" を選択して、"Run Script" を追加します。
そして、ここに先ほどのスクリプトを登録します。こちらも、Web からコピー＆ペーストで持ってくると、改行の違いが影響するのか、スクリプトが正常動作しないことがあったので注意してください。
また、スクリプト内の ${SRCROOT} が正常に機能するように "Provide build settings from" のところで、ビルド設定を拾ってくるターゲットを選択し忘れないようにします。
こうすることで、ビルド前に新しいビルド番号に更新されて、その最新のビルド番号で、バイナリがビルドされるようになりました。