【发布时间】:2011-07-25 04:35:27
【问题描述】:
我有一个脚本,我使用 Xcode 4 中的运行脚本构建阶段中的 osascript 运行该脚本。该脚本会进行一些检查以尝试捕获 plist 等中的任何人为错误。
但是,我真的只想在开发人员选择“存档”时运行此脚本,而不是在每次构建时都运行它。
有什么方法可以测试这种情况吗?使用 Shell 脚本还是 Apple 脚本?
【问题讨论】:
我有一个脚本,我使用 Xcode 4 中的运行脚本构建阶段中的 osascript 运行该脚本。该脚本会进行一些检查以尝试捕获 plist 等中的任何人为错误。
但是,我真的只想在开发人员选择“存档”时运行此脚本,而不是在每次构建时都运行它。
有什么方法可以测试这种情况吗?使用 Shell 脚本还是 Apple 脚本?
【问题讨论】:
在 Xcode 4+ 中,您可以将此脚本作为“存档”操作的前置或后置脚本运行。但是,操作前和操作后脚本不被视为构建本身的一部分;它们的输出不是构建日志的一部分,失败的脚本不会导致构建失败。
如果您想将此脚本作为构建的一流部分包括在内,这样它的失败将导致构建失败,那么您将想做其他事情。创建一个新的“外部构建系统”目标,并将其配置为运行您的脚本。脚本的路径可以是相对路径,相对于项目根目录。
最后,打开您的主项目方案,并在“构建”标签中添加新的检查器目标,并将其设置为仅包含在“存档”操作中。这应该会导致您的检查器脚本仅在选择“存档”时作为构建的一部分运行,并且如果脚本返回非零值,则构建将失败。
以下是配置 bash 脚本以仅在归档目标时运行的分步可视化指南:
【讨论】:
${CONFIGURATION} 变量,例如:config="Release" if [ "$config" = "${CONFIGURATION}" ]; then echo "Running my script" fi
如果您不执行 3.,脚本将一直运行,但如果您选中该框,它只会在存档时运行。
【讨论】:
在我自己的系统上进行的快速测试表明,直接“构建”和“构建和存档”之间的详细脚本输出没有区别。
此外,您无法测试存档的存在(或不存在),因为它只会在进程结束时创建,此时所有脚本都已运行。
据我所知,Xcode 3 中目前没有执行此操作的选项。也许向 Apple 提出改进请求?
当您等待 Apple 时,我能提供的唯一解决方案是使用 xcodebuild 和 xcrun 作为命令行 shell 脚本的一部分,您会知道您是否正在归档。这不是停留在 Xcode 中的解决方案,但它确实具有很大的灵活性。
【讨论】: