4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

App ExtensionのBundle Versionを自動でアプリのBundle Versionに合わせる

Last updated at Posted at 2021-02-17

はじめに

iOSアプリのアップデートをリリースするときにバージョン番号を更新しますが、
App Extensionがある場合はそちらのバージョンも更新する必要があるかと思います。

App Extensionのバージョン更新は、忘れがちなので自動で更新するようにしてみます。

やること

メインのターゲットのアプリバージョンを更新して、ビルドすると
App Extensionのバージョンと設定アプリに表示するバージョンが更新されるようスクリプトを追加します。

※ 設定アプリに情報を表示するのに、Settings Bundleを使用しますが、
 本記事ではSettings Bundleの詳細は割愛します(>人<)

Run Scriptを作成

今回のサンプルプロジェクトの構成は、以下のとおりです。
dir.png

  1. Build PhasesにRun Script Phaseを追加します。
    AddScript.png

  2. 追加した「Run Script」を分かりやすい名前にリネームします。
    今回は、「Refresh App Versions」とします。
    Rename.png

  3. スクリプトを書いていきます。
    Run Scriptを開いて、スクリプトを書いていきます。
    WriteScript.png

今回追加するスクリプトは以下のとおりです。


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が複数ある場合でも、同様にスクリプトの行を追加していけばまとめて更新できます!

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?