引言
在实际开发中,经常会遇到批量版本号更新的问题,一般情况下都是手动修改,但是笔者最近在看官方文档的时候发现了苹果提供的自动化工具,特此分享。
版本号和编译号分别是代表了正式发布版本和内部版本,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 System
为Apple Generic
默认情况下苹果不使用任何版本系统,设置为Apple Generic
确保 Xcode 包含全部的agvtool
生成的版本信息。
设置版本和编译号
agvtool
从 Info.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