如果我的git工作副本很脏,如何停止Xcode Archive构建?

ben*_*ado 9 git xcode build xcode4

除非我的工作目录是干净的,否则我不希望Archive构建成功.因此,我想在我的Xcode项目中添加一个"运行脚本"构建阶段(或类似的东西),这样:

如果我正在执行存档构建...

并且我的源目录中有未提交的更改

然后构建失败并出现错误.

我正在使用Xcode 4和git 1.7.

什么是一个好的,简洁的,可重用的脚本,可以完成这项工作?

ben*_*ado 10

这是我提出的脚本:

#!/bin/sh
if [ -z "$(git status --porcelain)" ]; then
    TAG=`date +xcarchive-%Y%m%d-%H%M%S`
    echo "Working directory clean, creating tag ${TAG}"
    git tag -a -m "Xcode Archive created" ${TAG}
    exit 0
else
    echo "error: Working directory dirty, stopping build"
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

作为奖励,如果工作副本是干净的,它会创建一个标签.

干净/脏的检查是基于这个问题(我忘了我已经提出了答案).

如果您不想创建标记,请删除该git tag行.

如果您不想停止构建,请删除该exit 1行.

要在项目中安装它:

  1. 把它放在项目目录中的一个文件中(我调用它ArchiveHousekeeper.sh)并确保可执行位设置(chmod +x)
  2. 在Xcode项目中,添加一个新的"外部构建系统"目标
    • 名称:"档案管家"(或任何你喜欢的)
    • 构建工具: ./ArchiveHousekeeper.sh
  3. 在Xcode菜单上,选择Product - > Edit Scheme ...
  4. 在"构建"部分中,添加新目标,然后取消选中"存档"列中除"框"之外的所有框.这可确保脚本仅在Archive上运行.(请参阅此问题以获得解释和精美的屏幕截图.)
  5. 现在尝试创建一个存档,并观察它失败,因为您没有签入这些更改!

如果Xcode 4 Pre-and Action-action可以用于此(那么你不需要创建一个"假的"目标)会很好,但它们似乎不能影响构建,而且我也有不知道它们在哪个目录中执行,可用的环境变量或输出的位置.