将Xcode包版本设置为git hash

for*_*rin 22 git xcode

在Xcode中,我想将项目包版本设置为git哈希,以在修订版本和构建版本之间创建唯一的链接.

(我已经看过几个关于这个的帖子,增加了每个构建的内部版本号,但对我来说这似乎过多了,我希望有一个构建号,测试者可以在发送者反馈时参考).

我在构建阶段添加了以下作为运行脚本:

/usr/libexec/PlistBuddy -c "Set :CFBundleVersion `git rev-parse --short HEAD`" *.plist
Run Code Online (Sandbox Code Playgroud)

然后我在代码中读出了包版本:

[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
Run Code Online (Sandbox Code Playgroud)

但是,在下一次构建之前,新版本号不会出现在代码中.我假设这是因为我的脚本运行时编译器已经读取了plist文件.

此外,由于plist 提交到git 之后用修订字符串更改,这会导致项目中出现令人讨厌的差异,所以也许我毕竟不是那么聪明.

另一种方法是将修订号写入git忽略的文本文件(build.txt).但我仍然希望项目内部版本编号也遵循git.

有人知道这样做的好方法吗?

use*_*390 7

您需要安装PlistBuddy才能使用此方法.

我使用的方法是将脚本设置为最后一个构建阶段,并在目标构建目录上进行更改.换一种说法:

BUILD_NUMBER=`git rev-parse --short HEAD`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUMBER" "${TARGET_BUILD_DIR}"/"${INFOPLIST_PATH}"
Run Code Online (Sandbox Code Playgroud)

所以在repo中,值应该是一个像0这样的虚拟值,并且每次都会被覆盖.这意味着当前的构建编号只有在构建后才可用.


Abi*_*ern 5

有很多方法可以做到这一点.

我曾经运行一个post build脚本来将sha注入到bundle中:

https://gist.github.com/208825

但是Cocoa的一个更现代的方法是我的女朋友博客http://www.cimgf.com/2011/02/20/revisiting-git-tags-and-building/