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

时间:2011-08-16 21:21:35

标签: xcode git build xcode4

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

IF 我正在执行存档构建...

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

那么构建失败并出现错误。

我正在使用Xcode 4和git 1.7。

什么是可以完成这项工作的优秀,简洁,可重复使用的脚本?

1 个答案:

答案 0 :(得分: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

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

清洁/脏检查基于this question(我忘了我已经提出了答案)。

如果您不想创建代码,请删除git tag行。

如果您不想停止构建,请移除exit 1行。

要在项目中安装它:

  1. 将它放在项目目录中的一个文件中(我称之为ArchiveHousekeeper.sh)并确保设置了可执行位(chmod +x
  2. 在Xcode项目中,添加一个新的“外部构建系统”目标
    • 姓名:“档案管家”(或任何你喜欢的人)
    • 构建工具:./ArchiveHousekeeper.sh
  3. 在Xcode菜单上,选择产品 - >编辑方案......
  4. 在“构建”部分中,添加新目标,然后取消选中“归档”列中除“目标”之外的所有框。这可确保脚本仅在Archive上运行。 (请参阅this question获取解释和精彩截图。)
  5. 现在尝试创建一个存档,并观察它是否因为您没有签入这些更改而失败!
  6. 如果可以使用Xcode 4 Pre-and-Action动作(因此你不需要创建一个“假”目标),那将是很好的,但它们似乎无法影响构建,并且我也不知道它们在哪个目录中执行,可用的环境变量或输出的位置。