web-dev-qa-db-ja.com

XCodeのプロジェクト依存関係に埋め込みバイナリ(他のプロジェクト)を追加できません

XCode 6.0.1で作成したXCodeワークスペースがあります。 2つの(Swift)ライブラリと、これら2つのライブラリに依存する1つのiOSアプリ(Swift)が含まれています。 iPhoneとシミュレータの両方でiOSアプリを実行できる安定したセットアップがありました。2つのライブラリプロジェクトがアプリのEmbedded Binaries(画像を参照)として追加されました。

今、私はXCode 6.1を持っています。最近、XCodeの実行中に~/Library/Developer/Xcodeフォルダ内のDerivedDataフォルダを削除しました。その後、私のワークスペースは機能しませんでした-iOSアプリはコンパイルに失敗し、ライブラリプロジェクトが見つからないというリンカーエラーが発生しました。

アプリプロジェクトのEmbedded Binariesから2つのライブラリを削除して解決しようとしましたが、追加できません。プロジェクト設定のEmbedded Binariesの下にある+ボタンをクリックすると、ワークスペースプロジェクトが正しく表示されますが、ライブラリプロジェクトを選択して追加してもEmbedded Binariesのリストに追加されません。新しいワークスペースを作成して、リンカーエラーを解決しました。アプリはコンパイルされますが、ライブラリをリンクする方法は私には謎です:それらはリストされていませんEmbedded BinariesまたはLinked Frameworks and LibrariesFrameworks searchパス。ライブラリプロジェクトが同じワークスペースにあることを除いて、アプリと必要なライブラリの間にはリンクがないように見えます(コンパイルすると明らかになります)。

Embedded Binariesにライブラリプロジェクトを追加できないのはなぜですか? XCode 6.1では、依存関係プロジェクトがコンパイルされ、どこにもリストまたはリンクされずにアプリに埋め込まれるのは正常ですか?

enter image description here

17
Rasto

これは質問への私の回答の要約ですXcodeは、「DerivedData」を削除した後、「Embedded binary」を追加しません オリジナルを参照してください詳細なコンテキストと情報についての質問と回答

  1. ワークスペースからすべてのフレームワークプロジェクトを削除する
  2. 「クリーンビルド」を実行するか、「DerivedData」を削除します
  3. プロジェクトをワークスペースに戻す
  4. プロジェクトをビルドします(おそらくオプション)
  5. アプリターゲットの[全般]タブで、[リンクされたフレームワークとライブラリ]の下にある+をクリックし、フレームワークを選択します。
  6. ビルドしてシミュレーターで実行します(ビルドや実行に問題はありません)。
  7. デバイス用にビルドして実行します(これにより、フレームワークが正しくリンクされていないためにクラッシュが発生する可能性があります。このクラッシュは無視してください)
  8. 「Embedded Binaries」の下の+をクリックして、フレームワークを選択します。これにより、プロジェクトに追加されます(「リンクされたフレームワークとライブラリ」で重複している可能性があります)
  9. 必要なすべてのフレームワークについて繰り返します
  10. ビルドと実行(デバイス上)が確認されたら、プロジェクトナビゲーターまたはターゲットの[全般]タブで、重複する(または赤の)フレームワークを削除できます。
14
rjstelling

はい、あなたと同じ問題に遭遇しました。派生データを削除した後、バイナリを再度リンクできませんでした。その理由は、派生データがバイナリがプロジェクトに書き込まれ、プロジェクトに対してリンクされる場所だからです。

私が解決したことは、ビルドターゲットとしてフレームワークを選択することでした。ビルド後、Frameworkターゲットは赤から黒に変わりました。スクリーンショットでは赤くなっています。つまり、バイナリにコンパイルされておらず、ディスクに書き込まれていません。

これを実行すると、フレームワークへの参照がディスク上にあったため、フレームワークをプロジェクトに再リンクすることができました。お役に立てれば!

5
Hobbes the Tige

これが私が問題を解決した方法です:

  1. フレームワークを構築します。

  2. ビルドフォルダーを開き、ビルドされたフレームワークをアプリプロジェクトにドラッグします(DerivedDataへのパスを使用するため)。

  3. 組み込みフレームワークのリストにフレームワークを追加します。

  4. Finderで、アプリのxcodeprojファイルに対して[コンテンツの表示]を実行し、お気に入りのテキストエディターでproject.pbxprojを開きます。

  5. 長いDerivedDataパスを持つ行を見つけます。名前がなく、パスがフレームワーク名で、ソースツリーがBUILT_PRODUCTS_DIRになるように変更します。

Xcodeは変更に気付くはずであり、アプリプロジェクトのライブラリは赤ではなく黒になり、正しくビルドおよび実行されます。

1
Mark Lilback

最初にプロジェクトをクリーンアップし、フレームワークを構築します。その後、それを埋め込むことができます。

1
NumeroUno

非常によく似た問題があり、昨夜修正しました。上記のrjstellingのソリューションは私のケースを助けなかったので、このスレッドに戻って私の回避策を提供することにしました。

2つのフレームワークと1つのアプリケーションを含むワークスペースがあります。アプリは、フレームワークの1つにあるクラスタイプの「cube」と呼ばれるインスタンス変数にプロパティアクセスを追加すると、アクセスが許可されるという不思議なコンパイルエラーに遭遇するまで、しばらくの間両方のフレームワークを楽しく利用していました。 「_cube」への変換は不可能です(宣言されていないことが報告されましたが、実際には以前にセッターメソッドで機能していました)。

一言で言えば、クリーンな後、ワークスペース/アプリプロジェクトは私のiOS 8+プロジェクトの組み込みフレームワークを見失いました。組み込みフレームワークの削除は、その失敗の最後のわらでした。そのため、私のプロジェクトでは、組み込み用のフレームワークを選択できなくなりました。

プロジェクトとワークスペースを以前のバージョンに戻しても、ブードゥー教は取り除かれませんでした。

最終的に、メインアプリプロジェクトに(ファイルとして)埋め込むフレームワークプロジェクトを追加し、フレームワークへのターゲット依存関係を導入しました。

その後、フレームワークとリンクを再度埋め込むことができました。

_cubeに関しては、プロパティのゲッターを指定し、@ synthesizeプロパティを別の名前に指定する必要がありました。これについての説明はありません。