はじめに
iOSアプリのアップデートをリリースするときにバージョン番号を更新しますが、
App Extensionがある場合はそちらのバージョンも更新する必要があるかと思います。
App Extensionのバージョン更新は、忘れがちなので自動で更新するようにしてみます。
やること
メインのターゲットのアプリバージョンを更新して、ビルドすると
App Extensionのバージョンと設定アプリに表示するバージョンが更新されるようスクリプトを追加します。
※ 設定アプリに情報を表示するのに、Settings Bundleを使用しますが、
本記事ではSettings Bundleの詳細は割愛します(>人<)
Run Scriptを作成
今回追加するスクリプトは以下のとおりです。
APP_VERSION=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" $PRODUCT_SETTINGS_PATH)
/usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:1:DefaultValue ${APP_VERSION}" "${PRODUCT_NAME}/Resources/Settings.bundle/Root.plist"
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${APP_VERSION}" "${SRCROOT}/DemoAppNotificationServiceExtension/Info.plist"
これで、ビルドをするとInfo.plistのCFBundleShortVersionStringの値が設定アプリと、App ExtensionのInfo.plistに書き込まれるようになります \(^ω^)/
※ 2, 3行目には、出力先のplistのPATHを含んでいるので、プロジェクトの構成ごとに調整が必要ですm(_ _)m
スクリプトの内容について
スクリプトの内容について簡単に説明します。
APP_VERSION=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" $PRODUCT_SETTINGS_PATH)
1行目は、Info.plistのCFBundleShortVersionStringの値を変数APP_VERSION
に保持しています。
PlistBuddy
はplistを操作するプログラムです。(Macにデフォルトで入っています!)
$PRODUCT_SETTINGS_PATH
はplistのPATHを示す環境変数です。
/usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:1:DefaultValue ${APP_VERSION}" "${PRODUCT_NAME}/Resources/Settings.bundle/Root.plist"
2行目は、APP_VERSION
の値をSettings.bundle/Root.plist
の
PreferenceSpecifiers
の1番目のdictionaryのDefaultValue
キーの値に書き込んでいます。
(PreferenceSpecifiersはdictionaryのarrayです。arrayなので、indexは0始まりです。)
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${APP_VERSION}" "${SRCROOT}/DemoAppNotificationServiceExtension/Info.plist"
3行目は、2行目とほとんど同じです。
書き込み先がApp ExtensionのInfo.plistに変わっているだけです(`・ω・´)
さいごに
メインのターゲットのアプリバージョンを更新してビルドしたら、
App Extensionのバージョンと設定アプリに表示するバージョンが更新されるようになりました!
App Extensionが複数ある場合でも、同様にスクリプトの行を追加していけばまとめて更新できます!