仅为Xcode 4中的"Archive"构建运行脚本

Wex*_*Wex 36 iphone xcode xcode4

我有一个脚本,我使用osascript从Xcode 4中的运行脚本构建阶段运行.此脚本执行一些检查以尝试捕获plists等中的任何人为错误.

但是,当开发人员选择"存档"而不是每次构建时运行它时,我只想运行此脚本.

有没有办法测试这种情况?在Shell脚本或Apple脚本中?

BJ *_*mer 52

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

如果要将此脚本作为构建的第一类部分包含在内,以致其失败会导致构建失败,那么您将需要执行其他操作.创建一个新的"外部构建系统"目标,并将其配置为运行脚本.脚本的路径可以是相对于项目根目录的相对路径.

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

显示如何配置方案的屏幕截图

  • 对于那些想要更简单的方法的人,你可以在脚本中检查`$ {CONFIGURATION}`变量,如:`config ="Release"if ["$ config"="$ {CONFIGURATION}"]; 然后回显"运行我的脚本"fi` (20认同)
  • 假设您从未在发布模式下运行任何其他操作.分析(至少对于性能)通常也在发布模式下完成,因此您也可以在此处运行此脚本. (4认同)
  • 有一点需要注意:当你设置一个新的"外部构建系统"目标时,一定要进入它的依赖项并将其设置为依赖于你的其他目标 - 否则它可以在另一个目标完成构建之前运行. (2认同)
  • 我的用例是更新构建版本号,Xcode在运行任何自定义脚本操作之前处理Info.plist文件.但是,首先处理依赖的构建目标.这也比Scheme脚本操作好得多,因为它们几乎没有任何有用的环境变量集. (2认同)

小智 9

  1. 在项目的"构建阶段"中添加"新运行脚本阶段"
  2. 将脚本移动(拖放)到正确的位置
  3. 选中"仅在安装时运行脚本"

如果你不这样做3.该脚本将运行所有的时间,但如果你检查框,它只会进行归档时运行.

  • 一直试图为 Firebase 符号上传解决这个问题,这对 XCode 9 非常有用 - 谢谢! (2认同)