1. ホーム
  2. objective-c

[解決済み] xcode4におけるフレームワークとスタティックライブラリの違いと呼び出し方

2022-06-20 12:38:46

質問

私はxcodeとobjective-cのかなり新しい人です。私は非常に基本的な質問をしたいです。

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

最初の質問ですが、なぜフレームワークがあるのでしょうか?また、なぜライブラリがあるのでしょうか。私のライブラリはフレームワークにはならないのでしょうか?

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

プレフィックスがあるのでしょうが、見つけられませんでした。 また、"ProjName/Myclass.h"も動作していません。

できる限り具体的にお願いします。

ありがとうございます。

どのように解決するのですか?

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

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

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

要約すると、ライブラリを配布する最良の方法はフレームワークとしてであるというのが私の意見です。iOS 用の "static" フレームワークを作成するには、基本的に、通常のフレームワークを使用して、コンパイルした静的ライブラリでバイナリを置き換えることができます。これは、私があるライブラリを配布する方法です。 Resty を配布する方法であり、将来的に私のライブラリを配布する方法です。

そのプロジェクトで提供されている Rakefile を見てみるとよいでしょう (ご存じないかもしれませんが、Rake は Ruby の Make に相当します)。私のプロジェクトをコンパイルするための一握りのタスクがあります ( xcodebuild を使って)、iOS用の静的なフレームワークとしてパッケージングします。これは便利だと思うはずです。

別の方法として、あなたは これらのXcode 4テンプレート を使用することもできます。

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