20

我正在使用 Xcode (4.6.2),我的目标是外部构建工具。自动生成的方案在构建期间调用就好了。

在运行时,我希望该方案执行另一个 shell 脚本。这并不直观,但我通过设置/bin/bash为可执行文件并将我的脚本作为参数传递来管理它。

剩下的唯一步骤是我想在运行后执行另一个脚本。在这里,我认为这很容易,只是尝试将其设置为后期操作。

但无论如何,我无法让 xcode 执行我的操作后脚本。不管它是什么。我什至试过echo hi > /tmp/testfile...

我需要那个后期动作来做一些清理工作。


简而言之:

  1. 我有一个脚本build_me,它是我的外部构建工具
  2. 我有一个脚本run_me,我将我的方案设置为运行
  3. 我有一个脚本cleanup,我想将其作为运行后操作

无法让 Xcode 运行我的操作后脚本或任何.

4

6 回答 6

16

我建议您通过添加exec > /tmp/xcode_build.log 2>&1到运行脚本阶段的开头来启用对文件的日志记录。

cat /tmp/xcode_build.log您可以通过在终端中运行来查看日志

这将允许您打印出路径等并验证脚本的功能。

要打印脚本的位置,您可以在后期操作中添加以下内容:

exec > /tmp/my_log_file.txt 2>&1
pwd
于 2017-11-07T21:21:13.327 回答
10

这适用于 Xcode 5.0,经过测试,我认为它应该在 4.6.2 中同样工作。

仅当您从程序中退出程序时,后操作才有效

当您在 Xcode 中单击停止时它将不会运行,否则将终止程序。就我而言,当我在程序处于焦点时按 CMD-Q 时它会起作用。

使用 bash 脚本文件进行后期操作

这些设置有效: 在此处输入图像描述

于 2014-01-16T01:54:18.437 回答
2

如果其他人遇到这种情况,我在我的项目目录中使用了一个脚本文件,并且该文件没有正确的权限让构建过程运行该脚本。我在前/后操作/运行脚本区域做了以下操作

chmod 755 ${PROJECT_DIR}/BuildScripts/IncrementBuildNumber.sh
${PROJECT_DIR}/BuildScripts/IncrementBuildNumber.sh
于 2016-04-05T17:10:55.893 回答
2

这有点奇怪,但 Archive 在命令行调用时会执行 pre 和 post 脚本。

所以我在我的项目文件夹中创建了一个 archive.sh 脚本,我将项目的名称(与主要目标相同 - 但你可以根据需要进行配置)作为参数传递:

xcodebuild clean -project $1.xcodeproj -configuration Release -target $1
xcodebuild archive -project $1.xcodeproj -scheme $1

然后我创建一个“外部构建”目标名称“存档”,使用 ./archive.sh 作为脚本。

当我构建这个目标时,项目被清理、构建和存档。并执行方案中定义的 post 脚本

请注意,因为我是从 shell 脚本构建的,所以我已经在归档方案中删除了我的 post 脚本,而是在我的 archive.sh 脚本中的构建命令之后调用它。

这种方式让我可以更好地控制工作目录、变量和所有……更方便

于 2016-05-03T09:48:02.043 回答
0

根据您使用的编程语言,您可以执行以下操作(它是伪代码):

system( <command> 2>&1 | tee run.log && exit $PIPESTATUS )
于 2014-01-09T22:28:49.393 回答
0

对我来说,“不工作”效果是由我的脚本中的目录路径查找失败引起的。

如果您在目标的Build Phases运行脚本,则这样的相对目录路径将起作用:

INFO="MyApp/Info.plist"

但是在Pre-Actions中它会默默地失败。相反,您必须使用这样的绝对目录路径:

INFO="${PROJECT_DIR}/MyApp/Info.plist"
于 2020-12-12T03:20:55.547 回答