2010-12-11 10 views
1

この質問はthisに基づいています。フレームワークを組み込むことなくフレームワークを構築するにはどうすればよいですか?

TL;私は自分のコードをフレームワークに分解し、すべてのフレームワークで使用されるコード(主に定数と文字列)を保持するメタフレームワークを作成しました。

今、フレームワークを構築する必要がありますが、不要なコードが肥大化するため、メタフレームワークをそれぞれのフレームワークに含めることは望ましくありません。フレームワークでメタフレームワークを認識できるようにするには、どうすれば素早くテストできますか?それらがすべて最終的なアプリケーションに含まれることを忘れないでください。私が作成する各フレームワークにメタフレームワークのコピーを含める意味がありません。

答えて

2

ちょうどあなたのメタフレームワークへのごサブフレームワークのみリンクを行い、してサブフレームワークコピーファイルにメタフレームワークを追加していない・ビルド・フェーズ。
このようにすると、コードやリソースが重複しないようになります。両方に

  1. リンクプロジェクトの目標を、あなたのサブフレームワークとあなたのメタ:次の操作を行うアプリ(何でもバンドル)にあなたのサブフレームワークの1つを含むためその後

    フレームワーク

  2. "" ビルドフェーズがまだ存在しない場合は、 "コピー(フレームワーク)ファイル"を追加します。
  3. ビルドフェーズを言ったために、あなたのサブフレームワークとあなたのメタフレームワーク、両方を追加します。
  4. オプションで、プロジェクトが依存するすべてのプロジェクトを依存関係として追加することもできます。 (あなたのメタプロジェクトとなるあなたのサブプロジェクトとあなたのサブプロジェクトになるあなたのアプリケーションのために)
  5. ...
  6. 利益。

これは私が私のDLFoundationKit.framework上とDLAppKit.frameworkを使用するすべてのアプリケーションに依存している私のDLAppKit.frameworkに何をすべきか、基本的です。

alt text

+0

このようなことが私に役立ちました。私はサブフレームワークをメタフレームワークのリリース版にリンクしていましたが、フレームワークが見つからないと常に言います。それから、私はメタフレームワークプロジェクトをサブフレームワークプロジェクトにドラッグし、完全に構築しました。 – ruipacheco

+0

おめでとう!これは当時私自身のことでした;)フレームワークは非常に扱いにくいかもしれません。特に、パスの読み込みやインストールなどについては、 – Regexident

0

この回答のために、組み込みのXcodeターゲットを使用して、標準の汎用フレームワークを構築していると仮定します。その場合、フレームワークにはダイナミックライブラリが含まれています。これはおそらく.dylibファイルです。そのようなフレームワークにリンクするコードは、コンパイル時に含まれているライブラリのコードを組み込むことはなく、実行時にフレームワークを読み込んでシンボルを解決します。

これは、コードの膨張について心配する必要がないということです。リンク離れて!子フレームワークが親フレームワークで定義されたシンボルに依存している場合は、それらを親フレームワークにリンクする必要があります。場合によっては、Objective-Cメタプログラミングを恐ろしい方法でプレイして、フレームワークを直接取り込むことができますが、ほとんどの場合、定数や文字列を含む場合はそうでないかもしれません。

関連する問題