版本与内置Xcode

我有一个用Xcode 3开发的应用程序,最近开始用Xcode 4编辑。在目标摘要中,我有iOS应用程序目标表单,其中包含以下字段:标识符、版本、构建、设备和部署目标。version字段为空,build字段为3.4.0(这与我仍然使用Xcode 3编辑应用程序时的版本相匹配)

我的问题是:

  1. 版本和构建字段之间有什么区别

  2. 为什么升级到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中:

  1. 加载您的Xcode项目
  2. 在左侧窗格中,单击层次结构顶部的项目。这将加载项目设置编辑器
  3. 在中央窗格的左侧,单击应用程序的目标标题下。您需要为每个项目目标配置此设置
  4. 选择构建阶段选项卡
    • 在Xcode 4的右下角,单击添加构建阶段按钮,然后选择添加运行脚本
    • 在Xcode 5中,选择编辑器菜单>添加构建阶段添加运行脚本构建阶段
  5. 拖放新的运行脚本阶段,将其移动到复制捆绑资源阶段之前(此时app-info.plist文件将与应用捆绑在一起)
  6. 在新的运行脚本阶段,设置Shell/bin/bash
  7. 将以下内容复制并粘贴到整数版本号的脚本区域:

    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

  8. 如果您有一个显示版本和内部版本的设置包,则可以在脚本末尾添加以下内容以更新版本和内部版本注意:更改首选项说明符值以匹配您的设置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
    
  9. 如果你有一个通用的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
    

发表评论