2011-07-01 24 views
2

xCodeで正常に構築されているCFNetwork.frameworkに依存する静的ライブラリ(Aと呼ぶ)を構築しました。私はCFNetwork.frameworkを "ライブラリとリンクバイナリ"ビルド段階に含めました。この静的ライブラリには独自のプロジェクトがあります。静的ライブラリの依存関係がバイナリに含まれていない

何らかの理由で、この静的ライブラリを別のプロジェクトで使用しようとすると(Bとしましょう)、リンクフェーズでCFNetworkのシンボルが見つかりませんでした。

私はBのターゲットに依存するようにAを追加しました(Aは常にBが正常にコンパイルされるようになりました)。また、Bの "Link Binary With Libraries"ビルドフェーズも追加しました。

似たような問題があったことはありますか?

EDIT:Bの "Link Binary With Libraries"ビルドにCFNetwork.frameworkを追加すると、構築が正常に開始されます。

+0

私はまったく同じ問題を抱えていますが、MediaPlayer.frameworkを使用しています。あなたはこれに対する解決策を見つけましたか? – Mutix

+0

ええと... MediaPlayer.frameworkに依存するスタティックライブラリAをお持ちの場合は、MediaPlayer.frameworkを実行可能ファイル(上記の例ではB)にリンクする必要があります。 静的ライブラリは相互に「コピー」されません – Vicente

答えて

1

はい、CFNetwork.frameworkをプロジェクトBの依存関係として追加する必要があります。

これは、依存関係を設定する正しい方法です。静的ライブラリAのリリースノートには、CFNetwork.frameworkの依存関係を文書化する必要があります。

具体的にはGuidelines for Creating Frameworksをご覧ください。具体的には、「あなたのフレームワークに含めるもの」です。あなたはアンブレラフレームワーク(つまり、静的ライブラリにCFNetwork.frameworkのようなものを含む)を作成することをAppleに勧めていることがわかります。傘のフレームワークは非常にほとんどの開発者のための不必要であると推奨されていません をやって、Xcodeのを使用して作成することは可能ですが

はアンブレラフレームワーク

を作成しないでください。 Apple は、オペレーティングシステムの ライブラリ間の相互依存関係の一部を隠すために傘型フレームワークを使用します。ほとんどの場合、 は、標準のフレームワークバンドルにコードを含めることができます。 また、コードが十分にモジュール化されている場合は、 複数のフレームワークを作成することもできますが、その場合は モジュール間の依存関係は最小限または存在しないため、 の傘の作成を保証するものではありません。

多くの依存関係がある場合は、Cocoapodsなどの依存関係管理ツールを検討する価値があります。

関連する問題