iOSアプリのバージョン情報管理について
iOSアプリのバージョン情報
iOSアプリでは、2つのバージョン情報があります。 Xcodeでアプリを新規作成すると、ターゲットのGeneral(一般情報)に、以下のような初期値が設定されているのを、以下の画面で見ることができます。
- ターゲットの一般情報
- Info.plist
これらの情報は、開発者がアプリのバージョン情報を管理するのに使えるのはもちろんですが、iTunes Connectを使ったアプリを申請やTestFlightを使ってテストするための、バイナリをアップロード必要な情報となっています。その際に、使用する場面によって名称が異なるので、注意が必要です。
ターゲットの一般情報 | Info.plist | Info.plist(ソース) | iTunes Connect | 初期値 |
---|---|---|---|---|
Version | Bundle versions string, short | CFBundleShortVersionString | Store バージョン番号 | 1.0 |
Build | Bundle version | CFBundleVersion | ビルド | 1 |
開発当初はこれらのバージョン情報をあまり意識する必要はないですが、iTunes Connectにバイナリをアップロードするときには、以下のような制約があるので、適切に管理することが必要になります。
- Version
AppStoreに表示されるバージョン番号なので、新しいバージョンをリリースするときには、前回より大きな値にしなければならない
- Build
1つのVersionに対して複数のバイナリをアップロードできるが、同じBuildのものを複数アップロードすることはできない
これらのバージョン情報は、XcodeのGUIから手入力で変更できますが、AppleWatchアプリや通知センターウィジェットなど、複数のターゲットが含まれている場合は、結構煩雑になります。agvtool
というコマンドラインツールを使うと、プロジェクト内のすべてのターゲットに一括で設定できるので便利です。
Xcodeでagvtoolを有効化する
まずは、Xcode上でプロジェクトがagvtool
を使えるようにするための設定を行います。
プロジェクトのBuild Settings
でVersioning
セクションの以下の項目を設定してください。
正しく設定されていれば、以下のコマンドにて、現在設定されてるバージョンが表示されます。
- Versionの表示
$ xcrun agvtool what-marketing-version No marketing version number (CFBundleShortVersionString) found for Jambase targets. Looking for marketing version in native targets... Looking for marketing version (CFBundleShortVersionString) in native targets... Found CFBundleShortVersionString of "1.0" in "VersionSettingSample.xcodeproj/../VersionSettingSample/Info.plist" Found CFBundleShortVersionString of "1.0" in "VersionSettingSample.xcodeproj/../VersionSettingSampleTests/Info.plist" Found CFBundleShortVersionString of "1.0" in "VersionSettingSample.xcodeproj/../VersionSettingSampleUITests/Info.plist"
- Buildの表示
$ xcrun agvtool what-version
Current version of project VersionSettingSample is:
1
agvtoolによるバージョン情報の設定
Versionの設定
Versionは、AppStoreに表示するバージョンの文字列を明示的に設定します。
$ xcrun agvtool new-marketing-version 1.1 Setting CFBundleShortVersionString of project VersionSettingSample to: 1.1. Updating CFBundleShortVersionString in Info.plist(s)... Updated CFBundleShortVersionString in "VersionSettingSample.xcodeproj/../VersionSettingSample/Info.plist" to 1.1 Updated CFBundleShortVersionString in "VersionSettingSample.xcodeproj/../VersionSettingSampleTests/Info.plist" to 1.1 Updated CFBundleShortVersionString in "VersionSettingSample.xcodeproj/../VersionSettingSampleUITests/Info.plist" to 1.1
Buildの設定
Buildは自分で選んだ値を設定することもできますが、とりあえず単に毎回異なる値が設定されればいいという前提で、ここでは自動でカウントアップする方法を示します。
$ agvtool next-version -all Setting version of project VersionSettingSample to: 2. Also setting CFBundleVersion key (assuming it exists) Updating CFBundleVersion in Info.plist(s)... Updated CFBundleVersion in "VersionSettingSample.xcodeproj/../VersionSettingSample/Info.plist" to 2 Updated CFBundleVersion in "VersionSettingSample.xcodeproj/../VersionSettingSampleTests/Info.plist" to 2 Updated CFBundleVersion in "VersionSettingSample.xcodeproj/../VersionSettingSampleUITests/Info.plist" to 2
Xcode上で確認
Xcodeでターゲットの一般情報が設定したバージョンに置き換わっていることが確認できます。
参考
- Technical Q&A QA1827 Automating Version and Build Numbers Using agvtool https://developer.apple.com/library/content/qa/qa1827/_index.html