アプリのバージョン、ビルドを「設定」の初期値として設定する

「設定」アプリの自分のアプリの項目に、アプリのバージョンやビルドを表示することがあります。

地味にどうやるんだろうと思って調べました。

結論から言うと、Run Scriptを追加するだけで出来ました。plistファイルの読み書きを行うコマンドPlistBuddyを用います。以下、その仕組みと共に説明します。

まず、「設定」アプリの初期値はSettings.BundleのRoot.plistに記載されます。

一方で、アプリケーションのバージョン、ビルドは、プロジェクト設定ファイルに記載されます。

やりたいことは、「アプリケーション名」-Info.plistに記載されているバージョン、ビルドをRoot.plistファイルのバージョンのDefault ValueとビルドのDefault Valueに記載することとなります。

そこで、PlistBuddyコマンドを用いて、以下のようなRun Scriptを追加しました。


#プロジェクト設定ファイルのバージョン番号とビルド番号を
#Settings.bundleの設定ファイルのそれぞれの初期値に設定するためのスクリプト
versionNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" 'NSUserDefaults Sample/NSUserDefaults Sample-Info.plist')
/usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:1:DefaultValue $versionNumber" 'NSUserDefaults Sample/Settings.bundle/Root.plist'

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" 'NSUserDefaults Sample/NSUserDefaults Sample-Info.plist')
/usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:2:DefaultValue $buildNumber" 'NSUserDefaults Sample/Settings.bundle/Root.plist'

プロジェクト名の「NSUserDefaults Sample」は適当に読み替えて下さい。

このRun Scriptを追加することで、ビルドの度にRoot.plistのバージョン、ビルドのDefault Valueに実際のバージョン、ビルドが設定されるので、Root.plistの更新忘れが無くなっていい感じです。