我正在使用Xcode(4.6.2),我的目标是外部构建工具。自动生成的方案在构建期间调用就好了。
在RUNNING上,我希望该方案执行另一个shell脚本。这不直观,但我通过将/bin/bash
设置为可执行文件并将我的脚本作为参数传递来管理它。
剩下的唯一步骤是我想在运行后执行另一个脚本。在这里,我认为这很简单,只是试图将其设置为后期行动。
但无论如何,我都无法让xcode执行我的动作后脚本。
无论它是什么。我试过echo hi > /tmp/testfile
甚至......
我需要采取后期行动进行一些清理工作。
简而言之:
build_me
是我的外部构建工具run_me
,我将我的方案设置为cleanup
,我希望在行动后运行无法让Xcode运行我的动作后脚本或任何。
答案 0 :(得分:7)
这适用于Xcode 5.0,经过测试,我认为它应该在4.6.2中工作相同。
当您单击Xcode中的Stop时,它将无法运行,否则将终止该程序。对于我的情况,当我在节目聚焦时按CMD-Q时它会起作用。
这些设置有效:
答案 1 :(得分:3)
我建议您通过将exec > /tmp/xcode_build.log 2>&1
添加到运行脚本阶段的开头来启用日志记录。
您可以通过在终端
中运行cat /tmp/xcode_build.log
来查看日志
这将允许您打印出路径等,并验证脚本的功能。
要打印脚本的位置,您可以在后期操作中添加以下内容:
exec > /tmp/my_log_file.txt 2>&1
pwd
答案 2 :(得分:2)
这有点奇怪,但是当从命令行调用时,Archive会执行前后脚本。
所以我在我的项目文件夹中创建了一个archive.sh脚本,我将项目名称(与主目标相同 - 但您可以根据需要配置)作为参数:
xcodebuild clean -project $1.xcodeproj -configuration Release -target $1
xcodebuild archive -project $1.xcodeproj -scheme $1
然后我创建一个"外部构建"目标名称"存档",将./archive.sh作为脚本。
当我构建此目标时,Project将被清理,构建和存档。 并执行方案中定义的后期脚本
请注意,因为我是从shell脚本构建的,所以我删除了我的 在归档方案中发布脚本,而不是在构建之后调用它 我的archive.sh脚本中的命令。
这种方式让我可以更好地控制工作目录和变量 所有......它更方便
答案 3 :(得分:0)
根据您使用的编程语言,您可以这样做(它是伪代码):
system( <command> 2>&1 | tee run.log && exit $PIPESTATUS )
答案 4 :(得分:0)
如果有其他人遇到此问题,我在项目目录中使用了一个脚本文件,并且该文件没有正确的构建过程权限来运行脚本。我在前/后操作/运行脚本区域中执行了以下操作
chmod 755 ${PROJECT_DIR}/BuildScripts/IncrementBuildNumber.sh
${PROJECT_DIR}/BuildScripts/IncrementBuildNumber.sh
答案 5 :(得分:0)
对我来说,“不起作用”的原因是我的脚本中的目录路径查找失败。
如果您在目标的 Build Phases (运行阶段)中运行脚本,则这样的相对目录路径将起作用:
INFO="MyApp/Info.plist"
但是在前置操作中,它会静默失败。 相反,您必须使用这样的绝对目录路径:
INFO="${PROJECT_DIR}/MyApp/Info.plist"