読者です 読者をやめる 読者になる 読者になる

Usual Software Engineer

よくあるソフトウェアエンジニアのブログ

iOSアプリのバンドルのバージョン設定まとめ

iTunes Connectが新しくなり、XcodeでArchive, Distriburionを実行して
生成したバイナリをitunes Connect上にアップロードする形になりました。

もともとiOSアプリのバージョンについての認識が甘く
アップロード時にエラーが出て時間のかかるビルドを何度もやり直すハメになったので
忘れないようにまとめておきます。参考になれば幸いです。

バージョンに関する設定は3点あります。

  • iTunes ConnectのマイApp内の対象アプリのApp一般情報のバージョン設定
  • hoge-Info.plist内のCFBundleVersionの設定
  • hoge-Info.plist内のCFBundleShortVersionStringの設定

それぞれを説明します。

App一般情報のバージョン設定

これはユーザに見えるバージョン番号です。
一般的には3桁のピリオドで区切られたバージョン番号になりますが
1.21.2.3.4などを指定しても問題ありません。
後述の CFBundleVersionの設定 と一致させてください。

CFBundleVersionの設定

上述の App一般情報のバージョン設定 と一致させてください。
Xcode上でTARGETS設定のInfoだとBundle versionとなっているのでこれを記入するか
plistファイル自体を直接修正してもよいです。

CFBundleShortVersionStringの設定

これは ユーザには見えないバージョン番号 です。
Xcode上でTARGETS設定のInfoだと Bundle versions string, short となっているのでこれを記入するか
plistファイル自体を直接修正してもよいです。
注意すべきは、このバージョンは 最大3桁の ピリオドで区切られたバージョン番号にする必要があることです。

このバージョンをいくつにすればよいのか?が一番迷う部分かと思われます。
なぜなら、バイナリの再アップロードを行う際にこのバージョンを変更しないとアップロードすることができないからです。
例えば、CFBundleVersionを1.2.3にしていてCFBundleShortVersionStringも1.2.3にすると
ちょっとビルド設定を修正してアップロードし直す場合でもCFBundleShortVersionStringを上げなければいけなくなるので、
CFBundleVersionとCFBundleShortVersionStringが一致しなくなるのが気持ち悪くなるか、
もしくは両バージョンをアップするハメになるのでサーバサイドでアプリバージョン(CFBundleVersion)を基準とする処理を行っている場合に不都合が発生します。

ではCFBundleShortVersionStringのベターな設定はどういうものでしょうか。
こちらが参考になりました。まあ公式ドキュメントなんですけどねww

https://developer.apple.com/library/mac/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Chapters/UploadingBinariesforanApp.html

CFBundleVersionは1.2.3のようにする、CFBundleShortVersionStringは1のようにして
バイナリアップロードの際にCFBundleShortVersionStringを1ずつ上げていくようにすれば
Google Play Developer ConsoleにAndroidアプリのapkをアップロードする時の
AndroidManifest.xml内のversionCodeとversionNameと同じ扱いになる のでちょっとスッキリします。

まとめ

  • App一般情報のバージョン設定 1.2.3
  • CFBundleVersionの設定 1.2.3
  • CFBundleShortVersionStringの設定 6 (何回目のバイナリアップロードか)

6なのは特に意味は無いです。