web-dev-qa-db-ja.com

埋め込みバイナリとリンクされたフレームワークの違いは何ですか

外部フレームワークを使用する場合、XcodeにはEmbedded BinariesLinked Frameworks セクション。

enter image description here

外部フレームワークをダウンロードし、Finder-> Xcodeにドラッグすると、フレームワークがLinked Frameworks and Librariesセクションに配置されます。

Carthageでライブラリを構築する場合、Embedded Binariesセクションにドラッグすることをお勧めします。

どちらの方法でもAPIが利用可能になるため、どちらもリンケージの観点から機能しているようです。さらに、フレームワークをEmbedded Binariesセクションに追加すると、 Linked Frameworks and Librariesセクションに自動的に追加されます。

だから、誰が正しいですか?カルタゴまたはインターネットの残りの部分? Xcodeプロジェクトに外部リソースを含めるための2つのオプションがあるのはなぜですか?

75
Maxim Veksler
  1. リンク-フレームワークで定義されたAPIを使用する場合、フレームワークをリンクする必要があります。

  2. 埋め込み-このプロセスにより、追加されたフレームワークがアプリバンドル内に埋め込まれ、アプリと拡張バンドル間でコードを共有できる可能性があります。サードパーティのフレームワークのみを埋め込みます。iOSで提供されているものは、デバイスで簡単に使用できるため、埋め込みません。埋め込む場合、つまり、Xcodeがビルドをコンパイルして作成できるように、それらにもリンクする必要があります。アプリがデバイスで実行されると、必要に応じて埋め込みフレームワークがメモリにロードされます。

55
Shripada

バイナリを埋め込むと、製品に含まれます。ライブラリまたはフレームワークを埋め込むことなくリンクするだけの場合、製品の一部にはなりません。

ただし、iOS8では、すべてのサードパーティフレームワークを「埋め込む」必要があります。さまざまなプログラム間で共有されるフレームワークでさえ、それらのプログラムのすべてに「組み込まれる」必要があります。共有場所のデバイスにインストールされた場合、共有場所から同じ「埋め込み」コードを使用する他のインストールプロセスは、その既存のインストールを再利用できます。これはiOS8に固有のものであり、iOS8以前およびiOSの世界以外ではこの回答は正確ではありませんでした。

14
Basti

Linkingコンパイル時またはロード/実行時に機能するLinkerの詳細。 LinkercopyLibraryをターゲットバイナリにコピーします。 Frameworkは独立しているため、この場合、LinkerDynamic Frameworkシステムローダーパス内またはバンドル内で検索およびリンクする

Embeddingは、バイナリをターゲットバイナリにコピーするプロセスです。その結果、内部に配置されます。

続きを読む こちら

0
yoAlex5