xcodebuild ACTIVE_COMPILATION_CONDITIONS 不会覆盖目标的 ACTIVE_COMPILATION_CONDITIONS
xcodebuild ACTIVE_COMPILATION_CONDITIONS does not override target's ACTIVE_COMPILATION_CONDITIONS
我们正在尝试使用 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
欢迎任何想法,或者也许这是不可能的?
正确的构建设置键是“SWIFT_ACTIVE_COMPILATION_CONDITIONS”
您可以使用以下命令仔细检查并验证密钥是否存在:
xcodebuild -showBuildSettings <project/scheme/target/configuration flags>
来自 -showBuildSettings 的结果(被截断,因为 RELEASE_CONDITION2 在发布构建的 Xcode 项目设置中设置 [由于某种原因调试不会显示]):
.....
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
以上都是Xcode12.5
我们正在尝试使用 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
欢迎任何想法,或者也许这是不可能的?
正确的构建设置键是“SWIFT_ACTIVE_COMPILATION_CONDITIONS”
您可以使用以下命令仔细检查并验证密钥是否存在:
xcodebuild -showBuildSettings <project/scheme/target/configuration flags>
来自 -showBuildSettings 的结果(被截断,因为 RELEASE_CONDITION2 在发布构建的 Xcode 项目设置中设置 [由于某种原因调试不会显示]):
.....
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
以上都是Xcode12.5