Firebase-Abhängigkeiten statisch oder dynamisch verknüpfen

Ab CocoaPods 1.9.0 und Firebase 7 können Sie auswä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 Verhaltensweisen für dynamische Bibliotheken.

Beachten Sie, dass Bibliotheken, die außerhalb von GitHub entwickelt wurden, auch mit CocoaPods 1.9.0 und höher nur statisch verknüpft werden können. Derzeit umfasst diese Bibliotheksliste AdMob, Analytics, Firebase ML und Performance Monitoring. Alle anderen Bereitstellungskanäle, einschließlich der ZIP-Datei, des Swift Package Managers und Carthage, bieten nur statisch verknüpfte Bibliotheken.

In diesem Dokument wird davon ausgegangen, dass Sie mit dynamischer und statischer Verknüpfung auf Apple-Plattformen vertraut sind. Wenn Sie mit diesen Konzepten nicht vertraut sind, lesen Sie die folgende Dokumentation:

Da sich dieses Dokument auf die Arten der Bibliotheksverknüpfung und nicht auf das Laden nicht ausführbarer Ressourcenpakete bezieht, werden die Begriffe Bibliothek und Framework synonym verwendet.

Statische Verknüpfung

Statisch verknüpfte Bibliotheken werden während der Buildzeit in die ausführbare Anwendung eingebunden. Daher sind die Objektdateien in der statischen Bibliothek beim Starten in Ihrer App vorhanden und müssen nicht beim Starten der App vom dynamischen Linker aufgelöst werden. Daher werden Apps mit statischer Verknüpfung schneller gestartet. Dies geht zu Lasten einer etwas größeren ausführbaren Binär-/App-Datei. Allerdings wird die größere Größe der ausführbaren Datei durch das Fehlen von gebündelten dynamischen Bibliotheken ausgeglichen.

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

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

Dynamische Verknüpfung

Dynamisch verknüpfte Bibliotheken werden im App-Bundle getrennt von der Hauptausführdatei Ihrer App gespeichert und müssen beim Starten der App vom dynamischen Linker geladen werden. Die Frameworks von Apple sind alle dynamisch verknüpft, um die Codefreigabe zwischen Prozessen zu ermöglichen. Ebenso können Sie dynamische Frameworks verwenden, um Code zwischen Ihren App- und Erweiterungszielen zu teilen. Sie können dynamische Frameworks nicht zwischen verschiedenen Anwendungen freigeben, auch wenn beide vom selben Entwickler signiert wurden.

Wenn Sie Firebase als Abhängigkeit eines dynamischen Framework-Ziels verwenden möchten, müssen Sie Firebase auch dynamisch verknüpfen. Andernfalls kommt es in der Laufzeit Ihrer App zu duplizierten Klassendefinitionen. Die dynamische Verknüpfung ist das Standardverhalten bei use_frameworks!. Sie können die dynamische Verknüpfung aber auch explizit in Ihrer Podfile 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 hat.