2011-08-16 22 views
7

我不希望Archive构建成功,除非我的工作目录是干净的。因此,我想添加一个“运行脚本”建设阶段(或类似的东西)我的Xcode项目这样的:如果我的git工作副本很脏,如何停止Xcode存档版本?

IF我进行存档建立...

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

那么构建失败并显示错误。

我在Xcode 4的工作和Git 1.7。

什么是良好的,简洁的,可重复使用的脚本,将做的工作?

回答

9

这里的剧本我已经出来:

#!/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. 在Build部分中,添加新的目标,然后取消除存档中列所有的箱子。这确保脚本只能在归档中运行。 (见this question一个解释和一个不错的屏幕截图。)
  5. 现在尝试创建一个存档,然后看着它失败,因为你没有在这些变化检查!

如果Xcode 4 Pre-and Post-actions可以用于这个(所以你不需要创建一个“伪”目标),但是它们似乎不能够影响构建,而且我也不知道它们在哪个目录下执行,哪些环境变量可用或者其输出的位置。

+0

谢谢!我花了相当长的时间来研究如何[添加新目标](http://stackoverflow.com/a/10407469/2547229)! – Benjohn

+0

我非常希望能够在脚本中使用构建设置 - 基本上我需要[标记中的构建名称,版本和内部版本号](http://stackoverflow.com/q/27326469/2547229)。这些变量似乎没有被赋予使用这种方法的脚本? – Benjohn

+0

在Xcode 8.3.2中,通过文件>新建>目标...>跨平台>外部构建系统添加一个“外部构建系统”目标。 –

相关问题