iTunes Connect中的“版本号”,Xcode中的“捆绑版本”,“捆绑版本字符串”之间有什么区别?


94

Apple的文档在如何提交更新版本方面可能更加清晰。

如标题中所述,两者之间有什么区别

  1. iTunes Connect中的版本号(提交更新时必须提供)
  2. xcode中的捆绑版本
  3. 捆绑软件版本字符串,短

它们有任何关系吗?


12
苹果及其令人困惑的条款/领域...:/
BoltClock

Answers:


142

是的,它们是相关的。它们都引用您的应用程序的版本。

  • iTunes Connect
    这是App Store中显示的版本号。这必须是一个纯版本号,例如1.2.3

  • 捆绑软件版本(CFBundleVersion)
    这不必是纯版本号。可以是123451.2.3 (Build 12345AB)。例如,这在Mac OS X应用程序的“关于”窗口中显示,通常更像是“内部版本号”而不是“版本号”。

  • 捆绑软件版本字符串(CFBundleShortVersionString) 此值用作“实际”版本号。此字符串必须iTunes Connect中的版本使用的字符串相同。

更新:
@snlehton指出,CFBundleVersion必须是纯版本号,就像1.2.3您要将应用程序上载到(iOS)App Store时一样。


3
为了进行测试,请将捆绑软件版本字符串设置为最终版本号,例如1.2.3,然后为每个构建增加捆绑软件版本。
Fabian Kreiser

19
这是错误的 CFBundleVersion必须在xyz中使用,否则上载版本将失败!链接
snlehton

2
我最近提交了带有CFBundleVersion并带有“ 1.0.2 RC3”的版本,该版本被弹跳并显示错误消息:“捆绑包无效。Info.plist文件中的密钥CFBundleVersion必须是句点分隔的非负整数列表。” 我认为nn.n.nxnnn是要使用的正确格式,但尚未尝试过。
snlehton

3
CFBundleVersion为1235,没有问题
Piotr Tomasik

4
这里的困惑是因为CFBundleShortVersionString是可选的,并且在设置它时会更改CFBundleVersion的用途。如果仅包括CFBundleVersion,则它必须是公共版本号,例如1.0。但是,如果同时设置了CFBundleVersion和CFBundleShortVersionString,则CFBundleShortVersionString现在必须是公共版本号,例如1.0。现在,CFBundleVersion更改为内部版本号,通常是一个整数,例如374629。希望可以清除它。
malhal 2015年

27

是的,它们是相关的,但是它们的定义取决于它们的使用方式。

  • iTunes Connect版本

    始终必须是版本号,例如1.0

使用模式1-仅设置CFBundleVersion

  • 捆绑版本(CFBundleVersion)

    必须是版本号,例如1.0。必须与iTunes Connect版本匹配。

使用模式2-设置CFBundleVersion和CFBundleShortVersionString

  • 捆绑版本(CFBundleVersion)

    必须是内部版本号,例如像435163这样的单个整数。

  • 捆绑短版字符串(CFBundleShortVersionString)

    必须是版本号,例如1.0。必须与iTunes Connect版本匹配。

使用模式2是最好的方法。以下是一些应用升级路径的示例编号:

CFBundleShortVersionString CFBundleVersion 
1.0                        1
1.0.1                      2
1.0.2                      3
1.2                        5  (build 4 was a beta and never released publicly)
1.2.1                      6

关于版本号的额外说明:如果您向应用程序提交了次要更新(例如,错误修复),则您绝对不能错过版本号,例如,始终使用1.0.1和NEVER 1.01,否则您将冒无法使用的风险。将来的某些版本号,因为将无法增加它们。


2
仅该表在解释这两个数字之间的关系和在实践中的使用方面发挥了最大的作用。谢谢。
Joshua Pinter

必须与iTunes Connect版本匹配。这不是一个硬性要求(即使它是必须的)
Marco Pappalardo

13

是的,它们都是相关的。

版本号在itunesconnect是您需要提供的版本号。例如,2.1.1或3.1.2等。这也应该等于CFBundleShortVersionString

Xcode中的捆绑版本CFBundleVersion)仅表示内部版本号,该内部版本号标识应用程序的迭代(已发布或未发布)。

捆绑版本字符串shortCFBundleShortVersionString)是一个数字,由三个以点分隔的整数组成。第一个代表应用程序的任何重大更新,例如实现新功能或重大更改的更新。第二个整数表示实现次要特征的修订。第三个整数表示维护版本。


3
实际上,“捆绑版本字符串,短”不必是由点分隔的三个数字。我认为“ 1”和“ 1.1”也是有效的。
Nicolas Miari 2014年

实际上,从我在itunesconnect中测试的版本号与CFBundleVersion和ShortVersion完全无关。因此,您甚至可以让它们有所不同
Marco Pappalardo

11

注意CFBundleVersion。这不仅是生产版本号。Apple在二进制上传过程中检查了该值,并且可能使它失败。

要确保你设置CFBundleVersion与价值CFBundleShortVersionString当你建立你的释放的提交。

看到关于它的这篇文章


3
这是正确的信息,接受的答案实际上有误。
snlehton

9
这是不正确的,CFBundleVersion不必匹配CFBundleShortVersionString。例如,如果您查看Chrome的当前.ipa文件(现在在应用程序商店中),则其具有“ 34.0.1847.18” CFBundleVersion和“ 34.1847.18” CFBundleShortVersionString
progrmr 2014年

6
没有文档说明CFBundleVersion和CFBundleShortVersionString应该相同。
Toydor

8

可接受的答案是解决之道-仅以示例为例。

对于我们的最新发行版,“ Bundle Version String,short”是必需的,我继续将其与Bundle版本号(对于我们的应用程序是1.2.8)进行匹配。

然后,我启用了Testflight,并使内部测试人员可以使用等待Apple审查的版本(1.2.8)。但是,测试人员发现了需要修复的问题,因此我们删除了二进制文件。上载新版本时,出现错误,表明该版本已经上传。

在阅读了一些SO链接和Apple文档之后,我的理解是制作了捆绑软件版本:1.2.8.001,同时保持了bundle-version-short的原样。如果需要新的版本,我们将bundle-version增至1.2.8.002。

注意:已接受上载,并且该版本在预发行版中显示为“ 1.2.8.001”。版本号仍为1.2.8。


3

该链接的可接受答案包含详细信息 :::在App Store发布后,必须增加哪个iOS应用版本/内部版本号?

来自苹果文档

CFBundleVersion(捆绑版)

CFBundleVersion(String-iOS,OS X)指定捆绑软件的内部版本号,该版本号标识捆绑软件的迭代(已发行或未发行)。内部版本号应该是由三个非负的,由句点分隔的整数组成的字符串,并且第一个整数大于零。该字符串应仅包含数字(0-9)和句点(。)字符。每个整数前导零将被截断,并且将被忽略(即1.02.3等于1.2.3)。该密钥不可本地化。

CFBundleShortVersionString(捆绑版本字符串,简称)

CFBundleShortVersionString(String-iOS,OS X)指定捆绑软件的发行版本号,该发行版标识应用程序的发行版本。发行版本号是一个由三个句点分隔的整数组成的字符串。第一个整数表示应用程序的主要修订,例如实现新功能或重大更改的修订。第二个整数表示实现次要特征的修订。第三个整数表示维护版本。

此键的值与CFBundleVersion的值不同,CFBundleVersion的值表示应用程序的迭代(已发布或未发布)。可以通过将其包含在InfoPlist.strings文件中来对其进行本地化。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.