2014-03-01 14 views
7

我正在嘗試爲現有的庫項目創建POD規範。從其Xcode配置(例如發佈,調試)將POD Spec屬性關聯到不同的生成設置

在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' 

不幸的是,一般的官方文檔主要是更加混亂和不明確的,不是真正的幫助:

Build settings

構建設置

在此組中列出了與應該用於構建庫的構建環境的配置相關的屬性。

如果未在子規範中定義,則此組的屬性將繼承父項的值。

例子:

spec.compiler_flags = '-DOS_OBJECT_USE_OBJC = 0', '-Wno格式'

直覺上,我會做這樣的事:

configuration :Debug do 
    spec.compiler_flags = '-DDEBUG=1' 
end 

configuration :Release do 
    spec.compiler_flags = '-DNDEBUG -DNS_BLOCK_ASSERTIONS' 
end 

然而,這是猜測。

+0

我在尋找這個確切問題的答案,你有任何更新? –

回答

4

更新

我太快速跳轉到該解決方案,實際上,這一個不工作

儘管xcconfig語法的Conditional Variable Assignment確實爲體系結構和平臺設置了一個有條件的值,但它對於配置的工作方式不同。 由於這種差異,此解決方案與CocoaPods的xcconfig繼承機制不相符。

OP的this SO question顯然,也是我,不能成功地使用條件變量分配在podspec中進行配置。


使用xcconfig語法Conditional Variable Assignment,就可以實現它:

s.pod_target_xcconfig = { 
    'GCC_PREPROCESSOR_DEFINITIONS[config=Debug]' => '-DDEBUG=1', 
    'GCC_PREPROCESSOR_DEFINITIONS[config=Release]' => '-DNDEBUG -DNS_BLOCK_ASSERTIONS' 
} 

然而,有一個小的副作用,如another SO question,其中產生的構建設置將在波德被定義多次提到以某種方式.xcconfig。

+0

謝謝你,這節省了我的一天 – kubbing