0

我正在调用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参数......)

4

1 回答 1

0

经过几次尝试理解问题后,我找到了一些解决方法:

  1. 更新到 Xcode 13

    该问题已在 Xcode 13 中修复,发行说明明确将此问题列为已解决:

当您使用 -xcconfig 命令行标志和 XCODE_XCCONFIG_FILE 环境变量将 xcconfig 文件传递​​给 xcodebuild 时,Xcode 使用新构建系统语义解析它们,该语义也支持条件参数。(25001734)

  1. 不要显式传递 xcconfig 文件,而是依赖 Xcode 使用它来解析构建配置

    我发现在我的情况下,实际上不需要将 xcconfig 文件显式指定为 xcode 构建,但如果在 Xcode 中将 xcconfig 文件指定为给定目标/构建配置的构建配置源,则设置会正确解析。

  2. 将设置拆分为每个构建配置的单独文件,并在 Xcode 中为该特定构建配置指定每个文件

    可以告诉 Xcode 为给定的构建配置使用特定的 xcconfig 文件(例如,一个用于调试,一个用于发布),从而无需使用条件分配。此外,通过使用该#include指令,我们可以为调试和发布配置文件中包含的所有常见设置创建一个“共享”xcconfig 文件,以避免重复共享设置值。

关于 xcconfig 文件的更多信息可以在The Unofficial Guide to xcconfig files中找到。

于 2021-10-25T14:02:28.537 回答