iPhone アプリのビルド番号を自動的に更新する : Objective-C プログラミング

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" のところで、ビルド設定を拾ってくるターゲットを選択し忘れないようにします。

 

こうすることで、ビルド前に新しいビルド番号に更新されて、その最新のビルド番号で、バイナリがビルドされるようになりました。

[ もどる ]