Edited at

【Xcode】Embedded Binaries と Linked Frameworks and Libraries の違いについて

More than 1 year has passed since last update.


これは?

スクリーンショット 2018-06-24 15.38.51.png

↑Generalタブの下の方にあるこいつらの違いについての備忘録

FirebaseSDKをCarthageで入れようとしたら詰まったので...


その前に

まずは StaticLibraryDynamicLibraryFramework の違いについておさらい


StaticLibrary(xxxx.a)


  • コンパイル時に静的に組み込まれるライブラリ

  • コンパイル時にリンクされるため、その分アプリケーションのサイズは大きくなる


DynamicLibrary(xxxx.dylib)


  • ランタイム時に実行されるライブラリ

  • 呼び出されて初めてコードが読み込まれるためアプリケーションのサイズは小さくて済む


Framework(xxxx.framework)


  • Bundleの一種(と考えた方がわかりやすい)

  • Libraryは画像やXibを含むことができないが Framework は可能


  • StaticFrameworkStaticLibrary を、 DynamicFrameworkDynamicLibrary を内包する


本題

それでは、Embedded BinariesLinked Frameworks and Libraries の違いについて見ていきます


Embedded Binaries


  • アプリケーションのBundleに組み込まれるバイナリ

  • 主にサードパーティ製の Framework をここに突っ込む


Linked Frameworks and Libraries


  • ビルド時にアプリケーションにリンクされる Framework および Library

  • アプリケーション内で Framework および Library のAPIを参照する場合はこっちに設定していく

例えば、サードパーティ製の Framework を導入する時の流れとしては

1. Embedded Binariesに突っ込む

2. Linked Frameworks and Librariesに設定する

となりますね。

(* Embedded Binaries に突っ込むだけでXcodeが Linked Frameworks and Libraries にも追加してくれますが)


詰まりどころ

FrameworkStaticFramework の場合、Embedded Binaries に突っ込む必要はなく、Linked Frameworks and Libraries の設定のみでOKです

なぜなら、


コンパイル時に静的に組み込まれるライブラリ


とあるように、Embedする必要がないからですね

(自分はFirebaseSDKが StaticFramework であることを失念しており結構時間を持ってかれました)