-1

我们正在尝试使用 xcodebuild 来构建我们的框架,而不是使用手动 Xcode IDE 运行按钮。问题是在我们的框架中,我们使用了 ACTIVE_COMPILATION_CONDITIONS,它有几个值。然后使用这些值在运行时检查特定框架是否已集成,例如检查 Sentry:

#if SENTRY_AVAILABLE
    import Sentry
#endif

问题是,对于某些构建,我们需要覆盖我们的项目设置,特别是 ACTIVE_COMPILATION_CONDITIONS。但是,在以下脚本成功执行后,Xcode 仍然没有覆盖我们在项目中定义的 ACTIVE_COMPILATION_CONDITIONS。

剧本:

xcodebuild -workspace project.xcworkspace -scheme SDKNR1 ONLY_ACTIVE_ARCH=NO 
EXCLUDED_ARCHS=arm64 ACTIVE_COMPILATION_CONDITIONS=SENTRY_AVAILABLE -configuration 
release -derivedDataPath $PROJECT_DIR/../simulators/SDKNR1 -sdk iphonesimulator
ENABLE_BITCODE=YES BITCODE_GENERATION_MODE=bitcode OTHER_CFLAGS="-fembed-bitcode" clean build

如您所见,我们定义了 ACTIVE_COMPILATION_CONDITIONS=SENTRY_AVAILABLE,但它不会覆盖目标的 (SDKNR1) 项目设置。假设,SDKNR1 没有任何 ACTIVE_COMPILATION_CONDITIONS。我们预计 xcodebuild 命令将覆盖目标的 ACTIVE_COMPILATION_CONDITIONS并包含 SENTRY_AVAILABLE

欢迎任何想法,或者也许这是不可能的?

4

1 回答 1

1

正确的构建设置键是“SWIFT_ACTIVE_COMPILATION_CONDITIONS”

您可以通过使用命令并验证密钥是否存在来仔细检查:

xcodebuild -showBuildSettings <project/scheme/target/configuration flags>

-showBuildSettings 的结果(截断,在 Xcode 项目设置中为发布构建设置的 RELEASE_CONDITION2 [由于某种原因调试不会显示]):

.....
SUPPORTS_TEXT_BASED_API = NO
SWIFT_ACTIVE_COMPILATION_CONDITIONS = RELEASE_CONDITION2
SWIFT_COMPILATION_MODE = wholemodule
.....

在构建日志中,您应该看到(例如,设置 RELEASE_CONIDTION2,还请注意 ACTIVE_COMPLIATION_CONIDTIONS 被转换为 swiftc 的 -D 参数):

Build settings from command line:
    .....
    SDKROOT = iphoneos14.5
    SWIFT_ACTIVE_COMPILATION_CONDITIONS = RELEASE_CONDITION2
    .....

CompileSwiftSources normal arm64 com.apple.xcode.tools.swift.compiler .....
    .....
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc <most compiler options removed> -DRELEASE_CONDITION2

以上都是 Xcode 12.5

于 2021-07-30T04:03:25.383 回答