【问题标题】:Running script only for an 'Archive' build in Xcode 4仅为 Xcode 4 中的“存档”构建运行脚本
【发布时间】:2011-07-25 04:35:27
【问题描述】:

我有一个脚本,我使用 Xcode 4 中的运行脚本构建阶段中的 osascript 运行该脚本。该脚本会进行一些检查以尝试捕获 plist 等中的任何人为错误。

但是,我真的只想在开发人员选择“存档”时运行此脚本,而不是在每次构建时都运行它。

有什么方法可以测试这种情况吗?使用 Shell 脚本还是 Apple 脚本?

【问题讨论】:

    标签: iphone xcode xcode4


    【解决方案1】:

    在 Xcode 4+ 中,您可以将此脚本作为“存档”操作的前置或后置脚本运行。但是,操作前和操作后脚本不被视为构建本身的一部分;它们的输出不是构建日志的一部分,失败的脚本不会导致构建失败。

    如果您想将此脚本作为构建的一流部分包括在内,这样它的失败将导致构建失败,那么您将想做其他事情。创建一个新的“外部构建系统”目标,并将其配置为运行您的脚本。脚本的路径可以是相对路径,相对于项目根目录。

    最后,打开您的主项目方案,并在“构建”标签中添加新的检查器目标,并将其设置为仅包含在“存档”操作中。这应该会导致您的检查器脚本仅在选择“存档”时作为构建的一部分运行,并且如果脚本返回非零值,则构建将失败。

    以下是配置 bash 脚本以仅在归档目标时运行的分步可视化指南:

    1. 文件>新建>目标>其他>外部构建系统

    2. 相应地命名产品并将/bin/bash设置为构建工具

    3. 在 Info > Arguments 下提供脚本的路径新创建的目标

    4. Product > Scheme > Edit Scheme...,并在归档之前编辑您希望此脚本运行的目标的方案。在 Build 下,添加您在步骤 1 中添加的 External Build System 目标。如果需要,重新排序。然后取消选中除存档之外的所有内容。

    【讨论】:

    • 可爱。在发布问题几天后,我确实找到了前/后操作。虽然从来没有尝试过。为细节干杯。
    • 需要注意的一点:当你设置一个新的“外部构建系统”目标时,一定要进入它的依赖关系并将它设置为依赖于你的另一个目标——否则它可以运行在另一个目标完成构建之前。
    • 对于那些想要更简单的方法的人,您可以检查脚本中的${CONFIGURATION} 变量,例如:config="Release" if [ "$config" = "${CONFIGURATION}" ]; then echo "Running my script" fi
    • 假设您从未在发布模式下运行任何其他操作。分析(至少为了性能)通常也是在发布模式下完成的,所以你也会在那里运行这个脚本。
    • 我的用例是更新构建版本号,Xcode 在运行任何自定义脚本操作之前处理 Info.plist 文件。但是,首先处理依赖的构建目标。这也比 Scheme 脚本操作好得多,因为它们几乎没有设置任何有用的环境变量。
    【解决方案2】:
    1. 将“新运行脚本阶段”添加到项目的“构建阶段”
    2. 将脚本移动(拖放)到正确的位置
    3. 勾选“仅在安装时运行脚本”

    如果您不执行 3.,脚本将一直运行,但如果您选中该框,它只会在存档时运行。

    【讨论】:

    • 一直在尝试为 Firebase 符号上传解决这个问题,这对 XCode 9 非常有用 - 谢谢!
    • 很高兴它有帮助!
    【解决方案3】:

    在我自己的系统上进行的快速测试表明,直接“构建”和“构建和存档”之间的详细脚本输出没有区别。

    此外,您无法测试存档的存在(或不存在),因为它只会在进程结束时创建,此时所有脚本都已运行。

    据我所知,Xcode 3 中目前没有执行此操作的选项。也许向 Apple 提出改进请求?

    当您等待 Apple 时,我能提供的唯一解决方案是使用 xcodebuild 和 xcrun 作为命令行 shell 脚本的一部分,您会知道您是否正在归档。这不是停留在 Xcode 中的解决方案,但它确实具有很大的灵活性。

    Xcode "Build and Archive" from command line

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-30
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 2021-12-29
      • 2011-07-31
      相关资源
      最近更新 更多