7

我正在尝试为现有库项目创建 POD 规范。

在 Xcode 项目中,构建设置为不同的构建配置定义了不同的预处理器宏(例如:“调试”和“发布”)

例如:

对于“调试”配置:

GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1 

对于“发布”配置:

GCC_PREPROCESSOR_DEFINITIONS = NDEBUG NS_BLOCK_ASSERTIONS

如何将这些设置映射到相应的 POD 规范?

例如:

spec.compiler_flags = '-DDEBUG=1'

spec.compiler_flags = '-DNDEBUG -DNS_BLOCK_ASSERTIONS'

不幸的是,官方文档通常更令人困惑和不清楚,而不是真正有用:

构建设置

构建设置

在该组中列出了与构建环境的配置相关的属性,这些属性应该用于构建库。

如果未在子规范中定义,则该组的属性继承父项的值。

例子:

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

然而,这是猜测。

4

1 回答 1

4

更新

我太快跳到这个解决方案,实际上,这个不起作用

虽然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'
}

然而,正如另一个 SO question中提到的那样,有一个小的副作用,其中生成的构建设置将以某种方式在 Pod.xcconfig 中定义多次。

于 2015-12-10T11:21:09.900 回答