7

Apple のフレームワーク プログラミング ガイド >>フレームワークのインストール /Library/Frameworks にインストールするのアドバイスに従って、カスタム フレームワークを持っています。これを行うには、次のスクリプトを使用して Run Script ビルド フェーズを追加します。

cp -R  build/Debug/MyFramework.framework /Library/Frameworks

私のプロジェクトでは、 /Library/Frameworks/MyFramework に対してリンクし、次のようにクラスにインポートします。

#import <MyFramework/MyFramework.h>

これは非常にうまく機能しますが、デバッガ コンソールに常に次のメッセージが表示されます。

プログラムをデバッガーにロードしています... sharedlibrary apply-load-rules すべての警告: "/Users/elisevanlooij/Library/Frameworks/MyFramework.framework/Versions/A/MyFramework" のシンボルを読み取ることができません (ファイルが見つかりません)。警告: 「MyFramework」からシンボルを読み取ることができません (まだメモリにマップされていません)。プログラムがロードされました。

どうやら、コンパイラは最初に /Users/elisevanlooij/Library/Frameworks を検索し、MyFramework を見つけることができず、次に /Library/Frameworks を検索し、MyFramework を見つけて、楽しい方法で続行します。これまでのところ、これは実際の問題というよりも煩わしいものでしたが、単体テストを実行すると、gdb は (ファイルが見つからない) で停止し、続行を拒否します。Run Script フェーズに行を追加することで問題を解決しました

cp -R  build/Debug/MyFramework.framework ~/Library/Frameworks

でも、そもそも壊してはいけないものをセロテープで貼っているような感じです。どうすればこれを修正できますか?

4

4 に答える 4

12

過去数か月で、フレームワークについてさらに多くのことを学んだので、この回答を書き直しています。開発ワークフローの一部としてフレームワークをインストールすることについて話していることに注意してください。

パブリック フレームワーク (つまり、複数のアプリまたはバンドルで使用されるフレームワーク) をインストールするのに適した場所は、/Library/Frameworks[リンク テキスト] です。これは、「この場所にあるフレームワークは、コンパイル時にコンパイラによって自動的に検出されるためです。実行時のダイナミック リンカ」[フレームワーク プログラミング ガイド]。これを行う最も洗練された方法は、ビルド設定の展開セクションにあります。

フレームワークで作業していると、ビルド時にフレームワークを更新したい場合と、そうでない場合があります。そのため、リリース構成でのみ展開設定を変更します。そう:

  1. フレームワーク ターゲットをダブルクリックして [ターゲット情報] ウィンドウを表示し、[ビルド] タブに切り替えます。
  2. [構成] 選択ボックスで [リリース] を選択します。
  3. [展開] セクションまで下にスクロールし、次の値を入力します。

配置場所 = YES (チェックボックスをクリック)

インストール ビルド製品の場所 = /

インストール ディレクトリ = /Library/Frameworks

インストール ビルド製品の場所は、インストールのルートとして機能します。デフォルト値は /tmp ディレクトリです。システム ルートに変更しないと、/tmp に隠れているため、インストールしたフレームワークが表示されません。

これで、他のプロジェクトを混乱させることなく、デバッグ構成で好きなようにフレームワークに取り組むことができます。公開する準備ができたら、リリースに切り替えてビルドを実行するだけです。

Xcode 4 の警告 Xcode 4 に切り替えてから、カスタム フレームワークで多くの問題を経験しました。ほとんどの場合、組み込みの単体テストを実行する場合を除いて、フレームワークの有用性を実際には妨げない GDB の警告をリンクしています。1 週間前にテクニカル サポート チケットを Apple に送信しましたが、まだ調査中です。実用的な解決策が得られたら、質問が非常に人気があることが証明されているため、この回答を更新します (1 kViews およびカウント)。

于 2009-11-06T21:48:27.643 に答える
3

これを行う従来の方法は、フレームワーク プロジェクトとそのクライアントが共通のビルド ディレクトリを共有するようにすることです。Xcode は、フレームワーク ヘッダーを検索し、ビルド フォルダー内のフレームワーク バイナリに対してリンクします。そのため、ヘッダーに対してコンパイルおよびリンクするアプリ プロジェクトは、インストールされているものではなく、最近ビルドされたものを取得します。

その後、cp -r を削除し、代わりに Install Location ビルド設定を使用して、コマンド ラインで xcodebuild install DSTROOT=/ を使用してビルド製品を最終的な場所に配置できます。ただし、フレームワークを再構築するたびに行う必要はありません。

于 2009-11-05T07:31:29.797 に答える
3
于 2009-11-04T23:19:03.907 に答える
0

当然、フレームワークを配布するときは、/ Library/Frameworksにインストールする必要があります。ただし、フレームワークのテスト/デバッグバージョンでこれを行っているのは奇妙に思えます。

私の最初の本能は、テストとデバッグ環境のセットアップをはるかに簡単にするだけなので、〜/Libraryの下にテストバージョンをインストールすることです。可能であれば、デバッグ/テストフレームワークは、テストしているバージョンのビルドツリーに配置されると思います。その場合、テスト目的でプライベートフレームワークとしてインストールされます。これにより、フレームワークの複数のバージョンを処理するときに、作業がはるかに簡単になります。

最終的に、アプリケーションまたはテストスイートが正しいバージョンをロードする限り、フレームワークがどこにあるかは問題ではありません。テスト/デバッグ/開発が最も簡単な場所を選択してください。

于 2009-11-04T20:18:46.103 に答える