web-dev-qa-db-ja.com

Xcodeのライブラリリンクオプションとは何ですか?

Xcode 7以降、Xcodeにはいくつかのライブラリ/フレームワークリンクオプションがあります

プロジェクトタブのアプリケーションTargetに移動します

General -> Embedded Binaries
General -> Link Frameworks and Libraries
Build Phases -> Target Dependencies
Build Phases -> Link Binary with Libraries

ここに私が見つけたいくつかの方法があります

  • Alamofire を使用すると、Embedded Binariesオプションが表示されます

Alamofire.frameworkは、ターゲットの依存関係、リンクされたフレームワーク、埋め込みフレームワークとして、ファイルのコピービルドフェーズで自動的に追加されます。これは、シミュレータとデバイスでビルドする必要があるすべてです。

  • 最初のiOSフレームワークの作成 は、Library.xcodeprojをワークスペースに追加し、次にBuild Phases -> Link Binary with Librariesを追加することを示しています

  • Carthageチュートリアル:はじめに は、Library.frameworkGeneral -> Link Frameworks and Librariesにドラッグすることを示しています。 General -> Link Frameworks and LibrariesBuild Phases -> Link Binary with Librariesは同じようです

  • Carthage はiOSとOS Xを区別しているようです。

OS X用にビルドしている場合:アプリケーションターゲットの[全般]設定タブの[埋め込みバイナリ]セクションで、使用する各フレームワークをディスクのCarthage/Buildフォルダーからドラッグアンドドロップします。

IOS、tvOS、またはwatchOS用にビルドする場合:アプリケーションターゲットの[全般]設定タブの[リンクされたフレームワークとライブラリ]セクションで、使用する各フレームワークをCarthage/Buildフォルダーからドラッグアンドドロップしますディスク。

ライブラリまたはフレームワークへのリンク を読むと、これらのオプションはフレームワークをアプリケーション/フレームワークにリンクすることに関するものであることがわかります。

しかし、それらの違いは何ですか?単一のオプションはそれらすべてのcatch allですか?

14
onmyway133

カルタゴで構築された動的フレームワークの場合、私は通常この設定を使用します:

  • ライブラリを、使用したいターゲットにリンクします。これは、フレームワークをコードにインポートできるようにするために必要です。
  • 含まれているアプリターゲットにのみライブラリを埋め込みます。これにより、実際にフレームワークがアプリバンドルにコピーされます。埋め込まない場合、フレームワークが見つからないため、起動時にアプリがクラッシュします。

すべてのフレームワークとその依存関係を埋め込む責任があるのはアプリターゲットのみです。そうすることで、拡張機能とアプリの両方がフレームワークを使用する場合、アプリと一緒に1回だけ配布されます。

Xcodeインターフェースの場合:

  • フレームワークをGeneral-> Embedded Binariesにドラッグすると、「Link Binary With Libraries」と「Embed Frameworks」の両方のビルドフェーズにフレームワークが追加されます
  • フレームワークをGeneral-> Linked Frameworks and Librariesにドラッグすると、「Link Binary With Libraries」ビルドフェーズにのみフレームワークが追加されます。

[全般]のビューは、[ビルドフェーズ]タブから入力されているように見えるため、どちらでも使用できます。

それが理にかなっていると思います。

編集:ターゲットの依存関係は、現在のターゲットをビルドする前にビルドする必要があるターゲットです。そのため、アプリターゲットはここに拡張機能をリストし、アプリをビルドするたびに拡張機能がビルドされるようにします。

19
Kay