xcodebuild:在使用条件集错误覆盖参数时实现对宏的 XCBuild 支持
Posted
技术标签:
【中文标题】xcodebuild:在使用条件集错误覆盖参数时实现对宏的 XCBuild 支持【英文标题】:xcodebuild: Implement XCBuild support for macros in overriding parameters with condition sets error 【发布时间】:2021-10-25 14:02:28 【问题描述】:我正在调用 xcodebuild
(Xcode 12.5),使用 -xcconfig
参数指定一个 xcconfig 文件。
如果 xcconfig 文件包含基于构建配置的条件变量分配(例如 SWIFT_OPTIMIZATION_LEVEL[config=Debug] = -Onone
),我会收到以下错误:
FIXME: Implement XCBuild support for macros in overriding parameters with condition sets:
SWIFT_OPTIMIZATION_LEVEL[config=Debug] = -Onone
而xcodebuild
执行的任何操作都会失败。
请注意,使用fastlane gym
构建并使用gym 的xcconfig
参数传递xcconfig 文件时也会发生这种情况(这是有道理的,因为gym
只是在后台调用xcodebuild
并使用相同的xcconfig
参数...)
【问题讨论】:
【参考方案1】:在多次尝试理解问题后,我找到了一些解决方法:
更新到 Xcode 13
该问题已在 Xcode 13 中修复,Release Notes 明确将此问题列为已解决:
当您使用 -xcconfig 将 xcconfig 文件传递给 xcodebuild 时 命令行标志和 XCODE_XCCONFIG_FILE 环境变量,Xcode 使用 New Build System 语义解析它们,它还支持 条件参数。 (25001734)
不要显式传递 xcconfig 文件,而是依赖 Xcode 使用它来解析构建配置
我发现在我的情况下,实际上并不需要将 xcconfig 文件显式指定给 xcode 构建,但如果在 Xcode 中将 xcconfig 文件指定为给定目标/构建配置的构建配置源,则设置会正确解析.
将设置拆分为每个构建配置的单独文件,并在 Xcode 中为该特定构建配置指定每个文件
可以告诉 Xcode 为给定的构建配置使用特定的 xcconfig 文件(例如,一个用于调试,一个用于发布),从而无需使用条件分配。此外,通过使用#include
指令,我们可以为调试和发布配置文件中包含的所有常见设置创建一个“共享”xcconfig 文件,以避免重复共享设置值。
更多关于 xcconfig 文件的信息可以在The Unofficial Guide to xcconfig files找到。
【讨论】:
以上是关于xcodebuild:在使用条件集错误覆盖参数时实现对宏的 XCBuild 支持的主要内容,如果未能解决你的问题,请参考以下文章
xcodebuild 错误“clang:错误:未知参数:'-fYEScolor-diagnostics'”