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'”

我可以从 Qt Creator 向 xcodebuild 传递参数吗?

用于使用最新 sdk 的 xcodebuild 参数。

抑制xcodebuild输出或减少冗长[重复]

xcodebuild 仅打印错误

Swift - 为 Jazzy 添加 xcodebuild 参数