我们尝试使用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
会欢迎任何想法,还是不可能呢?
发布于 2021-07-30 04:03:25
正确的构建设置键是"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被转换为ACTIVE_COMPLIATION_CONIDTIONS的-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
https://stackoverflow.com/questions/68422989
复制相似问题