web-dev-qa-db-ja.com

フレームワークとライブラリをXCodeプロジェクトにリンクする必要があるのはいつですか?

背景:Swiftをプロジェクトに実装する方法についての知識を理解し、拡張するために、テストCoreDataプロジェクトを開始しました。そしてもちろん、コードをテストして遊んでいるときはいつでも、私はいつも脇道になり、接線のトピックに行き詰まっているようです。これは、フレームワークまたはライブラリをXCodeプロジェクトに直接リンクする必要がある場合です。

それで、これがどのように起こったのか...私はNSManagedObjectファイルにimport CoreDataを(書き込む)必要があるSwiftのサブクラスを作成しています。そして、すべてが完璧に機能しているようです。エラーや警告などはありません。ただし、「プロジェクトとターゲットのリスト」でプロジェクトにリンクされているフレームワークとライブラリを確認すると、何もリストされていません。 import UIKitしなければならないときも同じことが言えます。明らかに、これらのフレームワークを直接リンクするオプションがありますが、そうする必要はないようです。

私の質問に関しては、XCodeプロジェクトに明示的にリンクする必要のないデフォルトのフレームワークはありますか、それともプロジェクトを展開用にパッケージ化するときにこれらのフレームワークを最終的にリンクする必要がありますか?そうでない場合、より広い観点から、フレームワークとライブラリをXCodeプロジェクトに明示的にリンクする必要があるのはいつですか?

編集***

すべてのAppleフレームワークがすでに自動的にリンクされている場合....プロジェクトに追加できるようにすることのポイントは何ですか。(気をつけてください、CoreData.frameworkは元々リンクされていませんでした写真のようにはっきりと。)

Project Settings

18
Yonny

魔法は起こりません。

これは、Xcode(LLVM)によって導入されたモジュールと自動リンクが原因です。
(関連キーワード:@ importではなく#importおよびビルド設定オプションモジュールを有効にする、フレームワークを自動的にリンクします、デフォルトでは、両方ともYESに設定されています)。 enter image description here

これらの2つのキーワード(モジュール、自動リンクフラグオプション)の組み合わせは、モジュールをサポートする関連するすべてのフレームワークを自動的に検索して追加しようとします。

Xcode 5(実際にはLLVMおよびclangコンパイラフロントエンド)から導入されたように、内部的には、上記のデフォルトプロジェクト設定のLLVMは、モジュールシステムを使用して、@ import /#を介してコード内のフレームワークを自動的にリンクします。インポートステートメント。

フレームワークが自動的にリンクされると、開発者はそれらをリンクされたフレームワークとライブラリに配置する必要がなくなります。

したがって、Appleシステムフレームワーク(デフォルトフレームワーク)をXcodeプロジェクトに明示的にリンクする必要がないのはそのためです。

モジュールはXcodeで使用可能であったため、すべてのシステムフレームワークリストを.pchファイル(プリコンパイル済みプレフィックスヘッダー)にインポートし続ける必要はありません。そのため、pchセットアップもNOに設定され、デフォルトではバックグラウンドで必要ありません。

私の知る限り、これまでの制限はAppleシステムフレームワークでのみ利用可能であり、ユーザーフレームワークやその他のC/C++ライブラリには適用できないことを意味します。

それが役に立てば幸い。

23
boraseoksoon