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:
- Themen zur Mach-O-Programmierung
- Themen zur Programmierung dynamischer Bibliotheken
- Verwenden von Firebase in Bibliotheken
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.