Xcode12.5传入带条件赋值的xcconfig触发XCBuild报错如何解决
问题本质
这是Xcode 12.5版本的已知原生缺陷,默认启用的XCBuild系统尚未实现对外部传入xcconfig文件中带条件集的变量赋值的支持,报错信息中的FIXME标记就是苹果官方未完成功能的预留提示。
触发场景
- 直接调用xcodebuild构建时,通过
-xcconfig参数指定的xcconfig文件包含带构建条件的赋值语句,例如SWIFT_OPTIMIZATION_LEVEL[config=Debug] = -Onone - 使用fastlane gym构建时,通过gym的
xcconfig参数传入上述带条件的配置文件:由于gym底层本质是调用xcodebuild并透传-xcconfig参数,会完全复现该问题
完整报错信息
FIXME: Implement XCBuild support for macros in overriding parameters with condition sets: SWIFT_OPTIMIZATION_LEVEL[config=Debug] = -Onone
触发报错后xcodebuild会直接终止构建流程,返回构建失败结果。
修复/规避方案
- 优先升级Xcode到13.0及以上版本:该缺陷在后续Xcode迭代中已被官方修复,新版本XCBuild已完整支持外部xcconfig的条件赋值语法
- 若必须保留Xcode 12.5版本,可将带条件的xcconfig配置直接关联到项目本身的构建设置中,不通过
-xcconfig参数从外部传入即可避免报错 - 若必须从外部传入xcconfig,可临时拆分配置文件:按不同构建配置拆分出独立的无条件语句的xcconfig,构建时根据当前选择的配置传入对应文件即可,例如拆分出
debug.xcconfig存放所有Debug配置、release.xcconfig存放所有Release配置,移除所有[config=xxx]的条件后缀
内容的提问来源于stack exchange,提问作者francybiga
相关产品推荐
相关产品推荐

