App Storeのリリース時にインクリメントする必要があるiOSアプリのバージョン/ビルド番号はどれですか?


107

iOSアプリのバージョン/ビルドフィールドは次のとおりです。

  • "Version" CFBundleShortVersionString(String-iOS、OS X)は、アプリのリリースされたイテレーションを識別するバンドルのリリースバージョン番号を指定します。リリースバージョン番号は、ピリオドで区切られた3つの整数で構成される文字列です。

  • "ビルド" CFBundleVersion(文字列-iOS、OS X)は、バンドルのビルドバージョン番号を指定します。これは、バンドルの反復(リリース済みまたは未リリース)を識別します。ビルドバージョン番号は、ピリオドで区切られた3つの非負の整数で構成される文字列で、最初の整数はゼロより大きい必要があります。文字列には、数字(0-9)とピリオド(。)のみを含める必要があります。先頭のゼロは各整数から切り捨てられ、無視されます(つまり、1.02.3は1.2.3と同等です)。このキーはローカライズできません。

  • 「iTunes Connectバージョン番号」:iTunes Connectでアプリの新しいバージョンを作成するときに指定するバージョン番号。

私の質問は:

アプリの新しいバージョンをiTunes Connectにアップロードしたり、App Storeにリリースしたりするときに、インクリメントする必要があるバージョン/ビルド番号はどれですか?

「バージョン」CFBundleShortVersionStringまたは「ビルド」のいずれかCFBundleVersionをアプリの更新間で同じままにすることはできますか?

Appleソースの追加ポイント、または無効なバージョン/ビルド番号をアップロードしたときにiTunesConnectが表示する正確なエラーメッセージ。


Android / Google Playノート:

この質問を促す議論では、GoogleでAndroidアプリの公開「バージョンが」ストアがない再生するということであるないにインクリメントする必要があるとしている決して検証します。android:versionName、リリース間同じままアップグレード、ダウングレード、または任意のランダムな文字列ではなく、有効な「バージョン番号」のように見えるものにすることができます。

android:versionName —ユーザーに表示する必要がある、アプリケーションコードのリリースバージョンを表すstring値。

値は文字列であるため、アプリケーションのバージョンを<major>.<minor>.<point>文字列として記述したり、他のタイプの絶対または相対バージョン識別子として記述したりできます。

AndroidのversionNameとversionNumberの違い

一方、android:versionCodeリリース時に増加する整数になるように強制されます。


Appleのドキュメント

新しく受け入れられた回答で述べたように、Appleは最近、バージョンとビルド番号スキームを詳しく説明するテクニカルノートを発行しました。

アップルテクニカルノートTN2420-バージョン番号とビルド番号


スクリーンショットによる詳細な回答: stackoverflow.com/a/31921249/936957
Yunus Nedim Mehel

回答:


115

Apple Technical Note TN2420、バージョン番号、ビルド番号

概要:

  • ペア(VersionBuild number)は一意である必要があります。
    • シーケンスは有効です:(1.0.1、12)->(1.0.1、13)->(1.0.2、13)->(1.0.2、14)...
  • VersionCFBundleShortVersionString)は昇順である必要があります。
  • Build numberCFBundleVersion)は昇順である必要があります。

バージョン番号とビルド番号のチェックリスト

App Storeに新しいビルドを送信する際に確認できることがいくつかあります。バージョン番号とビルド番号が適切に設定されていることを確認すると、不適切に構成されたためにアプリが自動的に拒否されるのを防ぐことができます。

  1. アプリの新しいバージョンごとに、新しいバージョン番号を作成する必要があります。この番号は、最後に使用したバージョン番号よりも大きい値である必要があります。アプリの特定のリリースに対して多くのビルドを提供する場合がありますが、アプリの新しいリリースごとに1つの新しいバージョン番号を使用するだけで済みます。
  2. バージョン番号を再利用することはできません。
  3. 提出する新しいビルドごとに、(同じバージョンで)使用した最後のビルド番号より大きい値を持つ新しいビルド番号を作成する必要があります。
  4. 異なるリリーストレインでビルド番号を再利用できますが、同じリリーストレイン内でビルド番号を再利用することはできません。macOSアプリの場合、リリーストレインでビルド番号を再利用することはできません。

チェックリストに基づいて、次の(Version, Build Number)シーケンスも有効です。

  • ケース:Build Number異なるリリーストレインでの再利用。(注: macOSアプリではありません

    (1.0.0、1) - >(1.0.0、2) - > ... - >(1.0.0、11) - >(1.0.11) - >(1.0.1、2)


よくわかりません。条件の1つは「バージョン番号を再利用できない」ですが、最後の例では、ビルド番号が増加してもバージョン番号は同じままです。私は何かを誤解していますか?
エミール

@Emil、(バージョン、ビルド番号)のペアは再利用できないと思います。
AechoLiu 2018年

6
@EmilParikhバージョン番号は、リリース前に複数回Appleにアップロードでき、それぞれに固有のビルド番号が付いています。ただし、いったんリリースされると、そのバージョン番号を再利用することはできません。
pkamb

1
TN2420は、「バージョン番号とビルド番号は、ピリオドで区切られた最大3つのコンポーネントを含む可能性がある」と述べ、次の不正な1.10000.1.5を提供します。ただし、Chrome を含む多くのアプリは、4つのコンポーネントを含むバージョン番号を使用しているように見えます(例:68.0.3440.83)。これは、TN2420ページに「重要:このドキュメントは更新されていません」と記載されていることで説明できると思いますが、新しいルールを定義する更新されたドキュメントを見つけることができませんでした。他の誰かが混乱していますか?
カタンマン2018

@catanmanこのセマンティックバージョンが好きです。バージョンを(major, minor, patch)マナーで構成しましょう。また、以前は4つのコンポーネントを使用していましたが、App Storeは4つのコンポーネントを含むその形式を受け入れません。
AechoLiu 2018

38

CFBundleShortVersionStringあなたがiTunesの接続を与えるバージョン番号と一致する必要があります。これは、ユーザーがApp Storeでアプリを表示したときに表示されるバージョン番号でもあります。

バージョン番号はストアに表示され、そのバージョンは後でiTunes Connectに入力するバージョン番号と一致する必要があります。

ソース

CFBundleVersionApp Storeで表示されていないが、あなたのアプリケーションが更新されたときを決定するためにiTunesのに使用されます。

「バージョン番号とビルド文字列の設定」の説明に従ってビルド文字列を更新すると、iTunesはビルド文字列が変更されたことを認識し、新しいiOS App Storeパッケージをテストデバイスに正しく同期します。

ソース

より具体的に質問に答える...

アプリの新しいバージョンをアプリストアにアップロードするときに、インクリメントする必要があるバージョン/ビルド番号はどれですか?

両方とも。1つはApp Storeに表示され、もう1つはiTunesがアプリの更新に使用します。

CFBundleShortVersionStringまたはCFBundleVersionをアプリの更新間で同じままにできますか?

いいえ(メタ質問、ここでのユースケースは何ですか?ペイロードを何らかの方法で編集した場合、ビルドは異なり、ユーザーはそれについて知りたがります)。実行しようとすると、次のようなエラーメッセージが表示されます。

エラーメッセージ

または、以前のそれぞれの数値と比較して、アプリの新しいバージョンで数値的に大きい数値がアップロードされていることを確認していますか?

はい。semver.org標準を使用します。

CFBundleShortVersionStringとCFBundleVersionの数値は、どのように比較されていますか?

番号。


2
右、私は2つの数字がどのように使用されるか知っています。問題は、アプリの新しいバージョンをリリースするときに、両方ともインクリメントする必要があるかどうかです。
pkamb 2014年

2
あなたは両方を更新せずにApp Storeのアプリケーションをプッシュしようとした場合はい、あなたは、例えば、エラーメッセージが表示されますstackoverflow.com/questions/19367893/...
アンディ・

ありがとう、すばらしい編集。特にそのリンクについて。オーガナイザーのバリデーターは、CFBundleVersionとCFBundleShortVersionStringの両方で「上位バージョンを含む必要がある」エラーを表示しています。
pkamb 2014年

1
SemVerリンクの+1 ...バージョン番号MAJOR.MINOR.PATCHを指定して、インクリメントします。互換性のないAPIの変更を行う場合はMAJORバージョン、下位互換性のある方法で機能を追加する場合はMINORバージョン、後方に作成する場合はPATCHバージョン-互換性のあるバグ修正。
jeet.chanchawat 2014

これに関して:ユースケースは何ですか?ペイロードを何らかの方法で編集した場合、ビルドは異なり、ユーザーはそれについて知りたがります。私の使用例は、私のアプリがAppleによるレビューに成功したが、App Storeで以前にリリースされたことがないことです。エラーを見つけたので、変更せずにバグ修正したいCFBundleShortVersionString。これは可能ですか?自分のアプリを拒否したい。
テスト

31

CFBundleShortVersionStringは、バージョンのパブリック「名前」です(例:「2.5」または「3.8.1」)。リリースごとに増やす必要があります。

CFBundleVersionはプライベートビルド番号です。AppStoreでは見られません。アップロードするたびに値を増やす必要があります。つまり、オンラインになる前にバイナリを拒否し、新しいバイナリをアップロードする場合、そのCFBundleShortVersionStringは同じになりますが、CFBundleVersionは高くなければなりません(例:public "2.5"、private "2.5"、バイナリ拒否、プライベート「2.5.1」を再アップロード)

2016年11月16日に編集:

/ \ CFBundleVersionプロパティは、コード内のNSURLConnectionによって送信されるヘッダーでも(CFBundleNameとともに)使用されます。User-Agent

例:CFBundleNameMyAppでCFBundleVersionが2.21の場合、NSURLConnectionを使用してコードから直接送信されるプログラムによるHTTPクエリは、ヘッダーを埋め込みます。

User-Agent: MyApp/2.21 CFNetwork/... Darwin/...

(これは、UIWebViewによって自動的に発行された要求には適用されません)。


2
アップロード/リリースの要件間の大きな違い。
pkamb 2014

@gabriel、私はビルド番号をXX-rc2に設定しようとしましたが、オーガナイザーバリデーターでは、XYZと異なるものを設定できません。ここで、X、Y、Zは整数:Sです。-rc2のビルド番号があればいいのですが、これを使って1つのリリースを提出できたことがありますか?
ネストル

1
@nestorそうです、私は間違っていました。使用できるのは数字のみです。回答を編集させてください。
ガブリエル

@gabriel、スクリプトを使用してに解析X.X-rc2X.X.2、CIシステムbuildNumberがiTunesConnectにアップロードするためのを生成するようにします。
AechoLiu 16

5

CFBundleVersionおよびCFBundleShortVersionStringは、アプリの最後のバージョン番号よりも大きい必要があります。それらを同じに保つことは良い習慣です。それらは-info.plistで見つける必要があります。

オーガナイザーでアプリを検証しようとすると、どちらかがインクリメントされていないとエラーがスローされます。昨夜私に起こった。


私はこれらのキーの両方を質問で述べました。あなたの答えは、これらの値の両方がインクリメントされる必要があるということですか?あなたの答えをよりよくサポートできますか?
pkamb 2014年

はい、両方ともインクリメントする必要があります。昨夜、それらをインクリメントする前に送信しようとしたとき、両方のキーについて不平を言いました。
xoail 2014年

追加情報をありがとう。ビルドをアップロードするときにエクスペリエンスを追加するには、回答を編集する必要があります。
pkamb 2014年

6
「それらを同じに保つことは良い習慣です」-これは必ずしも本当ではありません。アプリでテスターを使用している場合は、変更が適用されたときにビルド番号を増やしながら、バージョン番号を同じに保つことができます。継続的インテグレーションを使用すると、たとえばテスターに​​デプロイする前にビルド番号を更新することができます。
アンディ

@Andyあなたは正しい、理にかなっている。ユースケースを指摘していただきありがとうございます。私は単一の開発者/テスター環境の観点からのみ考えていました。
xoail 2014年

5

App Storeに新しいバージョンをリリースする場合は、両方CFBundleVersionとインクリメントするCFBundleShortVersionString 必要があります。

さらに、ストリングの1つは、iTunes Connectで指定されたバージョンと一致する必要があります。

Xcode Organizer Validatorエラー:バージョン番号をインクリメントする必要があります。

この質問は、時にアプリを検証することを拒否Xcodeの主催者の検証の上のスクリーンショットが含まCFBundleVersionCFBundleShortVersionStringインクリメントされていませんが。

  • このバンドルは無効です。CFBundleVersionInfo.plistファイルのキー[1.0] の値には、以前にアップロードされたバージョン[1.134]よりも高いバージョンが含まれている必要があります。

  • このバンドルは無効です。CFBundleShortVersionStringInfo.plistファイルのキー[1.0] の値には、以前にアップロードされたバージョン[1.134]よりも高いバージョンが含まれている必要があります。

バリデーターは、ストリングの1つがiTunes Connectで作成されたアプリのバージョンと一致する必要があることを証明するエラーもスローします。

  • バージョンの不一致。Info.plistのCFBundleVersion ['1.0']もCFBundleShortVersionString ['1.0']も、iTunes Connect ['1.4']で設定されたアプリのバージョンと一致しません。

2

現在のApple Technical Note TN2420、バージョン番号とビルド番号は次のように述べています(私の太字):

  1. iOSアプリの場合、異なるリリーストレインでビルド番号を再利用できますが、同じリリーストレイン内でビルド番号を再利用することはできません。macOSアプリの場合、リリーストレインでビルド番号を再利用することはできません

残念ながら、これは、Mac Catalystで同じビルドをリリースしようとしているときに、iOSのリリーストレイン番号を追跡するビルド番号を再利用できないことを意味します。

私の場合、たとえば、以前のいくつかの問題が原因で、iOSの1.0.2(1)に対応するMac Catalystアプリとして1.0.2(4)をリリースすることになりました。現在、両方で1.0.3(1)をリリースしようとすると、iOSでの検証に合格する一方で、ビルド番号が原因で、アプリはMacOSでの検証に失敗します。

私はiOSとMacOSの両方で同じアプリを定期的にリリースしていると思います。20200111のような日付に対応するビルド番号を採用し、特定のリリース内でビルド番号を変更する必要がある場合は、小数点をインクリメントします。


1

両方をインクリメントする必要があります。

新しいバージョンをアップロードするときは、iTunes Connectで新しいバージョンを作成する必要があります。これは、以前のリリースよりも自動的に上位になります。iTunes Connectのこのバージョンは、同じバージョン番号のバイナリを想定しているCFBundleShortVersionStringため、インクリメントする必要があります。

バージョンを更新したが、をインクリメントするのを忘れた場合CFBundleVersion、アップロード中にエラーが発生します。pkambの回答とスクリーンショットをご覧ください。

CFBundleShortVersionStringおよびの詳細については、httpsCFBundleVersion//stackoverflow.com/a/31921249/936957を参照してください。


1

私は両方の方法を試したばかりで、バージョンとビルド番号のシーケンスが...

1.0.0 (1)
1.0.1 (1)
1.0.2 (1)

... iOSアプリでは受け入れられますが、Mac(Catalyst)アプリでは次のエラーが返されます。

エラーITMS-90061:「このバンドルは無効です。Info.plistファイルのキーCFBundleVersion [1]の値には、以前にアップロードされたバージョン[2]より高いバージョンが含まれている必要があります。」

Macのバージョンとビルド番号は次のようにする必要があります...

1.0.0 (1)
1.0.1 (2)
1.0.2 (3)

iOSの場合、以前はバージョン番号と4桁目の数字としてビルド番号を入力していました...

1.0.0 (1.0.0.1)
1.0.1 (1.0.1.1)
1.0.2 (1.0.2.1)

...しかし、これはMacアプリでも許可されていません。最初のMac(Catalyst)アプリを提出しようとしたとき、Appleは3桁以下のビルド番号しか受け入れませんでした。

エラーITMS-9000:「このバンドルは無効です。Info.plistファイルのキーCFBundleVersion [1.0.0.1]の値は、最大3つの負でない整数のピリオド区切りリストである必要があります。」

そのため、ビルドごとに増分する単一の番号に変更し、バージョン番号間で増分し続けました。


表示されたエラーメッセージはありますか?あれば引用してください!
pkamb

0

新しいMac App Storeアプリをリリースする準備をしています。のCalVerフォーマットを使用しYEAR.release (build)ます。

:私はいくつかのビルドアップロード2020.0 (1)2020.0 (2)など私は最終的に提出2020.0 (8)App Storeのレビューのために。これはレビューに合格し、Pending Developer Release状態にあります。

リリース前にいくつか修正したかったので、同じリリーストレインに新しいビルドを追加しました2020.0 (9)

それはエラーになります:

App Store Connect操作エラー

エラーITMS-90062:「このバンドルは無効ですCFBundleShortVersionString。Info.plistファイルのキー[2020.0] の値には、以前に承認されたバージョン[2020.0]より高いバージョンが含まれている必要があります。詳細についてはCFBundleShortVersionStringhttps://を参照してください。developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring "

私の2020.0バージョンが実際にリリースされたことがないので、これは面倒です。この質問の受け入れられた回答から、アプリがApp Storeで利用可能になるまで、同じバージョンの新しいビルドをリリースし続けることができるという印象を受けました。

解決策は、アプリの状態がPending Developer Releaseの場合、「リリーストレイン」(同じバージョン+新しいビルド)を更新できないことです。既存のビルドをリリースしてからバージョンを上げるか、App Store Connectでこのリリースキャンセルして、このリリーストレインのさらなるアップロードを許可してください。


-2

私の頭の上で、私のビルド番号をインクリメントする必要があるだけですCFBundleVersion。短いバージョンの文字列をインクリメントする必要はありませんが、アプリが新しいことをユーザーに通知するため、おそらくインクリメントする必要があります。Appleは、番号付けは従来のソフトウェアのバージョン管理規則に従うべきだと言っていますが、既存のバージョンを再アップロードしようとすると、iTunes Connectが文句を言うかもしれません。

一言で言えば、うまくいくかもしれませんが、おそらくうまくいきません。


どのキーをインクリメントする必要があるかについての信頼できる回答を探します。CFBundleShortVersionStringインクリメントする必要がない場合、「同じ」ユーザー向けバージョンをApp Storeに複数回アップロードできますか?
pkamb 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.