参照されるライブラリは、静的ライブラリ製品に(デフォルトでは)含まれていません。表示されているリンカーの競合は、静的ライブラリとクライアントアプリケーションの両方がデフォルト(暗黙的)Podターゲットを使用している可能性が高くなります。
すべてのCocoapodsで生成されたターゲットには、製品にコンパイルされた "Pods-target -dummy.m"ファイルが含まれています。デフォルトのPodsターゲットを使用する場合は、単に「Pods-dummy.m」と呼ばれます。ライブラリとクライアントの両方がデフォルトターゲットを使用する場合、ダミーファイルをコンパイルして生成された同じシンボルがリンクエラーを引き起こします。
私はCraig's answerのバリエーションを試しましたが、link_with
ステートメントは、ヘッダー検索パスを制御するコンパイラフラグを提供するCocoapodsで生成されたxcconfigの接続も担当しています。もちろん、手動でxcconfig(またはヘッダー検索パスのプロジェクト設定)を追加することもできますが、私はチームのために繰り返し可能なソリューションを探していました。
私のソリューションは、(例えば、ライブラリーの名前)クライアントプロジェクトで競合が発生することはほとんどありません名前で、ライブラリーのための明確な目標を作成することです:
target 'XYZLibrary' do
pod 'AFNetworking', '2.5.2'
...
end
あなたは含めることができますlink_with
ステートメントtarget
ブロック内のスタティックライブラリターゲットの名前(Xcodeプロジェクト内の名前)が異なる場合でもターゲットが1つしかない場合、通常は両方とも同じ名前を使用して、link_with
を不要にします。
ユニットテストターゲットをお持ちの場合は、2つの別個のターゲットを作成してください。 (私は現在def
両方のターゲットで使用される一般的なポッドのセット、抽象的目標は、現在のオプションはありませんが、1日になるかもしれないので)それは次のようになります。
def common_pods
pod 'AFNetworking', '2.5.2'
end
target 'XYZLibrary' do
common_pods
end
target 'XYZLibraryTests' do
common_pods
end
キーがないことですPodfileのルートにはpod
要素があるため、Cocoapodsはデフォルトターゲットを生成しません。そうすれば、各製品にユニークな「Pods-ターゲット -dummy.m」という名前が付けられます。これらのオブジェクトファイルがリンクされている場合、競合は発生しません。
以下に追加した回答が正しい場合は、それを「いいえ」とマークして、この質問が開いていると表示されなくなります。 – memmons