使用Fastlane Gym时如何正确添加Swift编译标志?
解决fastlane gym中添加Swift编译器
-Xfrontend参数的报错问题 我来帮你搞定这个问题~你遇到的报错是因为-Xfrontend是Swift编译器专属参数,不能直接作为xcargs的顶层选项传递给xcodebuild——xcodebuild本身并不识别这个选项,所以才会抛出invalid option '-Xfrontend'的错误。
正确的配置方式
你需要把-Xfrontend -warn-long-expression-type-checking=100包装到xcodebuild的OTHER_SWIFT_FLAGS参数中,让xcodebuild把这些参数传递给Swift编译器。修改后的gym配置如下:
gym(options.merge( :export_xcargs => "-allowProvisioningUpdates", :export_method => "development", :xcargs => "OTHER_SWIFT_FLAGS=\"-Xfrontend -warn-long-expression-type-checking=100\"" ))
进阶:保留项目原有Swift编译标志
如果你的Xcode项目本身已经设置了OTHER_SWIFT_FLAGS,建议加上$(inherited)来继承原有配置,避免覆盖项目里的自定义标志:
gym(options.merge( :export_xcargs => "-allowProvisioningUpdates", :export_method => "development", :xcargs => "OTHER_SWIFT_FLAGS=\"$(inherited) -Xfrontend -warn-long-expression-type-checking=100\"" ))
原理说明
xcargs是用来传递给xcodebuild的顶层参数,只有xcodebuild本身支持的选项才能直接放在这里;OTHER_SWIFT_FLAGS是xcodebuild专门用来传递额外参数给Swift编译器的入口,所有Swift相关的编译标志都需要通过这个参数传递;- 用双引号包裹参数是为了确保
-Xfrontend和-warn-long-expression-type-checking=100作为一组参数被正确传递,不会被xcodebuild拆分。
这样配置后,你不用修改任何Xcode项目文件,就能在构建机器上通过fastlane启用这个表达式类型检查的警告了。
内容的提问来源于stack exchange,提问作者Yuchen
相关产品推荐
相关产品推荐

