关于版本号的基础知识见:
[浅谈iOS版本号] (http://segmentfault.com/a/1190000002423661)
其中提到管理版本号两种技术方式,对其实践后,对其中一些地方增加了些补充说明, 希望对读者有所帮助。
第一种:agvtool (Apple-generic versioning tool)
Segmentfault 中图片中的 current project version 指的就是 build number.
简单说下 agvtool 的用法:
首先,打开终端命令行 ,cd 工程直接路径 例如工程名为AutoCellDemo 则cd /Users/itdept/Desktop/practice/AutoCellDemo
用命令行来更新版本号:
- 更新version number 到2.0 则输入命令:$xcrun agvtool new-marketing-version -all 2.0
- 更新build number 到2.0 则输入命令:$xcrun agvtool new-version -all 2.0
自动更新版本号
- 自动增加你的Build Number 执行的命令:$xcrun agvtool next-version -all
- 自动增加你的Version Number 执行的命令:$xcrun agvtool next-marketing-version -all
- 把如上代码加到脚本中即可,这样就实现了每次 Build 就 build number 自动加1
查看版本号
- 查看当前的Version Number 执行:$xcrun agvtool what-marketing-version
- 查看当前的Build Number 执行:$xcrun agvtool what-version
第二种:PlistBuddy
PlistBuddy 介绍:
Plist文件是以.plist为结尾的文件的总称. 众所周知, Plist在Mac OSX系统中起着举足轻重的作用,就如同Windows里面的Registry一样,系统和程序使用Plist文件来存储自己的安装/配置/属性等信息。正如可以使用命令行命令来处理大多数系统管理一样,操作Plist文件也是系统提供的。PlistBuddy是一个Mac里的命令行下读写plist文件的工具。位于/usr/libexec/下,由于这个路径不在默认的PATH里,需要通过绝对路径/usr/libexec/PlistBuddy引用。
1) 添加
plistbuddy -c 'Add :Software:Gallery:Version string "1.0"' ~/Desktop/com.sample.plist
2) 输出
plistbuddy -c "Print" ~/Desktop/com.sample.plist
3) 修改
plistbuddy -c 'Set :Software:Gallery:Version "1.1"' ~/Desktop/com.sample.plist
4) 删除
plistbuddy -c 'Delete :Software:Gallery:Version' ~/Desktop/com.sample.plist
5) 合并
plistbuddy -c "Merge ~/Desktop/Global.plist :Software:Gallery" ~/Desktop/com.sample.plist
注意事项:
1) 如何定义嵌套的键值: 正如前面说的它使用一种简单的描述方式,上一层的键值在前面,而每个键值之间使用”:”符号分隔,比如:本文最初的例子中Software->Gallery->OnlineMarketplace表述为:”:Software:Gallery:OnlineMarketplace”, 第一个”:”表示根.
2) 而如果键值的名称包含空格等特殊字符的时候,如同命令行的转义字符一样,使用”/”来转义,比如: “:Software:Gallery:Online/ Marketplace”.
3) PlistBuddy如果不使用”-c”参数,则进入人机交互模式, “-c”的意思就是执行它后面的命令列表,而命令如果有参数,需要把它们包含在引号中,
4) 在Xcode中的脚本通常如下
/usr/libexec/PlistBuddy -c “Set :CFBundleVersion appBuild"" {TARGET_BUILD_DIR}/${INFOPLIST_PATH}”
最后:Segmentfaults 上的那份脚本,在App 上显示版本号正常,在Xcode的Plist中显示不正常,修改后的脚本如下
if [ $CONFIGURATION == Debug ]; then
# 获取Git 提交数
git=`sh /etc/profile; which git`
buildNumber=`"$git" rev-list --all |wc -l`
# 将buildNumber 写入 plist 文件
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"
else
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"
fi
哈哈,大功告成!
附:Demo 连接:
https://github.com/skyming/BuildVsersion