Xcode版本(CFBundleShortVersionString)和构建版本(CFBundleVersion)之间的区别

96

App Target Summary

在Xcode 4中,我看到我的目标摘要如下:
"版本"输入对应于info.plist文件中的CFBundleShortVersionString,而"构建"输入对应于CFBundleVersion。
这两者之间有什么区别?我在互联网上看到很多人想要为两者都放入相同的值,我的怀疑是为了向后兼容。
我有两个问题:
1)如果我从头开始,版本化应用程序的最佳实践是什么?
2)在我应用程序的所有以前版本中,我只使用了CFBundleVersion。为了不搞乱升级过程,我应该继续按照我一直以来的方式增加CFBundleVersion,还是有可能转换为“正确的方式”,假设存在这种方式?

3
这是一个重复的问题,与 https://dev59.com/IWw15IYBdhLWcg3wD3np 相同,但也许这个版本陈述得更清楚一些(并带有屏幕截图)。 - Daniel Dickison
你需要做什么才能在摘要中显示“Build”字段?我只看到版本,但没有构建字段。 - Kenny Wyland
4个回答

69

苹果文档“信息属性列表关键字参考”指出,CFBundleShortVersionString表示发布版本,而CFBundleVersion表示任何构建版本,无论是否发布。此外,CFBundleShortVersionString可以本地化,尽管我不知道为什么要这样做,因为他们说它应该是“由三个用点分隔的整数组成的字符串”。对于发布版本,将这两个数字设置为相同是合理的。对于开发版本,您可以在CFBundleVersion后面添加其他内容,例如另一个点和整数。


版本号(CFBundleShortVersionString)是提交给苹果的唯一重要内容。构建号(CFBundleVersion)可用于开发中,或在应用程序内显示。如果您喜欢,可以使用八进制(基数8)并以12的反向迭代方式。 - nekno
16
实际上,CFBundleVersion 对于苹果很重要。当提交应用时,请查看苹果给出的以下错误消息:“您上传的二进制文件无效。Info.plist 文件中的关键字 CFBundleVersion 必须包含比先前上传版本更高的版本。” - malhal
11
一些国家使用不同于西方世界所用的现代阿拉伯数字,例如东部阿拉伯数字(٠‎,١‎,٢‎,٣‎,٤‎,٥‎,٦‎,٧‎,٨‎,٩‎)或希伯来数字(א,ב,ג,ד,ה,ו,ז,ח,ט)。这两种数字系统也是从右到左书写的。还有许多其他数字系统存在(请参见http://en.wikipedia.org/wiki/Category:Numerals)。因此,我的猜测是,这就是苹果所说的“可本地化”的版本号的含义。 - Ruslan Ulanov
顺便说一下,标点符号的三个数字并非必需。我一直在使用日期时间值,例如 201606070620,在一款运输iOS 7-8-9应用程序中同时代替这两个值。 - Basil Bourque
版本号后面可以跟着“alpha”或“beta”。 这3个整数不是版本控制的最终解决方案,幸运的是苹果没有强制执行语法(但CFBundleVersion是必须的)。 - Lothar
显示剩余2条评论

3

JWWalker问为什么要本地化CFBundleShortVersionString,那是因为小数点分隔符的问题。例如,在小数点分隔符实际上是逗号的语言环境中,版本“1.5”将变成“1,5”。


30
您无需将版本号本地化。我居住在一个小数分隔符为逗号的地区(德国),我习惯于使用点来分隔版本号。实际上,我记不得曾经见过带有逗号的版本号。 - Christian Specht
2
我也生活在一个使用逗号作为小数分隔符的地区,尽管1,3,1是相当奇怪的值,但1.3.1似乎更好。 - Lucien
1
我认为这意味着您可以为不同的地区拥有不同版本的应用程序。1.2.1 > en.lproj 1.2.2 > fr.lproj尽管在本地化文件时整个plist都被复制,因此两个版本号都被复制,因此两者都“可以本地化”。 - brian.clear

1

请参阅苹果文档以上传二进制文件。

版本和构建编号: iTunes Connect从二进制文件中提取其预发布版本号和构建编号。 预发布版本号是Xcode版本号或Info.plist中的“Bundle version string,short”键。 构建编号是Xcode Build编号或Info.plist中的“Bundle version”键。 预发布版本号和构建编号将显示在预发布选项卡上,如查看构建中所述。

为应用程序上传二进制文件


1

快速解决方法:

只需在plist文件中添加 CFBundleShortVersionString 并编辑您的版本即可。

  1. 打开您的 InfoPlist.strings 文件
  2. 将以下代码粘贴到文件中(假设文件处于源代码模式)

{"CFBundleShortVersionString"= "1.1";}

  1. 将1.1更改为您的新版本。
  2. 构建并提交,就不会再出现错误了!

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接