17

Podfile で指定されたさまざまな依存関係 (AFNetworking など) を持つ静的ライブラリを構築しようとしています。依存関係を最終的な静的ライブラリ (libMyProject.a を呼び出します) に含めたくありません。それらに対してリンクしてから、同じ依存関係を配置できる MyProject.Podspec ファイルを作成したいだけです。

問題は、libMyProject.a をビルドすると libPods.a がリンクされて含まれるため、libMyProject.a を配布し、他の人がそれを同じ依存関係のいくつかを使用するプロジェクトに統合すると、シンボルの問題が重複することです。

libPods.a lib に対してリンクするが、libMyProject.a には含めないでください。他の既存のフレームワークとリンクするのと同じように機能するはずです。

ありがとう!

4

3 に答える 3

12

ビルドフェーズの「バイナリをライブラリにリンクする」セクションからlibPods.a libを削除することで解決しました。

于 2013-06-17T08:21:34.783 に答える
6

「Link Binary with Libraries」ビルドフェーズから libPods.a を手動で削除することは実際に機能しますが、本当の答えは、そもそもそこに追加させないことです。

これが追加される理由は、pod install コマンドがリンク先のターゲットの 1 つとしてスタティック ライブラリ ターゲットを検出するためです。これは、リストの最初のターゲットである (ターゲットを明示的に指定していない場合、cocoapods の実装により最初のターゲットが選択される) か、「link_with」セクションで明示的に指定したためです。

私が見つけた答えは、Podfile の link_with セクションを使用してターゲットを明示的に記述し、静的ライブラリ target を省略することです。

pods プロジェクトは引き続き作成され、期待どおりに依存関係がそこに取り込まれますが、libPods.a は静的ライブラリのビルド フェーズに追加されません。

唯一の問題は、静的ライブラリでない場合、link_with セクションに何を入れるかです。リンクしたい他のターゲット (例えば、iPhone アプリのターゲット) がある場合、それは良い選択です。しかし、実際のターゲットが静的ライブラリだけである場合は、少し回避策が必要です。

これまでの私の成功した戦略は、静的ライブラリ ターゲット (そうです、メインの静的ライブラリとは別のもの) を作成し、それを「ダミー」と呼ぶことでした。Podfile の link_with セクションでこのターゲットを指定します。

それは確かに少し不快ですが、うまくいきます。

platform :ios, '5.1.1'

link_with ['Dummy']

pod 'AFNetworking', '= 1.3.1'
于 2014-02-06T16:47:54.087 に答える