Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Firebaseの依存関係を静的または動的にリンクする

CocoaPods1.9.0およびFirebase7以降では、Firebaseの依存関係を静的フレームワークとして構築するか動的フレームワークとして構築するかを選択できます。特定のダイナミックライブラリの動作が必要な場合を除いて、静的フレームワークを使用することをお勧めします。

GitHubの外部で開発されたライブラリは、CocoaPods1.9.0以降でも静的にのみリンクできることに注意してください。現在、このライブラリリストには、AdMob、Analytics、Firebase ML、パフォーマンスモニタリングが含まれています。 zipファイル、Swift Package Manager、Carthageを含む他のすべての配布チャネルは、静的にリンクされたライブラリのみを提供します。

このドキュメントは、Appleプラットフォームでの動的および静的リンクに関する実用的な知識があることを前提としています。これらの概念に慣れていない場合は、次のドキュメントを参照してください。

この文書は、ライブラリリンケージとしない非実行リソースバンドルのローディングのタイプに関係しているので、用語のライブラリフレームワークは、互換的に使用されます。

静的リンク

静的にリンクされたライブラリは、ビルド時にアプリケーションの実行可能ファイルにバンドルされます。その結果、静的ライブラリ内のオブジェクトファイルは、アプリの起動時にアプリに存在し、動的リンカーによってアプリの起動時に解決される必要はありません。その結果、静的リンクを使用するアプリはより速く起動します。これは、バイナリ/アプリの実行可能ファイルが少し大きくなるという犠牲を伴いますが、実行可能ファイルのサイズが大きくなると、バンドルされたダイナミックライブラリがないために相殺されることに注意してください。

Podfileでリンクを明示的に指定することで、Firebaseの依存関係の静的リンクを強制できます。

# cocoapods >= 1.9.0
use_frameworks! :linkage => :static

ダイナミックリンク

動的にリンクされたライブラリは、アプリのメイン実行可能ファイルとは別にアプリバンドルに保存され、動的リンカーによってアプリの起動時に読み込まれる必要があります。 Appleのフレームワークはすべて動的にリンクされており、プロセス間のコード共有が可能です。同様に、動的フレームワークを使用して、アプリと拡張機能のターゲット間でコードを共有できます。両方が同じ開発者によって署名されている場合でも、別々のアプリケーション間で動的フレームワークを共有することはできません。

動的フレームワークターゲットの依存関係としてFirebaseを使用する場合は、Firebaseを動的にリンクする必要もあります。そうしないとに実行されます重複したクラス定義、アプリケーションの実行時に。動的リンクを持つデフォルトの動作ですuse_frameworks! 、ただし、Podfileで動的リンケージを明示的に指定することはできます。

# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic

特にアプリに多くの依存関係がある場合、動的リンクによってアプリの起動時間が長くなる可能性があることに注意してください。