Xcode方案预处理脚本未运行

51

点击构建后,构建日志中没有任何输出。发生了什么?

Xcode版本8.2.1(8C1002)

在此输入图片描述


在我的情况下,我使用 AppleScript 在 Xcode 中显示对话框或通知,并提供错误提示。https://dev59.com/rG035IYBdhLWcg3wbPjc#63655906 - RY_ Zheng
2个回答

125

预动作发生在构建之前,因此输出不会出现在构建日志中,而是会出现在stdErr中。您可以将输出复制到文件中:

exec > ${PROJECT_DIR}/prebuild.log 2>&1
echo "hello world"

为了让环境变量正常工作,您还需要将“提供构建设置”设置为适当的目标。

enter image description here

这将把hello world写入名为"prebuild.log"的文件中,该文件位于您的项目文件夹中。

对于XCode版本<13.2
如果您希望这些操作最终出现在构建日志中,请考虑向目标的构建阶段添加一个运行脚本。

对于XCode版本>=13.2
XCode构建日志现在包括一个Run pre-actions部分。如果您不重定向到一个文件,那么这些消息将成为此部分中'Run custom shell script'的最后一项 - 可通过XCode Report Navigator访问。

enter image description here

enter image description here


5
谢谢@foundry提供的帮助,但很遗憾并没有起作用。未创建任何文件。 - user1951992
我正在创建一个全新的项目。因此,启动Xcode > 选择iOS框架 > 命名 > 保存 > 编辑方案 > 展开“构建” > 选择“预操作” > 添加此脚本 > 按下CMD + B。 - user1951992
2
谢谢@foundy。顺便问一下:2>&1是什么? - user1951992
2
@robdashnash - man bash,查看名为“重定向”的部分。...“将标准输出和标准错误都重定向到文件[filename]”。 - foundry
1
请检查您的 ${PROJECT_DIR} 所指向的位置,例如我(错误地)查看了我的工作区文件夹(根目录),但它实际上是指向您的 xcodeproj 文件所在的文件夹(如果像我一样,您为它们准备了两个不同的文件夹)。 - Eugenio
显示剩余6条评论

12

补充答案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命令有用的地方,这样您就知道在构建之前实际发出了命令。

最好将路径周围的引号放在项目路径中存在任何空格字符(或其他情况)的情况下。


2
谢谢你提到引号的问题!这正是我系统上的整个问题所在。你会认为我们现在应该有空格感知软件... - Oscar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接