2011-03-24 70 views
18

我正在使用Xcode 4,并且我在run scheme(一个bash脚本)中添加了一个预配置,但似乎Xcode忽略了脚本的退出状态并始终运行,即使退出代码不为零。Xcode没有检测到预执行失败是否正常?

这是正常的吗?我有什么替代方案可以添加自定义步骤,哪一个可以失败?

更新:我也尝试exit 1为构建后的行动,但具有相同的结果,始终执行没有任何反馈。

我该如何制作一个可以将构建标记为失败的自定义步骤?

回答

20

它不仅不关心前/后动作脚本退出状态,而且似乎也没有将输出放入构建/运行日志中。我认为有关这个埋在Apple的Xcode 4开发论坛中的两条独立线程。没有关于这是一个错误还是一个功能。

+7

这很糟糕,大的时间。 – sorin 2011-05-01 13:00:11

+0

同上 - 完全不能接受的垃圾 – 010110110101 2011-06-28 02:01:52

+0

敬请期待。 :-) – 2011-06-28 03:02:07

3

您可以在运行脚本阶段添加诸如kill $PPID之类的内容来终止xcodebuild(退出代码为70)。

+1

你也可以将它与一个bash“陷阱”结合为一行(参见http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_12_02.html):trap“kill $ PPID”ERR – 2016-02-12 23:25:33

+2

可能是xcodebuild的一个很好的解决方案,但请注意:如果您在Xcode中编译,它将立即终止Xcode! – ishahak 2017-01-03 10:12:09

0

使用Xcode时,kill $PPID不是解决方案,因为我正在评论Farcaller。

我的解决办法是有动作前的脚本生成一个头文件(例如SchemePreActions.h)并使其为空正常情况,并将其包含到您的代码(例如到AppDelegate.m)。

这样一来,如果你想预动作脚本报告错误,把那里#error线,想在这个真实世界的例子:

if [ $CONFIGURATION == Debug ]; then 
    echo "#error AppStore builds must not be in debug configuration" >> SchemePreActions.h 
fi 

的Xcode会非常漂亮,报告此错误。

建议让生成的文件被git忽略。


作为小费我会补充说,我的预动作脚本总是与这些行开始:

echo "//auto-generated. no need to commit"  > SchemePreActions.h 
echo "#define SCHEME_${SCHEME_NAME}"   >> SchemePreActions.h 
echo "#define SCHEME_NAME @\"${SCHEME_NAME}\"" >> SchemePreActions.h 
if [[ ${SCHEME_NAME} =~ "_PROD" ]]; then 
    echo "#define PRODUCTION"     >> SchemePreActions.h 
fi 

这样,通过包括SchemePreActions.h,我的代码可以测试一下,看看如果在特定方案下运行。

相关问题