iOS自动化版本号和编译号

引言

在实际开发中,经常会遇到批量版本号更新的问题,一般情况下都是手动修改,但是笔者最近在看官方文档的时候发现了苹果提供的自动化工具,特此分享。
版本号和编译号分别是代表了正式发布版本和内部版本,agvtool 是一个自动增加版本号的命令行工具。
注意:版本号是给用户看的,用于标明当前的发行版本,并且被存储在 App 的 Info.plist 文件的 CFBundleShortVersionString (Bundle versions string, short) 中。编译号是内部使用的,用于标明未发行或者已内部发行的应用程序,并且它被存储在 Info.plist 文件的 CFBundleVersion (Bundle version) 中。
注意:如果应用程序包含了多个目标(target),agvtool 工具将会把所有目标都设置为同一个版本号和编译号。

Xcode

启用 agvtool

选择 Build Settings 更新下列所有编译选项。

  • 设置 Current Project Version 为选定的值
    Xcode 工程文件 project.pbxproj 包含了 CURRENT_PROJECT_VERSION (Current Project Version) 编译设定,这个编译设定指定了当前工程的版本。agvtool 会搜索此编译选项。如果这个值存在就运行,否则不运行,这个值用来更新编译号。

注意:Current Project Version 的值必须是整数或者浮点数,新工程最好设置为1。

  • 设置 Versioning SystemApple Generic
    默认情况下苹果不使用任何版本系统,设置为 Apple Generic 确保 Xcode 包含全部的 agvtool 生成的版本信息。

设置版本和编译号

agvtoolInfo.plist 文件搜索版本和编译号。如果存在就更新,不存在就不执行。确保 CFBundleVersion (Bundle version)CFBundleShortVersionString (Bundle versions string, short) 存在。

命令行

退出 Xcode,在终端下进入到包含 .xcodeproj 工程文件的目录,.xcodeproj 文件包含了 project.pbxproj 文件。

更新版本号

使用下列命令更新版本号:

> agvtool new-marketing-version <your_specific_version>

例如:

$ xcrun agvtool new-marketing-version 2.0
Setting CFBundleShortVersionString of project MyProject to:
    2.0.
 
Updating CFBundleShortVersionString in Info.plist(s)...
 
Updated CFBundleShortVersionString in "MyProject.xcodeproj/../MyProject/MyProject-Info.plist" to 2.0

更新编译号

使用下列命令自动更新编译号:

> agvtool next-version -all

例如:

$ xcrun agvtool next-version -all
Setting version of project MyProject to:
    2.
 
Also setting CFBundleVersion key (assuming it exists)
 
Updating CFBundleVersion in Info.plist(s)...
 
Updated CFBundleVersion in "MyProject.xcodeproj/../MyProject/MyProject-Info.plist" to 2

注意:此命令是将工程编译号自动增加为下一个最大的整数。例如从2到3、1.3到2。

将编译号设置为指定版本

运行下列命令:

> agvtool new-version -all <your_specific_version>

例如将编译号设置为2.6.9:

$ xcrun agvtool new-version -all 2.6.9
Setting version of project MyProject to:
    2.6.9
 
Also setting CFBundleVersion key (assuming it exists)
 
Updating CFBundleVersion in Info.plist(s)...
 
Updated CFBundleVersion in "MyProject.xcodeproj/../MyProject/MyProject-Info.plist" to 2.6.9

查看版本号

使用以下命令查看当前版本号:

> agvtool what-marketing-version

例如:

$ xcrun agvtool what-marketing-version
No marketing version number (CFBundleShortVersionString) found for Jambase targets.
 
Looking for marketing version in native targets...
Looking for marketing version (CFBundleShortVersionString) in native targets...
 
Found CFBundleShortVersionString of "2.0" in "MyProject.xcodeproj/../MyProject/MyProject-Info.plist"

使用以下命令查看当前编译号:

> agvtool what-version

例如:

$ xcrun agvtool what-version
Current version of project MyProject is:
    2.2
    原文作者:山河永寂
    原文地址: https://segmentfault.com/a/1190000004678950
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞