欢迎参加我们将于 2022 年 10 月 18 日举办的 Firebase 峰会(线上线下同时进行),了解 Firebase 如何帮助您加快应用开发速度、满怀信心地发布应用并在之后需要时轻松地扩大应用规模。立即报名

Verknüpfen Sie Firebase-Abhängigkeiten statisch oder dynamisch

Ab CocoaPods 1.9.0 und Firebase 7 können Sie wählen, ob Ihre Firebase-Abhängigkeiten als statische oder dynamische Frameworks erstellt werden. Wir empfehlen die Verwendung statischer Frameworks, es sei denn, Sie benötigen bestimmte dynamische Bibliotheksverhalten.

Beachten Sie, dass Bibliotheken, die außerhalb von GitHub entwickelt wurden, auch mit CocoaPods 1.9.0 und höher nur statisch gelinkt werden können. Derzeit enthält diese Bibliotheksliste AdMob, Analytics, Firebase ML und Leistungsüberwachung. Alle anderen Vertriebskanäle, einschließlich der ZIP-Datei, Swift Package Manager und Carthage, bieten nur statisch verknüpfte Bibliotheken.

Dieses Dokument setzt praktische Kenntnisse über dynamisches und statisches Linken auf Apple-Plattformen voraus. Wenn Sie mit diesen Konzepten nicht vertraut sind, sehen Sie sich die folgende Dokumentation an:

Da sich dieses Dokument mit den Arten der Bibliotheksverknüpfung befasst und nicht mit dem Laden von nicht ausführbaren Ressourcenbündeln, werden die Begriffe Bibliothek und Framework austauschbar verwendet.

Statische Verknüpfung

Statisch verknüpfte Bibliotheken werden zur Build-Zeit in Ihre ausführbare Anwendung gebündelt. Daher sind die Objektdateien in der statischen Bibliothek beim Start in Ihrer App vorhanden und müssen beim App-Start nicht vom dynamischen Linker aufgelöst werden. Folglich werden Apps, die statische Verknüpfungen verwenden, schneller gestartet. Dies geht zu Lasten einer etwas größeren ausführbaren Binär-/App-Datei, obwohl beachtet werden sollte, dass die größere ausführbare Größe durch das Fehlen gebündelter dynamischer Bibliotheken ausgeglichen wird.

Sie können die statische Verknüpfung von Firebase-Abhängigkeiten erzwingen, indem Sie die Verknüpfung explizit in Ihrer Pod-Datei angeben:

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

Dynamische Verknüpfung

Dynamisch verknüpfte Bibliotheken werden in Ihrem App-Bundle getrennt von der ausführbaren Hauptdatei Ihrer App gespeichert und müssen beim App-Start vom dynamischen Linker geladen werden. Apples Frameworks sind alle dynamisch verknüpft, um Code-Sharing zwischen Prozessen zu ermöglichen; Ebenso können Sie dynamische Frameworks verwenden, um Code zwischen Ihren App- und Erweiterungszielen freizugeben. Sie können dynamische Frameworks nicht zwischen separaten Anwendungen freigeben, selbst wenn beide vom selben Entwickler signiert sind.

Wenn Sie Firebase als Abhängigkeit eines dynamischen Frameworkziels verwenden möchten, müssen Sie Firebase auch dynamisch verknüpfen. Andernfalls werden Sie in der Laufzeit Ihrer App auf doppelte Klassendefinitionen stoßen. Dynamisches Linken ist das Standardverhalten bei use_frameworks! , aber Sie können die dynamische Verknüpfung immer noch explizit in Ihrer Poddatei angeben:

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

Beachten Sie, dass die dynamische Verknüpfung die Startzeit Ihrer App verlängern kann, insbesondere wenn Ihre App viele Abhängigkeiten aufweist.