我使用CFBundleVersion来指示 CFBundleShortVersionString 的内部构建。我使用试飞来为我的测试人员提交构建,因此它们之间的差异非常有用。
苹果文件说CFBundleVersion “应该是一个由3 个非负的、以句点分隔的整数组成的字符串”但实际上它可以是超过 3 个部分(如上面的答案所示)。我用它来表示我的开发版本,比如我的 CFBundleShortVersionString 是 1.0.0,我可以使用 1.0.0.11 表示 CFBundleVersion 来表示这是我发布 1.0.0 的第 11 个版本
提交到应用商店的每个 CFBundleVersion 都应该比以前大,否则你会得到ERROR ITMS-90478 : "Invalid Version. The build with version "xxx" can't import because a later version has been closed for new build submissions. 选择不同的版本号。”
CFBundleShortVersionString只能有 3 个部分,否则您将收到错误 ITMS-90060:Info.plist 文件中键 CFBundleShortVersionString 'xxx' 的值必须是最多三个非负整数的句点分隔列表。”
Basil Bourque 提到的第三个数字,即iTunesConnect上显示的版本号是事情可能变得复杂的地方。
我使用与CFBundleShortVersionString不同的 iTunesConnect 编号,因为当我第一次将我的应用程序提交到应用商店时,我们已经有很多轮内部版本。所以我使用 1.0 作为 iTunesConnect 编号,使用 5.x 作为 CFBundleShortVersionString。在应用商店的下一个版本中,我提供了一个功能来检查应用商店中是否有更新的版本,并意识到我现在遇到了麻烦,因为我只能获得 iTunesConnect 号码(使用http://itunes.apple.com/lookup?bundleId=
)所以我需要在比较之前做一些计算带有 CFBundleShortVersionString 编号。
我试图通过使用 iTunesConnect 编号作为我的 CFBundleShortVersionString 来解决这个问题,但得到了错误,ERROR ITMS-90062:“此捆绑包无效。Info.plist 文件中键 CFBundleShortVersionString [xxx] 的值必须包含比该版本更高的版本先前批准的版本 [xxx]。”
因此,我建议始终使它们相同。