33166


Swift3を使っています。

(1) swiftファイルにimportで定義するFramework  
(2) Project のGeneralタブにある「Linked Frameworks and Libraries」  
の違いを教えてください。

例えば、AVFoundationを(1)でimportすれば、(2)に指定しなくても使えたりします。  
この用途の場合は、こう指定という形で教えていただければ理解しやすいので、ご存知の方ご教示お願いします。


CC BY-SA 3.0
2017-02-24T04:15:19.270
32915
2017-03-07T10:26:59.470
2017-03-03T13:04:57.447
19110
8593
question
swift
importとLinked Frameworks and Librariesの違い


.swiftファイル内で`import`するのは、その.swiftファイル（クラス）の中でimportしたクラスのインスタンスにメッセージを送るためのインターフェースの参照のためです。  
なので、Frameworkか独自クラスかに関わりなく、XXX.swiftというXXXクラス内で別のクラスYYYのインスタンスをハンドリングするためには、YYYクラスの定義をインポートしなければなりません。

これに対して、Project Settingsの「Linked Frameworks and
Libraries」は、フレームワークやライブラリーをプロジェクトが参照するか？の設定なので、意味するところが異なります。

まず、  
(1) Appleが用意する多くのFrameworkを自分のプロジェクトで使う場合  
(2) 他の方が作ったライブラリーやフレームワークを自分のプロジェクトで使う場合  
の、２種類が考えられると思います

上の２種類は、そのフレームワークを自分のアプリケーションに内包してリリースするために、Project Settingsの「Build Phase」の  
「Linked Binary With
Libraries」に「このアプリはこのフレームワーク（やライブラリー）をリンクして下さい」と指定する必要があります。これは(1)であっても(2)であってもです。

「Copy
Frameworks」に「このフレームワークは自前で他の人の環境には無いはずだから、アプリケーションの中にコピーしてね」と指定する必要があります。これは、(2)に対してのみで充分です。  
なぜ(1)は「Copy Frameworks」に記述する必要が無いか？は、OSが既にそのフレームワークを持ってくれているからです。

この様に、Project Settingsの「Build Phase」に指定した内容のダイジェスト（的なもの）が、Generalの「Embedded
Binaries」と「Linked Frameworks And Libraries」です。  
なので、Generalで、参照するライブラリーやフレームワークを指定しても良いのですが、より細かな指定はBuild
Phaseの方で行え、その結果はGeneralにも反映されるので、Generalの方を編集するより、Build
Phaseの方を編集した方が良いと僕は思います。


CC BY-SA 3.0
2017-03-07T10:26:59.470
33166
2017-03-07T10:26:59.470
14745
32915
answer