さまざまなサーバーを処理するクラスライブラリであるiOSプロジェクトを開発しました。ライブラリが使用されるアプリケーションごとに必要なサーバーは1つだけです。サーバータイプは、コンパイル時にプリプロセッサ定義を介して構成できます。
ライブラリのpodspecで、次のようにサーバーごとにさまざまなサブスペックを定義しました。
s.name = "ServerLib"
[...]
s.subspec 'ServerA' do |a|
a.source_files = 'Classes/A/**/*.{h,m}'
a.xcconfig = { "GCC_PREPROCESSOR_DEFINITIONS" => "$(inherited) ServerA=1" }
end
s.subspec 'ServerB' do |b|
b.source_files = 'Classes/B/**/*.{h,m}'
b.xcconfig = { "GCC_PREPROCESSOR_DEFINITIONS" => "$(inherited) ServerB=1" }
end
私のアプリケーションは、顧客ごとに1つのターゲットを持つマルチ顧客アプリです。各顧客は、ライブラリプロジェクトの特定のサーバーを使用します。したがって、私のPodfileは次のようになります。
platform :ios, '5.0'
pod 'MyCore'
pod '3rdPartyLib'
target :'Customer1', :exclusive => true do
pod 'ServerLib/ServerA'
end
target :'Customer2', :exclusive => true do
pod 'ServerLib/ServerB'
end
スクリプトが行うことpod install
は、サブスペックで定義されたすべてのフラグをすべてのpod-customerN.xcconfigファイルの1つの値にマージすることです。
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) 3RD_PARTY_FLAGS $(inherited) ServerA=1 $(inherited) ServerB=1
Cocoapodsのこの間違った(?)動作を回避する方法の提案はありますか?ドキュメントを理解している限り、サブスペックプロパティは、同じレベルのサブスペックではなく、親スペックからのみ継承する必要があります。