2011年 11月 19日(土曜日) 23:04

Xcode 4でビルド番号を自動的に増やす方法

評価:
(0 票)

Xcode 4には、ターゲットのサマリーに「Version」と「Build」の欄があります。このBuild番号をビルドの度に自動的に増やしていく方法のメモ。こちらのQ&Aページを参考にしました。

バージョン番号とビルド番号の付け方について

ターゲットのサマリーの"Version"はInfo.plistの"Bundle versions string, short" (CFBundleShortVersionString)、"Build"は"Bundle Version (CFBundleVersion)"に相当します。

バージョン番号とビルド番号の使い方の流儀はいろいろあり、プロジェクトにあった方法を選べばよいわけですが、私の場合は上のQ&Aページで説明されているのとほぼ同じように、次のようなルールで付けることにしました。

バージョン番号は、

{メジャーバージョン}.{マイナーバージョン}.{リビジョン}

  • メジャーバージョン … 大幅なデザインの変更など
  • マイナーバージョン … 新機能の追加
  • リビジョン … バグ修正やマイナーな改善

のように決めました。

ビルド番号は、ビルドの度に増やしていき、バージョン番号を上げたときに0にリセットすることにしました。

ビルド番号をビルドの度に自動的に増やす方法

ビルド番号をビルドの度に自動的に増やすには、XcodeのビルドフェーズにアプリのInfo.plistを書き換えるスクリプトを追加します。

まず、Xcodeでプロジェクトを開き、ターゲットの設定で"Build Phases"を選びます。

次に、右下の"Add Build Phase"ボタンを押して、"Add Run Script"を選びます。

"Run Script"というビルドフェーズが追加されたら、それを"Copy Bundle Resources"よりも上にドラッグして移動します。

"Run Script"を開いて、スクリプト欄に、次のスクリプトをコピー&ペーストします。

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

最後に、ターゲットのサマリーで、ビルド番号を0(又は適当な数値)にリセットしておきます。

これで、ビルドする度にビルド番号が1ずつ増えていくようになります。

プログラムでバージョン番号とビルド番号を取得して例えばUILabelに表示するには、次のようにします。

    NSString *versionNum = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
    NSString *buildNum = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    versionLabel.text = [NSString stringWithFormat:@"%@ Build %@", versionNum, buildNum];

ただ、このままだとどうしてもビルド後のターゲットのサマリーで表示されるビルド番号と、実行時に取得できる番号が1つずれてしまいました。どうやら、Run Scriptフェーズでビルド番号を上げたものが保存される前に、アプリのInfo.plistファイルがバンドルにコピーされてしまうようです。。。このへんはプログラム内で1つ増やすか、ビルド前の番号がそのビルドのビルド番号だと思うようにするしかなさそう。

ビルド番号が毎回変わってそれをアプリ内で表示できるようにしておけば、テスト用にデプロイした実行ファイルがどの時期にビルドしたものか区別できて便利ですね。

最終更新日: 2011年 11月 20日(日曜日) 09:50
くらち たかよし

くらち たかよし

モバイル・Webアプリ作家。最近は主にiPhoneアプリ制作を手がける。企画、UIデザイン、設計、実装、テストなどを1人〜数人の個人で行う全人的開発手法の確立を目指している。

使う言語はObjective-C, C++, C#, Java, PHPなど。Web関連で使うものはCakePHP, MySQL, Joomla! CMSなど。デザインではPhotoshopとIllustratorをかろうじて使う。

場所や時間に縛られない、インターネット時代の新しい働き方、自由な生き方を模索中。海外移住、低予算&低リスク起業、キャリアデザイン、心理学などにも興味あり。

Web: awaresoft.jp/