将POD规范属性与Xcode配置中的不同构建设置(例如Release、Debug)关联起来。

8

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

Xcode项目中,构建设置为不同的构建配置(例如:“Debug”和“Release”)定义了不同的预处理器宏。

例如:

对于“Debug”配置:

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

然而,这只是猜测。

我正在寻找这个确切问题的答案,你有任何更新吗? - Muhammad Arafat
1个回答

6

更新

我过于急于采用这个解决方案,事实上,这个方案不起作用

虽然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问题中提到的那样,会有一个小的副作用,即生成的构建设置将以某种方式在Pod.xcconfig中被多次定义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接