预动作发生在构建之前,因此输出不会出现在构建日志中,而是会出现在stdErr中。您可以将输出复制到文件中:
exec > ${PROJECT_DIR}/prebuild.log 2>&1
echo "hello world"
这将把hello world
写入名为"prebuild.log"的文件中,该文件位于您的项目文件夹中。
对于XCode版本<13.2
如果您希望这些操作最终出现在构建日志中,请考虑向目标的构建阶段添加一个运行脚本。
对于XCode版本>=13.2
XCode构建日志现在包括一个Run pre-actions部分。如果您不重定向到一个文件,那么这些消息将成为此部分中'Run custom shell script'的最后一项 - 可通过XCode Report Navigator访问。
man bash
,查看名为“重定向”的部分。...“将标准输出和标准错误都重定向到文件[filename
]”。 - foundry补充答案https://dev59.com/flgQ5IYBdhLWcg3wnVR3#42497746,尽可能不要在project.pbxproj(构建脚本存放处)或方案文件(这些脚本所在的地方)中混杂太多东西。
有了这个想法,我在项目根目录下创建了一个 Build-Scripts 文件夹,将应用程序构建脚本和预动作脚本放入此文件夹中。将此文件夹作为文件夹拖入项目根目录,以便自动将添加到其中的任何脚本添加到项目中。
假设您的预动作脚本名为That_pre-action_script.sh
,这是我根据批准的答案在预动作脚本中放置的内容。
say "Pre build scripts running."
exec > "${PROJECT_DIR}/prebuild.log" 2>&1
echo "Starting build scheme Pre-actions"
"${PROJECT_DIR}/Build-Phases/That_pre-action_script.sh"
作为测试,请确保从您的脚本中回显一些消息,以便您可以在prebuild.log
文件中看到它。
希望这可以帮助您。
不要忘记在终端中chmod u+x
您的脚本,以使其运行。
重要的部分是如果您无法确定您的构建脚本是否正在运行。这就是say
命令有用的地方,这样您就知道在构建之前实际发出了命令。
最好将路径周围的引号放在项目路径中存在任何空格字符(或其他情况)的情况下。
AppleScript
在 Xcode 中显示对话框或通知,并提供错误提示。https://dev59.com/rG035IYBdhLWcg3wbPjc#63655906 - RY_ Zheng