125

これは私の最初の iOS アプリの申請であり、アプリが拒否されることを望んでいません。

これはApple Docsからのものです:

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

CFBundleShortVersionString (文字列 - iOS、OS X) は、アプリのリリースされたイテレーションを識別する、バンドルのリリース バージョン番号を指定します。リリース バージョン番号は、ピリオドで区切られた 3 つの整数で構成される文字列です。最初の整数は、新機能や主要な変更を実装するリビジョンなど、アプリの主要なリビジョンを表します。2 番目の整数は、目立たない機能を実装するリビジョンを示します。3 番目の整数は、メンテナンス リリースを表します。

このキーの値は、アプリのイテレーション (リリース済みまたは未リリース) を識別する「CFBundleVersion」の値とは異なります。このキーは、InfoPlist.strings ファイルに含めることでローカライズできます。

しかし、それは少し奇妙に思えます。これに対する私の解釈は、両方の値を同じにすることです。つまり、

CFBundleVersion: 1.0.0
CFBundleShortVersionString: 1.0.0

誰かがそれが私が入れるべきものであることを100%確認できますか?

4

7 に答える 7

132

CFBundleShortVersionStringは、アプリのバージョンを提供します。通常、アプリを App Store に公開するたびに増加します。これは、アプリケーションの App Store ページの「バージョン」セクションに表示されるバージョンです。

CFBundleVersionは、開発とテスト、つまり「技術的」目的で使用されるビルド番号を提供します。エンド ユーザーがビルド番号に関心を持つことはめったにありませんが、開発中は、各ビルドで何が開発され、修正されているかを知る必要がある場合があります。これは通常、内部リリースの反復ごとに増加します。また、Jenkins などの継続的インテグレーション ツールを使用して、ビルドごとにビルド番号を自動インクリメントできます。

バージョンとビルド番号

2 つの数値は相互に依存しませんが、混乱を避けるためにそれらを平行にしておくことをお勧めします。アプリが App Store のレビューに合格したら、公開するかどうかに関係なく、Phil や likeTheSky が述べたようにビルド番号を増やす必要があることに注意してください。

ユースケース: 十分にテストされたビルドがあり、提出の準備ができているとしましょう。バージョン番号は1.0.0で、ビルド番号は1.0.0.32です。アプリを送信したら、バージョンを1.0.1に、ビルド番号を1.0.1.0に更新する必要があります。

于 2015-08-10T13:45:47.147 に答える
19

rmaddyの答えは正しいです。さらに2つの考えを追加します。

3 番目のバージョン番号

アプリの定義の一部として iTunesConnect Web サイトで指定されている 3 番目のバージョン番号に注意してください。その数が Xcode の 2 つと異なる場合、Apple は警告を表示します。この警告は目立たない (「エラー」ではない) ため、無視できます。

バージョンとしての日時

また、句読点を含む 3 つの数字を使用する必要はありません。これは、一部のアプリでは意味があるかもしれません。従来、最初の数字の変更は、通常、互換性に影響するある種の劇的な変更を示していました。

他のアプリでは、 ISO 8601標準形式スタイル (YYYYMMDDHHMM)の日時値のみを使用したい場合があります。たとえば、201606070620. 年-月-日-時-分のこの順序は、増加し続ける数をレンダリングします。これは、パディング ゼロにより常に同じ長さであり、アルファベット順に並べ替えた場合も時系列になります。

iOS 7、8、および 9 で動作する出荷中の iOS アプリで、このスタイルのバージョン番号を使用することに成功しました。

この値の生成を自動化することもできます。プロジェクトのTarget> Build Phases>Run Scriptパネルで:

  1. Shellフィールドで指定します。/bin/sh
  2. 以下に示す 5 行のスクリプトを貼り付けます。
  3. (オプション) チェックボックスをオンにしShow environment variables in build logます。
  4. チェックボックスをオフにしRun script only when installingます。

ビルドを行うたびに、UTCタイム ゾーンの現在の日時が取得されます。スクリプトの-uフラグは、現在のデフォルトのタイム ゾーンではなく UTC を使用します。一般に、プログラマーやシステム管理者は、ローカル タイム ゾーンではなく UTC を使用して考えるのが最適です。

#!/bin/bash
buildNumber=$(date -u "+%Y%m%d%H%M")
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $buildNumber" "$INFOPLIST_FILE"  # Version number
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"  # Build number
echo "DateTime for app version number: $buildNumber"

1.2.3または、従来のバージョン番号と日時をビルド番号として使用して、ハイブリッドを実行します。ハイブリッドを行うには、前CFBundleShortVersionStringに a を付けて行をコメントアウトするだけです。#

于 2014-05-04T20:12:59.273 に答える
7

CFBundleVersion の各フィールドの最大数はいくつですか?

アプリで CFBundleVersion を 1.1.1 に設定し、「lsregister -dump」でバージョンの 16 進数値を調べると、最初のフィールドの最大値は (2^22)-1 または 4194303 であり、最大値は2 番目と 3 番目のフィールドの値は (2^21)-1 または 2097151 です。

3 つのフィールドを合計すると、最大 64 ビットになります。

これは、日付と時刻に基づいて CFBundleVersion を使用する私たちにとって意味があります。

最初のフィールドを YYYYMMDD に設定していました。これは常に最大許容バージョンよりも大きく、控えめに言っても、複数のバージョンがインストールされていて「open -a Appname」などを使用している場合に、Launch Services が実行するアプリのバージョンを決定するときに、予測不可能な結果につながりました。 ' コマンド ラインから。

これを広く広めてください。多くの人がこれで立ち往生していると確信しています。

于 2017-01-12T13:25:06.173 に答える
7

現時点では、状態に関する Apple のドキュメントCFBundleVersion[私のものを強調]:

バンドルのイテレーションを識別するビルド バージョン。

...

このキーは、10.14.1 . 文字列には、数字 (0 ~ 9) とピリオドのみを含めることができます。

...

さらに整数を含めることができますが、システムはそれらを無視します。

CFBundleShortVersionString[強調鉱山]の場合:

バンドルのリリースまたはバージョン番号。

...

このキーは、バンドルのバージョンのユーザーに表示される文字列です。必要な形式は、10.14.1 のようにピリオドで区切られた 3 つの整数です。文字列には、数字 (0 ~ 9) とピリオドのみを含めることができます。

ビルドごと (または TestFlight へのリリースごと)に自動的にインクリメントCFBundleVersionし、変更するたびに 0 にリセットすることをお勧めしますCFBundleShortVersionString

でユーザーに表示されるバージョンを更新するには、明示的に計画するか、一貫した方法を考案する必要がありますCFBundleShortVersionString

于 2019-05-10T15:07:21.827 に答える