59

iOSアプリプロジェクトに取り組んでおり、json-frameworkプロジェクトをワークスペースに追加しています。左側のプロジェクトナビゲーターには両方のプロジェクトが表示され、ビルドスキームセレクターには両方のプロジェクトのスキームも表示されます。次に、json-frameworkプロジェクトのlibjson.aターゲットを、他のプロジェクトのiOSアプリターゲットへの依存関係として追加します。期待される結果は、アプリターゲットがビルドされるたびに、(必要に応じて)ライブラリターゲットをビルドし、アプリターゲットをそれにリンクすることです。これを私が試みた方法は次のとおりです。

  • 同じスキームの一部として両方を構築します。これを試す方法は、アプリのスキームを編集し、スキームの「ビルド」部分に「libjson.a」を追加することです。ちなみに、「暗黙の依存関係の検索」がチェックされています。次に、アプリターゲットのターゲットエディターに移動し、[ビルドフェーズ]-> [バイナリとライブラリのリンク]で、ワークスペースライブラリのリストから[libjson.a]を選択します。その後、スキームをビルドしようとすると、ライブラリターゲットがビルドされますが、アプリターゲットのビルドが失敗し、リンカーエラー「-ljsonのライブラリが見つかりません」が表示されます。これは、ライブラリがビルドされたことを実際に検出していないことを示しています。実際、プロジェクトナビゲーターでは、ライブラリのアプリプロジェクトの下のエントリはまだ赤で、ファイルが存在しないことを示しています。

  • jsonターゲットを明示的な依存関係として追加します。これを試すために、ビルドスキームを変更しませんが、アプリターゲットのターゲットエディターに移動し、[ターゲットの依存関係]の下にある[追加]ボタンをクリックします。ワークスペース内の他のプロジェクトのターゲットは表示されないため、これは初心者ではありません。

  • JSONプロジェクトを他のプロジェクトにドラッグしてから、ターゲットを依存関係として追加します。これは、Xcode 3で行ったことです。プロジェクトナビゲーターで、ライブラリプロジェクトを取得し、アプリプロジェクト上にドラッグします。これにより、通常の「ファイルの追加」ペインが表示されます。これは、「完了」をクリックして閉じるだけです。プロジェクトナビゲータには、ライブラリプロジェクトのエントリが2つあります。1つはトップレベルにあり、もう1つはアプリプロジェクトの下にあります。これで、ターゲットエディターを使用して、アプリターゲットの依存関係としてライブラリターゲットを追加でき、ライブラリのリンクフェーズでエラーなしでリンクできます。しかし、壊れているように見えます。ナビゲーターに同じプロジェクトの複数のエントリがあります。これを行う別の方法はありますか?

同じワークスペース内の異なるプロジェクトでこれらのターゲットを接続する「Xcode4-ish」の方法と見なす必要があるのは何ですか?同じワークスペース内の複数のプロジェクトが実際に相互作用できない場合は、不足しているように見えます。ありがとう、グラハム。

4

7 に答える 7

24

バージョン3で説明したように、新しいワークスペースを作成し、2つのXcodeプロジェクトをそこにドラッグして、図のようにネストして、テストプロジェクトをセットアップしました。

兄弟プロジェクトが既にある場合は削除できます。

これをビルドすると、私が見る限り、うまくいきます。

スキーム設定 プロジェクトのレイアウト

2 つのプロジェクトがある場合、内部パスの混乱があると思います。「表示」->「ユーティリティ」->「ファイル インスペクター」で場所の設定をいじって、それがどのような影響を与えるかを確認したいと思います。

ここに画像の説明を入力 ここに画像の説明を入力

Xcode の [Preferences…] -> [Source Trees] でパスを設定し、その方法で参照することも試してみてください: iPhone アプリ全体での簡単なモジュラー コード共有: 静的ライブラリとプロジェクト間の参照

HTH。アンディ W.

于 2011-03-30T12:26:36.107 に答える
9

ここで説明したように、ワークスペース内のプロジェクト間の依存関係を取得して機能させることができました: http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/

残念ながら、Xcode に暗黙の依存関係を検出させたり、宣伝されているようにビルド内のすべてにインデックスを付けさせる方法を見つけることができません。両方の回避策を見つけましたが、Xcode 4 が成熟するにつれて、手動構成が少なくて済むことを願っています。

于 2011-04-04T19:31:31.813 に答える
1

これを行うための私の防弾ソリューション:

../MyLibProject/build/Debug-iphoneos または ../MyLibProject/build/Release-iphonesimulator などを含めるために、メイン プロジェクト (lib ではない) のビルド設定で「Per Debug-Release / Per Architecture」設定を作成します。 ..
構成に応じて (これらの種類の構成を作成するには、[デバッグ] または [リリース] の横にある [+] をクリックして、[すべての iOS シミュレーター SDK] または [任意の iOS SDK] を選択します。両方の [ヘッダー検索] に対してこれを行う必要があります。 Path" (ライブラリがいくつかのヘッダー ファイルをコピーする場合、これは可能性が高い) および "Library Search Paths" の場合。つまり、設定ごとに、おそらく 4 つの異なるパス (debug sim 、debug ios) になることを意味します。 , release sim, release ios). これにより、両方のプロジェクトの構成が確実に一致します。

ここで、ライブラリを自動コンパイルする、つまり依存関係を作成するには、上記の「ビルド フェーズ -> ライブラリを含むバイナリへのリンク -> + -> .a ファイルの選択」のアドバイスを使用できます。

それが、xcode 4.5 のすべての環境で正しくビルドおよびリンクするものを手に入れることができた唯一の方法です。

注:「その他のリンカーフラグ」に -lmyLib フラグを追加しましたが、それが本当に必要かどうかはわかりません

于 2013-01-22T18:56:05.057 に答える
1

私自身の解決策が正しくないと考えて、同じ質問をするつもりでした。しかし、ここでは言及されていませんが、機能しているようです。明らかに、XCode 4 は進行中の作業です。:)

静的ライブラリとライブラリを使用するアプリの 2 つのプロジェクトを含むワークスペースがあります。プロジェクトは兄弟です。各プロジェクトには独自のスキームがあり、各スキ​​ームは 1 つのターゲットのみをビルドするように設定されています。つまり、2 つのプロジェクトをワークスペースに追加しただけです。

スタティック ライブラリをアプリの依存関係として追加するには、libsomething.a 製品をライブラリ プロジェクト (Project Navigator) からアプリ ターゲットの [Link Binary with Libraries] リストにドラッグします。それでおしまい。アプリをビルドすると、ライブラリ プロジェクトが最初にビルドされてからリンクされます。興味深いことに、アプリのスキームを変更して別の構成 (たとえば、Debug ではなく Release) を使用すると、ライブラリは同じ構成を使用してビルドされます。

したがって、これは機能し、ここでは明らかに依存関係の自動チェックが行われています。しかし、それは間違っていると感じています。繰り返しますが、モーダル スキーム エディター/マネージャーと、プロジェクト ナビゲーターにワークスペース オブジェクトがないことも同様です...言うとは思いませんでしたが、Visual Studio UI (bleh) の方がはるかに明確です。

于 2011-04-21T07:25:13.923 に答える
0

完璧なソリューションではありませんが、フレームワークのような静的ライブラリを作成することにある程度成功しました。

于 2011-09-25T00:59:54.203 に答える
-1

Xcode ユーザー ガイドを参照してください: [Xcode の概念] -> [ビルド ディレクトリを共有するワークスペース内のプロジェクト] の下の Xcode ワークスペース。

1 つのワークスペース内のすべてのプロジェクトは、ビルド ディレクトリを共有します。依存関係は自動的に検出され、必要に応じてビルドされます。

「Xcode はビルド ディレクトリ内のファイルを調べて、暗黙的な依存関係を検出します。たとえば、ワークスペースに含まれる 1 つのプロジェクトが、同じワークスペース内の別のプロジェクトによってリンクされているライブラリをビルドする場合、Xcode は他のプロジェクトをビルドする前にライブラリを自動的にビルドします。ビルド構成がこの依存関係を明示的にしない場合でも.必要に応じて、明示的なビルド設定でそのような暗黙的な依存関係をオーバーライドできます.明示的な依存関係については、プロジェクト参照を作成する必要があります."

于 2011-03-30T10:02:13.757 に答える