2011-01-31 9 views
9

iOSアプリケーションのビルドプロセス中にアプリケーションに関する情報を動的に追加する方法を探しています。iOSアプリケーションの情報をビルドする(日付/時刻アプリケーションが作成された)

テスト中に、私が自分のデバイスにインストールしたアプリケーションがいつビルドされ、誰がビルドしたのかを知っておくとよいでしょう。

私は、デバッグの目的で基本的なビルド情報を与えるsettings.appのセクションを構想しています。ビルドの前にビルド情報ファイルを手動で更新する必要はありません。データは動的に生成する必要があります。

+1

ビルド時に値をファイルにスタンプする方法については、[XcodeでSubversionのリビジョン番号を挿入](http://stackoverflow.com/questions/372218/insert-subversion-revision-number- in-xcode)および[アプリケーションのバージョンのリビジョンをアプリケーションの設定バンドルに表示するにはどうすればいいですか?](http://stackoverflow.com/questions/877128/how-can-i-display-the-application-version-revision- in-my-applications-settings-b) –

+0

Bradに感謝します。 –

答えて

7

ビルドプロセスの最後に実行されるシェルスクリプトビルドフェーズをXcodeに書くことができます。この段階では、defaultsコマンドを使用して任意のファイルにデータを書き込むことができます。私はInfo.plistファイルに書き込むためにこの手法を使いましたが、あなたが望む任意のファイルに書き込むことができます[1]。ここで

は、Info.plistのために、現在のGitのバージョンを書き込むためのサンプルスクリプトです:

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
gitversion="$(cd "$SRCROOT" && git describe --always --dirty 2>/dev/null)" 
if [[ -n "$gitversion" ]]; then 
    defaults write "${infoplist%.plist}" GitVersion "$gitversion" 
fi 

あなたが欲しいファイル(例えば、あなたの設定バンドル)にポイントにこれを適合させることができるとの情報を記述する必要がありますあなたは欲しい。

[1] Info.plistに書き込む場合、ビルド中に変更されたInfo.plistを実現できないバグがあるため、デバイスビルド時にプロビジョニングが中断される可能性があります。

+0

しかし、私はキーBuildDateTimeを保存するためにこれを行います。シミュレータの[NSBundle mainBundle] objectForInfoDictionaryKey:@ "BuildDateTime"]をうまく読み込めますが、AdHocディストリビューションのためにビルドし、デバイスにアプリケーションをロードすると[[NSBundle mainBundle] objectForInfoDictionaryKey:@ "BuildDateTime"]がnullを返します。何か案は? – mputnamtennessee

+0

@mputnamtennessee:アドホックビルドを開き、手でInfo.plistをチェックしようとしましたか? –

13

また、標準マクロ__DATE__を使用すると、適切な現在のビルド日付の「Jun 25 1980」のような文字列が返されます。

+0

これはここに行く方法です。 – Emilio

+3

その__DATE__マクロをNSStringに変換するには、次の質問をチェックしてください。http://stackoverflow.com/questions/2862469/iphone-sdk-objective-c-date-compile-date-cant-be-converted-to-an -nsdate – Emilio

+2

'__TIME__'マクロを使って日付に時刻を追加することもできます。 – rmaddy

関連する問題