iOSアプリのバージョン情報管理について

iOSアプリのバージョン情報

iOSアプリでは、2つのバージョン情報があります。 Xcodeでアプリを新規作成すると、ターゲットのGeneral(一般情報)に、以下のような初期値が設定されているのを、以下の画面で見ることができます。

  • ターゲットの一般情報

f:id:kimada:20170430100710j:plain

  • Info.plist

f:id:kimada:20170430100912j:plain

これらの情報は、開発者がアプリのバージョン情報を管理するのに使えるのはもちろんですが、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のものを複数アップロードすることはできない

これらのバージョン情報は、XcodeGUIから手入力で変更できますが、AppleWatchアプリや通知センターウィジェットなど、複数のターゲットが含まれている場合は、結構煩雑になります。agvtoolというコマンドラインツールを使うと、プロジェクト内のすべてのターゲットに一括で設定できるので便利です。

Xcodeでagvtoolを有効化する

まずは、Xcode上でプロジェクトがagvtoolを使えるようにするための設定を行います。 プロジェクトのBuild SettingsVersioningセクションの以下の項目を設定してください。

f:id:kimada:20170430101023j:plain

正しく設定されていれば、以下のコマンドにて、現在設定されてるバージョンが表示されます。

  • 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でターゲットの一般情報が設定したバージョンに置き換わっていることが確認できます。 f:id:kimada:20170430101056j:plain

参考