我有一个用Xcode 3开发的应用程序,最近开始用Xcode 4编辑。在目标摘要中,我有iOS应用程序目标表单,其中包含以下字段:标识符、版本、构建、设备和部署目标。version字段为空,build字段为3.4.0(这与我仍然使用Xcode 3编辑应用程序时的版本相匹配)
我的问题是:
-
版本和构建字段之间有什么区别
-
为什么升级到Xcode 4后版本字段为空
苹果公司对这些领域进行了重新安排
展望未来,如果您查看应用程序目标的“信息”选项卡,则应使用“捆绑版本字符串,简短”作为您的版本(如3.4.0),使用“捆绑版本”作为您的构建(如500或1A500)。如果两个都看不到,可以添加它们。这些将映射到正确的版本,并在摘要选项卡上构建文本框;它们是相同的值
查看“信息”选项卡时,如果右键单击并选择“显示原始键/值”,您将看到实际名称为CbundleShortVersionString(版本)和CbundleVersion(构建)
该版本通常以您在Xcode 3中使用它的方式使用。我不确定您问的版本/构建差异是什么级别的,所以我将从哲学的角度回答
有各种各样的计划,但最受欢迎的是:
{MajorVersion}.{MinorVersion}.{Revision}
- 主要版本-主要更改、重新设计和功能
变化 - 次要版本-次要改进、功能增加
- 修订版-用于修复错误的修补程序编号
然后,构建单独用于指示某个版本或整个产品生命周期的构建总数
许多开发人员从0开始构建,每次构建时,他们都会将构建数量增加1,永远增加。在我的项目中,我有一个脚本,在每次构建时自动增加构建数量。请参阅下面的说明
- 版本1.0.0可能是构建542。花了542次构建才达到一个目标
1.0.0版本 - 版本1.0.1可能是构建578
- 1.1.0版可能是构建694版
- 版本2.0.0可能是构建949
其他开发者,包括苹果,有一个版本号,由主要版本+次要版本+版本号组成。这些是实际的软件版本号,而不是用于营销的值
如果您转到Xcode菜单>关于Xcode,您将看到版本号和内部版本号。如果你点击更多信息按钮,你会看到很多不同的版本。由于在Xcode 5中删除了更多信息…按钮,该信息也可从系统信息应用程序的软件>开发者部分获得,可通过打开苹果菜单>了解此Mac系统报告…
例如,Xcode 4.2(4C139)。营销版本4.2是构建主版本4、构建次版本C和构建编号139。下一个版本(大概是4.3)可能是构建版本4D,构建编号将从0开始,并从0开始递增
iPhone模拟器的版本/版本号与iPhone、Mac等的版本/版本号相同
- 3.2:(7W367a)
- 4.0:(8A400)
- 4.1:(8B117)
- 4.2:(8C134)
- 4.3:(8H7)
更新:根据请求,以下是创建脚本的步骤,每次在Xcode中构建应用程序时都会运行该脚本,以读取构建编号,增加它,并将其写回应用程序的{app}-Info.plist文件。如果要将版本号/内部版本号写入设置.bundle/Root*.plist文件,可以选择其他步骤
这是从这里的how-to文章扩展而来的
在Xcode 4.2-5.0中:
- 加载您的Xcode项目
- 在左侧窗格中,单击层次结构顶部的项目。这将加载项目设置编辑器
- 在中央窗格的左侧,单击应用程序的目标标题下。您需要为每个项目目标配置此设置
- 选择构建阶段选项卡
-
- 在Xcode 4的右下角,单击添加构建阶段按钮,然后选择添加运行脚本
- 在Xcode 5中,选择编辑器菜单>添加构建阶段添加运行脚本构建阶段
- 拖放新的运行脚本阶段,将其移动到复制捆绑资源阶段之前(此时app-info.plist文件将与应用捆绑在一起)
- 在新的运行脚本阶段,设置Shell:
/bin/bash -
将以下内容复制并粘贴到整数版本号的脚本区域:
buildNumber=$(/usr/libexec/PlistBuddy-c“Print CFBundleVersion”“$INFOPLIST\u文件”) buildNumber=$($buildNumber+1)) /usr/libexec/PlistBuddy-c“Set:CFBundleVersion$buildNumber”“$INFOPLIST\u文件”正如@Bdebeez所指出的,苹果通用版本控制工具(
agvtool)也可以使用。如果您更喜欢使用它,那么首先有两件事需要更改:- 选择构建设置选项卡
- 在版本控制部分下,将当前项目版本设置为要使用的初始版本号,例如1
- 回到构建阶段选项卡上,在复制捆绑资源阶段之后拖放运行脚本阶段,以避免在尝试构建和更新包含构建编号的源文件时出现争用情况
请注意,使用
agvtool方法,您仍然可以定期获得失败/取消的生成,而不会出现错误。因此,我不建议将agvtool与此脚本一起使用。不过,在运行脚本阶段,您可以使用以下脚本:
“${DEVELOPER\u BIN\u DIR}/agvtool”下一版本-全部next version参数增加内部版本号(bump也是同一事物的别名),并且-all使用新的内部版本号更新Info.plist -
如果您有一个显示版本和内部版本的设置包,则可以在脚本末尾添加以下内容以更新版本和内部版本注意:更改
首选项说明符值以匹配您的设置PreferenceSpecifiers:2表示查看plist文件中PreferenceSpecifiers数组下索引2处的项,因此对于基于0的索引,这是数组中的第三个首选项设置。productVersion=$(/usr/libexec/PlistBuddy-c“打印CbundleShortVersionString”“$INFOPLIST\u文件”) /usr/libexec/PlistBuddy-c“Set PreferenceSpecifiers:2:DefaultValue$buildNumber”Settings.bundle/Root.plist /usr/libexec/PlistBuddy-c“Set PreferenceSpecifiers:1:DefaultValue$productVersion”Settings.bundle/Root.plist如果使用的是
agvtool而不是直接读取Info.plist,则可以将以下内容添加到脚本中:buildNumber=$(“${DEVELOPER\u BIN\u DIR}/agvtool”什么版本-简洁) productVersion=$(“${DEVELOPER\u BIN\u DIR}/agvtool”什么营销版本-terse1) /usr/libexec/PlistBuddy-c“Set PreferenceSpecifiers:2:DefaultValue$buildNumber”Settings.bundle/Root.plist /usr/libexec/PlistBuddy-c“Set PreferenceSpecifiers:1:DefaultValue$productVersion”Settings.bundle/Root.plist -
如果你有一个通用的iPad应用程序;iPhone,然后您还可以设置iPhone文件的设置:
/usr/libexec/PlistBuddy-c“设置首选项说明符:2:DefaultValue$buildNumber”设置。bundle/Root~iphone.plist /usr/libexec/PlistBuddy-c“Set PreferenceSpecifiers:1:DefaultValue$productVersion”Settings.bundle/Root~iphone.plist