在Xcode中,我想将项目包版本设置为git哈希,以在修订版本和构建版本之间创建唯一的链接。
(我已经看过几个关于这个的帖子,增加了每个版本的内部版本号,但对我来说这似乎过多了,我想有一个内部版本号,测试人员可以在发件人反馈时参考)。
我在Build Phases中添加了以下作为运行脚本:
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion `git rev-parse --short HEAD`" *.plist
然后我在代码中读出了包版本:
[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
但是,在 next 构建之前,新版本号不会出现在代码中。我假设这是因为我的脚本运行时编译器已经读取了plist文件。
此外,由于在提交到git之后,plist被修改后的字符串更改了,这会导致项目中出现令人讨厌的差异,所以也许我毕竟不是那么聪明。
另一种方法是将修订号写入git忽略的文本文件(build.txt)。但是我仍然希望项目内部版本号跟随git。
任何人都知道这样做的好方法吗?
答案 0 :(得分:7)
您需要安装PlistBuddy
才能使用此方法。
我使用的方法是将脚本设置为最后一个构建阶段,并在目标构建目录上进行更改。换句话说:
BUILD_NUMBER=`git rev-parse --short HEAD`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUMBER" "${TARGET_BUILD_DIR}"/"${INFOPLIST_PATH}"
因此在repo中,值应该是一个虚拟值,如0,每次都会被覆盖。这意味着当前的构建编号只有在构建后才可用。
答案 1 :(得分:6)
https://gist.github.com/966838是一个简短的bash脚本,符合Apple CFBundleVersion should be a monotonically increased string的要求。
答案 2 :(得分:5)
有很多方法可以做到这一点。
我曾经运行一个post build脚本来将sha注入bundle:
https://gist.github.com/208825
但是Cocoa的一个更现代的方法是我的女朋友博客http://www.cimgf.com/2011/02/20/revisiting-git-tags-and-building/
答案 3 :(得分:2)
我为此写了much shorter script。 Bash可以完成任务;不需要其他口译员。