Cou*_*per 7 xcode build-settings cocoapods
我正在尝试为现有的库项目创建POD规范.
在Xcode项目中,构建设置为不同的构建配置定义了不同的预处理器宏(例如:"Debug"和"Release")
例如:
对于"调试"配置:
GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1
Run Code Online (Sandbox Code Playgroud)
对于"发布"配置:
GCC_PREPROCESSOR_DEFINITIONS = NDEBUG NS_BLOCK_ASSERTIONS
Run Code Online (Sandbox Code Playgroud)
如何将这些设置映射到相应的POD规范?
例如:
spec.compiler_flags = '-DDEBUG=1'
Run Code Online (Sandbox Code Playgroud)
和
spec.compiler_flags = '-DNDEBUG -DNS_BLOCK_ASSERTIONS'
Run Code Online (Sandbox Code Playgroud)
不幸的是,官方文档通常更令人困惑和不清楚,而不是真正有用:
构建设置
在该组中列出了与应该用于构建库的构建环境的配置相关的属性.
如果未在子规范中定义,则该组的属性将继承父级的值.
例子:
spec.compiler_flags =' - DOS_OBJECT_USE_OBJC = 0',' - Wno-format'
直观地说,我会做这样的事情:
configuration :Debug do
spec.compiler_flags = '-DDEBUG=1'
end
configuration :Release do
spec.compiler_flags = '-DNDEBUG -DNS_BLOCK_ASSERTIONS'
end
Run Code Online (Sandbox Code Playgroud)
但是,这是在猜测.
更新
我太快跳到这个解决方案了,实际上,这个解决方案不起作用。
虽然xcconfig 语法的条件变量分配确实为体系结构和平台有条件地设置了一个值,但它对于配置的工作方式有所不同。由于这种差异,该解决方案与 CocoaPods 的 xcconfig 继承机制不兼容。
这个SO问题的OP显然,我也无法成功使用条件变量分配在podspec中进行配置。
使用xcconfig语法的条件变量赋值,可以实现:
s.pod_target_xcconfig = {
'GCC_PREPROCESSOR_DEFINITIONS[config=Debug]' => '-DDEBUG=1',
'GCC_PREPROCESSOR_DEFINITIONS[config=Release]' => '-DNDEBUG -DNS_BLOCK_ASSERTIONS'
}
Run Code Online (Sandbox Code Playgroud)
然而,正如另一个 SO 问题中提到的,有一个小的副作用,其中生成的构建设置将以某种方式在 Pod.xcconfig 中定义多次。