Xcode
iOS
framework

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

これは?

スクリーンショット 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 であることを失念しており結構時間を持ってかれました)