2

コアに組み込まれていないフレームワーク、つまりサードパーティのフレームワークを使用する Mac OS X アプリケーションを構築する場合、フレームワークを見ると赤く表示されるという問題がよくあるようです。 XCode 4.5 で。

赤で表示される最も一般的な場所が 2 つあります。1 つはプロジェクト ナビゲーター ペイン (左側) で、もう 1 つはビルド フェーズ領域です。そして、3 番目の場所である [ファイルのコピー] 領域は、多くの場合、赤で表示されます。3つとも原因が異なります。

3 つの場所すべてが赤で表示されると、次のようになります。

ここに画像の説明を入力

観察者のための手がかり: 赤い部分の後にグレー表示されているテキストは、XCode が XCode.app バンドル内で問題のフレームワークを誤って探している可能性があることを示唆しています。また、フレームワークはフレームワーク アイコンなしで表示されていることに注意してください。上の画像では、無効なフレームワークのプレースホルダー アイコンのみが表示されています。

フレームワークがまったく見つからない場合、ビルド時にフレームワークのヘッダー ファイルをインポートできないため、「レキシカルまたはプリプロセッサの問題」が発生します。解決策は、通常、フレームワークの検索パスを修正することです。ただし、それが正しいと思われる場合でも、私はまだ赤いフレームワークを取得することがよくあります。

時々、アイコンは赤ですが、フレームワークの検索パスはコンパイルが正常に機能するのに十分機能します (動作し、レキシカルまたはプリプロセッサの問題は発生し#import <Thingy/Thingy.h>ません)。フレームワークはコンパイル段階で正確に参照されますが、リンクまたはファイルのコピー段階では参照されないためです。

以下は、XCode がフレームワーク内のヘッダー ファイルをインポートできなかった場合のサンプルです。

ここに画像の説明を入力

この質問は一般的なものであり、将来、フレームワークのリストに「赤い」フレームワークが表示される場合に役立ちます。はい、ベンダーにフレームワークのサポートを依頼するためにベンダーに行きました。これがステップ 1 である必要があります。ただし、「XCodeはフレームワークを赤で示しています」は十分に混乱しているため、一般的に役立つ回答に値すると思います。したがって、この質問です。また、この場合、ベンダーのインストーラーは問題なく動作し、これは私のマシンのローカルの問題であり、他の人が将来発生する可能性があり、理解と修正を支援したいと考える理由があります。

髪を引き裂いた後、赤で表示されるフレームワークをコピーすることで、この問題を非常に悪い方法で解決できることがわかりました/Applications/Xcode.app/Contents/Developer/Library/Frameworksが、それはおそらく正しい方法ではありません。それをするのは間違っているようです。/Developer/VendorName にあるフレームワークを xcode アプリ バンドルのライブラリ/フレームワークにコピーすると、コンパイラがフレームワークを見つけられないことを回避できます。

現在、サードパーティのフレームワークは/Developer、フレームワークを作成した会社の名前が付けられたフォルダーの下に自動的にインストールされます。XCode は、すべてのフォルダーを自動的に検索し/Developer、それらのフレームワークを何らかの方法で見つけることになっていますか?
現在、私はそれができないと推測しているので、XCodeはおそらく、このサードパーティのフレームワークを見つけるためのパスを毎回正確に伝える必要があります.

「Xcode がフレームワークを見つける方法」に関する Apple のドキュメントを見つけることができませんでした。まさにそれを尋ねる質問がここにありますが、答えはすべて、Xcodeがフレームワークを見つけてその検索パスを構築する方法ではなく、GCCヘッダー検索パスを扱っています。

XCode 4.5 はライブラリを見つけるためにどのフォルダを検索しますか? /DeveloperXCode 4.5自体がなくなったにもかかわらず、フォルダはまだ検索されてい/Developerますか?

Mac OS X クライアントを使用するためにサードパーティのフレームワークをインストールする場合、どこにインストールする必要がありますか? また、インストーラーが機能したかどうかはどのように確認しますか? XCode に表示され、システムにインストールされている使用可能なすべてのフレームワークを一覧表示できるコマンド ライン呼び出しはありますか?

脚注: 作業の 2 番目のスタイルは、[その他を追加] ボタンを使用して、既知の場所にないフレームワークを見つけることです。それを使用すると、ビルドするプロジェクトで行き詰まることがよくありますが、実行時に失敗します。プラス ボタンを使用してコピー フェーズにフレームワークを追加すると、XCode では壊れているように見えるため、[ファイルのコピー] 機能は対象を見つけてコピーしないためです。ただし、回避策があります。Add Other を使用する必要がないように最初にどのように動作するかを尋ねていますが、Add Other がサードパーティのフレームワークを使用する唯一の方法である場合、ファイルのコピー機能が動作しないという問題が発生します。これに対する解決策は、XCode プロジェクト自体のフレームワーク検索パスがシステムに対して正しく設定されていないことであり、この特定のケースを修正するために必要なことはそれだけだと思います。一言で言えば、私は' グローバルな「フレームワーク検索パス」とは何ですか? どこに設定されているのでしょうか? または、XCode プロジェクトの検索パスのみがあり、グローバル フレームワークの検索パスはありませんか? フレームワークの検索パスをクリーンアップし、[その他を追加] を使用して新しいフレームワークを追加し、慎重に右クリックして、プロジェクト ナビゲーター ペインからすべての赤い項目を削除し、マウスのドラッグ アンド ドロップのみを使用し、 + ボタンをクリックしてフレームワークをコピー ファイルに追加すると、プライベート検索パスの場所にあるフレームワークを取得してビルドおよびコピーできます。[ファイルのコピー] 領域で [+] ボタンを使用し、そのダイアログを介してフレームワークを追加しようとすると、最初の図に示すように、フレームワークが間違った場所に追加されるという奇妙な XCode バグによって動作がブロックされているように見えます。その上、

4

2 に答える 2

2

ええ、これは良い質問です。関連する問題について投稿するつもりでした: コンパイル済みの momd ファイルを含む静的ライブラリ プロジェクトのバンドルを作成する バンドルを使用してライブラリ プロジェクトをプロジェクトの下にネストすることによってのみ作業を開始できました。つまり、Xcode 内にネストされ、ファイルシステム レベルでは依然としてピアとして表示されます。これは、プロジェクトが他のプロジェクトの成果物を見つける方法に関係しています。

その間、あなたの特定の問題について、私は何年も行ってきたすべてのプロジェクトで OCHamcrest を使用してきましたが、実際にプロジェクト内にフレームワーク ファイルをインストールしない限り、確実に動作させることはできませんでした。理想的には、/Library/Developer/Frameworks のような場所の 1 つに OCHamcrest をインストールしたいと思いますが、それを機能させるのは非常に苦痛であり、正気ではありませんでした。

Xcode がフレームワークを検索する場所に関するドキュメントを読みましたが、それは /Developer/Library/Frameworks と /Library/Frameworks にあります。中をのぞいてみるとリンゴしかない。また、/Developer は、Xcode 4 までは別のディレクトリであったため、それほどばかげているようには見えなかったことを覚えておいてください。今、ベータ版を使用することにした場合、失敗することになります。ただし、Xcode 4.5 が更新されると、アプリケーションではフレームワークがコピーされると確信しています。

誰かがより良いアイデアを持っていることを願っています!

于 2013-01-22T16:27:53.800 に答える
1

Xcode プロジェクトでサードパーティのフレームワークを使用する場合、Mac の /Library/Frameworks にフレームワークをインストールし、脚注で説明した方法でそれらを追加するとうまくいきます。プロジェクトのビルドに失敗した場合、/Library/Frameworks の検索パスを Framework Search Paths ビルド設定に追加するだけで、通常はプロジェクトをビルドできます。

フレームワークをアプリ バンドルにコピーしていて、コピーが機能しない場合は、次の設定をランタイム検索パス ビルド設定に追加します。

`@loader_path/../Frameworks`

最初と最後に引用符が必要かどうかわかりません。SDL フレームワークがアプリ バンドルにコピーされていないことを発見した誰かから、SDL について書いたブログ投稿へのコメントを引用しています。

エンド ユーザーのマシンにサードパーティ フレームワークをインストールする場所に関する質問について、アプリでフレームワークを使用していて、ユーザーがフレームワークをインストールせずにアプリを実行できるようにする場合は、フレームワークをアプリ バンドルにコピーします。フレームワークをユーザーの Mac にインストールする必要がある場合、/Library/Frameworks はサードパーティ フレームワークの通常の場所です。

于 2013-01-22T20:44:08.097 に答える