必须在App Store发布时增加哪些iOS应用程序版本/内部版本号?
iOS应用程序的三个版本/构build字段是:
-
“Version” CFBundleShortVersionString (String – iOS,OS X)指定包的发行版本号,它标识应用程序的已发布迭代。 发行版本号是由三个以句点分隔的整数组成的string。
-
“Build” CFBundleVersion (String – iOS,OS X)指定了bundle的版本号,标识bundle的迭代(释放或未发布)。 构build版本号应该是一个由三个非负的,句点分隔的整数组成的string,第一个整数大于零。 该string应该只包含数字(0-9)和句点(。)字符。 前导零从每个整数中截断,将被忽略(即1.02.3相当于1.2.3)。 此密钥不可本地化。
-
“iTunes Connect版本号” :在iTunes Connect上创build应用程序的新版本时指定的版本号。
我的问题是:
当新版本的应用上传到App Store时,需要增加哪个版本/内部版本号?
CFBundleShortVersionString
或CFBundleVersion
在应用程序更新之间保持不变?
iTunes上传无效版本/内部版本号时显示的Apple信息源的额外点或确切的错误信息。
Android / Google Play注意:
提示这个问题的讨论是,Google Play商店中的Android应用的公共“版本”不需要增加,也不会被validation。 android:versionName
在版本,升级,降级或任何随机string之间可以保持不变,而不是看起来是有效的“版本号”。
android:versionName
– 一个string值,表示应用程序代码的发行版本,因为它应该显示给用户。该值是一个string,以便您可以将应用程序版本描述为
<major>.<minor>.<point>
string或任何其他types的绝对或相对版本标识符。
而android:versionCode
被强制为一个递增发布的整数。
苹果文档
正如刚刚接受的答案中所指出的那样,苹果最近在其网站上增加了一个技术说明,详细讨论了他们的版本/内部版本号scheme:
Apple技术说明TN2420 – 版本号和内部版本号
Apple技术说明TN2420,版本号和内部版本号
概要:
- 对(
Version
,Build number
Version
Build number
)必须是唯一的。- 该顺序是有效的:(1.0.1,12) – >(1.0.1,13) – >(1.0.2,13) – >(1.0.2,14)…
-
Version
( CFBundleShortVersionString )必须按升序排列。 -
Build number
( CFBundleVersion )必须按升序排列。
版本号和内部版本号清单
将新版本提交给App Store时,可以检查以下几项内容。 确保您正确设置了版本号和内部版本号,这样可以避免您的应用因configuration不当而被自动拒绝。
- 对于您的应用程序的每个新版本,您需要创build一个新的版本号。 该数字应该比您使用的上一个版本号码更大。 虽然您可以为应用程序的任何特定版本提供许多版本,但您只需为每个新版本的应用程序使用一个新的版本号。
- 您不能重复使用版本号。
- 对于您提交的每个新版本,您都需要创build一个新的内部版本号,其值大于您使用的最后一个内部版本号(对于同一版本)。
- 您可以在不同的发行版中重新使用版本号,但不能在同一发行版中重新使用版本号。
根据清单,以下(Version, Build Number)
序列也是有效的。
-
案例:在不同的发行版中重新使用
Build Number
。(1.0.0,1) – >(1.0.0,2)→…(1.0.0,11)→( 1.0.1,1 )→(1.0.1,2)
CFBundleShortVersionString
应该与您给iTunes Connect的版本号相匹配。 这也是当用户在App Store中查看你的App时出现的版本号。
版本号在商店中显示,该版本应该与稍后在iTunes Connect中input的版本号相匹配。
资源
CFBundleVersion
不会显示在App Store中,而是由iTunes用来确定您的应用程序何时更新。
如果您更新构buildstring(如“设置版本号和构buildstring”中所述),则iTunes会识别构buildstring已更改,并将新的iOS App Store程序包正确地同步到testing设备。
资源
更具体地回答你的问题
当新版本的应用上传到app store时,需要增加哪个版本/内部版本号?
都。 一个显示在App Store中,另一个由iTunes用来更新App。
CFBundleShortVersionString或CFBundleVersion在应用程序更新之间保持不变?
没有。(元问题,这里的用例是什么?如果你已经以任何方式编辑了有效载荷,构build将会不同,用户将会想知道它)。 如果你尝试,你会看到像下面的错误信息:
还是他们比较以前各自的数字,以确保数字更大的数字与新版本的应用程序上传?
是。 使用semver.org标准。
CFBundleShortVersionString和CFBundleVersion的数字是否相互比较?
没有。
CFBundleShortVersionString是版本的公共“名称”(例如:“2.5”或“3.8.1”)。 您必须在每个版本中增加它。
CFBundleVersion是私有版本号。 在AppStore上没有看到。 您必须在每次上传时增加它。 这意味着如果你在上线之前拒绝了一个二进制文件,并且你想上传一个新的二进制文件,它将会有相同的CFBundleShortVersionString,但是必须有一个更高的CFBundleVersion (例如:public“2.5”,private“2.5”,然后二进制拒绝,并重新上传私人“2.5.1”)
2016年11月16日修改:
/ ! \代码中的NSURLConnection发送的User-Agent
头中也使用CFBundleVersion属性(以及CFBundleName )。
例如:如果CFBundleName是MyApp而CFBundleVersion是2.21,那么你的代码使用NSURLConnection直接发送的任何编程HTTP查询将embedded标题:
User-Agent: MyApp/2.21 CFNetwork/... Darwin/...
(这不适用于由UIWebView自动发出的请求)。
CFBundleVersion和CFBundleShortVersionString必须大于应用程序的上一个版本号。 保持相同是一个好习惯。 你应该在你的-info.plist中find它们。
当您尝试在组织者中validation应用程序时,如果其中任何一个都没有增加,则会发出错误。 昨天晚上发生在我身上。
在向App Store发布新版本时, 必须增加CFBundleVersion
和CFBundleShortVersionString
。
此外,其中一个string必须与iTunes Connect中指定的版本匹配。
这个问题包括Xcode Organizer的validation器的上述屏幕截图,当CFBundleVersion
和CFBundleShortVersionString
没有增加时,拒绝validation应用程序。
-
这个包是无效的。 Info.plist文件中的密钥
CFBundleVersion
[1.0]的值必须包含比先前上载的版本[1.134]更高的版本。 -
这个包是无效的。 Info.plist文件中的键
CFBundleShortVersionString
[1.0]的值必须包含比先前上载的版本[1.134]更高的版本。
validation器还会抛出一个错误,certificate其中一个string必须与iTunes Connect上创build的应用程序的版本相匹配。
- 版本不匹配。 Info.plist中的CFBundleVersion ['1.0']和CFBundleShortVersionString ['1.0']都不匹配在iTunes Connect ['1.4']中设置的应用程序的版本。
你需要增加两个 。
上传新版本时,您需要在iTunes Connect上创build一个新版本,该版本会自动高于以前的版本。 iTunes Connect上的这个版本将期待一个具有相同版本号的二进制文件,因此需要增加CFBundleShortVersionString
。
如果更新版本,但忘记增加CFBundleVersion
,则在上传过程中会遇到错误。 请参阅pkamb的答案和截图。
有关CFBundleShortVersionString
和CFBundleVersion
详细信息,请参阅: https : //stackoverflow.com/a/31921249/936957
AFAIK,我的头顶,你只需要增加构build号CFBundleVersion
。 增加短版本string不一定需要,尽pipe你可能应该增加它,因为它告诉用户应用程序是新的。 苹果公司表示,编号应该遵循传统的软件版本规范,但是如果您尝试重新上传已经存在的版本,iTunes Connect可能会抱怨。
长话短说,它可能工作,但可能不会。