如何查看自定义构建步骤(操作前或操作后)的编译器的输出?
您将在日志导航器中找到(并且可以在构建过程中观看)完整的构建输出。这是“运行”和“构建”按钮下方小图标中最右边的图标。
预操作输出至少出现在 system.log 中并且在 Console.app 中可见。
根据我在这里的回答(Xcode 不检测预操作是否失败是否正常?)这是开发论坛中讨论过的问题。操作前/操作后脚本非零状态似乎没有影响,输出似乎也没有进入任何日志。
就我而言,我必须以友好的方式向用户显示
pre-action
脚本中的错误。受到这个自定义存档脚本的启发,我发现我可以在 Xcode 中显示对话框或脚本。
show_dialog() {
/usr/bin/osascript -e 'set titleText to "pre actions script error"
set dialogText to "Please install xxx to fix it"
display dialog dialogText with icon stop with title titleText'
}
show_dialog
我在这里使用
stop
图标,您也可以使用其他图标,例如 note
和 caution
notification
。show_notification() {
/usr/bin/osascript -e 'display notification "Please install xxx to fix it" with title "A error happens" subtitle "Prebuild" sound name "Frog"'
}
show_notification
对我来说,我通常使用
Script Editor
来编辑AppleScript函数,然后将它们复制到Shell脚本中
所以我想出了一个方法来实现这两点:
基本概念是将构建事件的所有输出发送到各种文件,然后将该输出作为目标构建脚本的一部分呈现(该脚本确实显示其输出并且可以退出或取消)。
警告黑客即将来临
设置一个构建脚本,自动处理将输出泵送到 2 个不同的文件... 1 个用于常规日志,一个用于 stderr。 或者使用 mine (我在我的博客上发布了,因为看起来堆栈溢出代码检测在 shell 脚本中很糟糕。)
然后你应该在方案预构建阶段调用该脚本,如下所示:
"${PATH_TO_LOG_SCRIPT}/log_prebuild.sh" "${PATH_TO_PREBUILD_SCRIPT_TO_EXECUTE}/scriptToExecute.sh" 2> "${SOURCE_ROOT}/build/prebuild_error.log"
然后,您需要在目标构建阶段的编译阶段之前设置一个脚本,用于检查这些文件是否存在,将它们转储到日志中,并在出现失败时中断构建。 或者你可以再次使用我的
然后构建并交叉手指:)
将此行添加到运行脚本的顶部,并将输出文件放在可以访问的位置:
exec > ${PROJECT_DIR}/prebuild.log 2>&1
echo "this line will be in prebuild.log"