4

私の Xcode プロジェクト「MyMainApp」には、「MyLib」という静的ライブラリ タイプの Xcode サブプロジェクトがあります。ここで、iOS アプリでサードパーティの iOS フレームワークを使用する必要があります。MyMainApp に対してではなく、MyLib に対してのみ追加/リンクしたいので、MyLib を再利用可能で自己完結型にして、他の iOS アプリでも使用できるようにします。MyMainApp のいくつかのビュー コントローラーは、MyLib の一部であるビュー コントローラーの 1 つを使用します。MyLib のこのビュー コントローラーは、サード パーティのフレームワーク内に存在するクラスの機能を使用します。今私が直面している問題は、サードパーティのフレームワークを MyLib だけに追加し、それらを MyMainApp に追加しないと、リンカ エラー "Lexical or Preprocessor issue. XXX.h file not found" が表示されることです。フレームワークを MyMainApp と MyLib の両方に追加するとすべてうまくいきますが、これは私が望むものではありません。フレームワークの検索パスとヘッダーの検索パスが正しいことを確認しました。このようなシナリオでは、Apple からの参照を見つけることができませんでした。サードパーティのフレームワークとライブラリを静的ライブラリ タイプの Xcode サブプロジェクトに追加/リンクするためのベスト プラクティスを知りたいです。また、リンカー エラーを克服し、静的ライブラリ プロジェクトのみにフレームワークを追加する解決策はありますか?

4

3 に答える 3

1

ライブラリはそれらに対してリンクする必要があり、ライブラリを使用するアプリケーションはそれらに対してリンクし、それらアプリケーション バンドルに含める必要があります。アプリケーションは、依存関係を満たす責任があります。

フレームワークには、リソース (問題を引き起こすヘッダー ファイルなど) を含めることができます。これは、フレームワークをライブラリと区別する主な要素の 1 つです。このため、ライブラリにフレームワークのバイナリ オブジェクト (コード) を含めることができたとしても、実際にはライブラリにフレームワークを含めることはできません。

ライブラリがフレームワークに変換されている場合、その中に他のフレームワークを含めることができ、ニーズを満たすことができます。

于 2014-06-18T23:41:31.123 に答える
1

私の Xcode プロジェクト「MyMainApp」には、「MyLib」という静的ライブラリ タイプの Xcode サブプロジェクトがあります。ここで、iOS アプリでサードパーティの iOS フレームワークを使用する必要があります。MyMainApp に対してではなく、MyLib に対してのみ追加/リンクしたいので、MyLib を再利用可能で自己完結型にして、他の iOS アプリでも使用できるようにします。

ライブラリは他のライブラリとリンクしません。リンクされていない*.aバイナリに個別にビルドされるだけです。後で (そのときだけ)、アプリケーションはこれらすべての*.aファイルと独自のバイナリをリンクします。

バージョンと互換性の問題を回避するために、ライブラリはモジュール化されたままにし、他のライブラリ コードやリソースを含めないでください。

今私が直面している問題は、サードパーティのフレームワークを MyLib だけに追加し、それらを MyMainApp に追加しないと、リンカ エラー "Lexical or Preprocessor issue. XXX.h file not found" が表示されることです。フレームワークを MyMainApp と MyLib の両方に追加するとすべてうまくいきますが、これは私が望むものではありません。

アプリケーションは、サードパーティのヘッダーの 1 つを間接的にインポートしようとしています。サード パーティのライブラリ コードを参照する必要はありませんが、コンパイルするヘッダー ファイルにアクセスする必要があります。つまり、サードパーティ ライブラリをアプリケーションに追加する必要はありませんが、ヘッダー ファイルを追加するか、ヘッダー検索パスを設定する必要があります。

サードパーティのフレームワークとライブラリを静的ライブラリ タイプの Xcode サブプロジェクトに追加/リンクするためのベスト プラクティスを知りたいです。また、リンカー エラーを克服し、静的ライブラリ プロジェクトのみにフレームワークを追加する解決策はありますか?

ライブラリ、そのリソース、および iOS 上の依存関係を処理する簡単な「ネイティブ」な方法はないため、CocoaPodsを参照する必要があります。

于 2014-06-23T05:52:17.900 に答える