iOSなどのコードを書いているときにアプリケーションの情報ビューなどにソースコードのリビジョンやビルド番号を表示したくなることは多々あると思います.
こうすれば配布したアプリケーションと開発中のソースコードのひも付けを簡単に行えるような気がします.

しかし,いちいちリビジョンをコマンドやツールで調べて,コピペして・・・・とか,ビルド番号を自分でカウントするとか・・・・非効率的過ぎてありえません.

これをスクリプトで自動化しましょう.
リビジョン番号は,Info.plistに書き込むことにします.このInfo.plistへの書き込みは,PlistBuddyというツールを使います.

まずsubversionの場合です.
subversionのリビジョンは,svnversionというツールで表示できます.
この実行結果を変数にいれ,PlistBuddyを使ってその変数の値をplistに書き込むようにします.
ソースコードは,以下のような感じになります.
いくつかXcodeのマクロを使っています.
下の3行はビルド回数をカウントして保存するスクリプトです.


svn update .
revisionNumber=$(svnversion -n)
/usr/libexec/PlistBuddy -c "Set :CFBundleSubversionRevision $revisionNumber" "$INFOPLIST_FILE"
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"


このソースをXcodeのbuild phaseのところで,Add scriptを選んで,スクリプトのところに貼り付けます.
これで完了です.
もし,Info.plistにそのエレメントがないとエラーが出たりするので,先に手でエレメントを追加しておいてください.

null

便利です.次にgitのリビジョンも同様にやってみましょう.
gitのリビジョンは,

git show --format='%h' -s

のツールで表示できます.フルリビジョン識別子を使う場合は,%Hにします.

これを同様にXcode用にポートすると,


git_revision=$(git show --format='%h' -s)
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
/usr/libexec/PlistBuddy -c "Set :CFBundleGitRevision $git_revision" "$INFOPLIST_FILE"


これでgitのリビジョンにも対応できました.便利です.