App ExtensionのBundle Versionを自動でアプリのBundle Versionに合わせる
はじめに
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が複数ある場合でも、同様にスクリプトの行を追加していけばまとめて更新できます!
Author And Source
この問題について(App ExtensionのBundle Versionを自動でアプリのBundle Versionに合わせる), 我々は、より多くの情報をここで見つけました https://qiita.com/y-okudera/items/f2ff46f31a84391803fa著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .