web-dev-qa-db-ja.com

xcode4のフレームワークと静的ライブラリの違い、およびそれらを呼び出す方法

私はxcodeとobjective-cを初めて使用します。非常に基本的な質問をしたいです。

プロジェクト設定で「バイナリをライブラリにリンクする」ときに、ワークスペースの他のプロジェクトからインポートされたフレームワークとライブラリに違いがあることがわかりました。

最初の質問、なぜフレームワークがあるのですか?そして、なぜ図書館があるのですか?ライブラリをフレームワークにできませんか?

そして、。hファイルから、インポートした静的ライブラリからクラスを呼び出すにはどうすればよいですか?

プレフィックスが必要だと思いますが、見つかりませんでした。 「ProjName/Myclass.h」も機能していません。

できるだけ具体的にお願いします。

ありがとう

130
Leonardo

フレームワークが静的ライブラリよりも優れている最大の利点は、コンパイルされたライブラリバイナリと関連ヘッダーをパッケージ化するきちんとした方法として機能することです。それらはプロジェクトにドロップすることができ(FoundationやUIKitなどのSDKの組み込みフレームワークのように)、動作するはずです(ほとんどの場合)。

ほとんどのフレームワークには動的ライブラリが含まれています。 Mac Frameworkテンプレートを使用してXcodeで作成されたフレームワークは、動的ライブラリを作成します。 iPhoneは動的なフレームワークをサポートしていないため、iOSコードの再利用可能なライブラリが静的なライブラリとして配布されるのが一般的になっています。

静的ライブラリーは問題ありませんが、ユーザー側で少し余分な作業が必要です。プロジェクトをライブラリにリンクし、ヘッダーファイルをプロジェクトにコピーする必要がありますまたはビルド設定で適切なヘッダー検索パスを設定して、どこかでそれらを参照します。

したがって、要約すると、私の意見では、ライブラリを配布する最良の方法はフレームワークとしてであるということです。 iOS用の「静的」フレームワークを作成するには、通常のフレームワークを使用して、コンパイル済みの静的ライブラリでバイナリを置き換えることができます。これが、ライブラリの1つである Resty の配布方法であり、今後ライブラリを配布する予定です。

そのプロジェクトで提供されているRakefileを確認することをお勧めします(知らない場合のために、RakeはRubyのMakeと同等です)。プロジェクトをコンパイル(xcodebuildを使用)し、iOSの静的フレームワークとしてパッケージ化するためのタスクがいくつかあります。これは役に立つはずです。

または、iOSフレームワークの作成に これらのXcode 4テンプレート を使用することもできます。

2013年12月9日更新:これは一般的な答えなので、ライブラリ配布の最初の選択肢が変わったと言って編集したいと思いました。消費者または生産者としてのサードパーティライブラリの最初の選択肢はCocoaPodsです。 CocoaPodsを使用してライブラリを配布し、フォールバックオプションとしてヘッダー付きのプリコンパイル済み静的ライブラリを提供します。

140
Luke Redpath

基本的に、フレームワークはライブラリであり、フレームワークを操作するための便利なメカニズムを提供します。フレームワークの「内部」を見ると、それは静的ライブラリとヘッダーファイルを含むディレクトリにすぎません(一部のフォルダー構造にはメタデータがあります)。

独自のフレームワークを作成する場合は、「静的ライブラリ」を作成して特定の方法でパックする必要があります。 この質問 を参照してください

一般に、プラットフォーム上のframworksは、「既存のフレームワークに」独自のコードを追加する再利用可能な動作に使用されます。特定の機能が必要な場合は、ライブラリ(例:three20)を使用し、配布可能なアプリにパックします

19
Martin Ullrich