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 dynamischer Bibliotheken.

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

In diesem Dokument werden Kenntnisse der dynamischen und statischen Verknüpfung auf Apple-Plattformen vorausgesetzt. Wenn Sie mit diesen Konzepten nicht vertraut sind, lesen Sie die folgende Dokumentation:

Da es in diesem Dokument um die Arten der Bibliotheksverknüpfung und nicht um das Laden nicht ausführbarer Ressourcenpakete geht, werden die Begriffe Bibliothek und Framework austauschbar verwendet.

Statische Verknüpfung

Statisch verknüpfte Bibliotheken werden zur Build-Zeit in die ausführbare Datei Ihrer Anwendung eingebunden. Daher sind die Objektdateien in der statischen Bibliothek beim Start Ihrer App vorhanden und müssen vom dynamischen Linker nicht zur Startzeit der App aufgelöst werden. Folglich werden Apps, die statische Verknüpfung verwenden, schneller gestartet. Dies führt zu einer etwas größeren ausführbaren Binärdatei bzw. App, wobei die größere 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 Podfile angeben:

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

Dynamische Verknüpfung

Dynamisch verknüpfte Bibliotheken werden separat von der ausführbaren Hauptdatei Ihrer App im App-Bundle gespeichert und müssen vom dynamischen Linker zur Startzeit der App geladen werden. Die Frameworks von Apple sind alle dynamisch verknüpft, um die gemeinsame Nutzung von Code zwischen Prozessen zu ermöglichen. Ebenso können Sie dynamische Frameworks verwenden, um Code zwischen den Zielen Ihrer App und Erweiterung freizugeben. Sie können dynamische Frameworks nicht zwischen separaten Anwendungen freigeben, auch wenn beide vom selben Entwickler signiert sind.

Wenn Sie Firebase als Abhängigkeit eines dynamischen Framework-Ziels verwenden möchten, müssen Sie Firebase auch dynamisch verknüpfen. Andernfalls treten in der Laufzeit Ihrer App doppelte Klassendefinitionen auf. Die dynamische Verknüpfung ist das Standardverhalten bei use_frameworks!, aber Sie können die dynamische Verknüpfung weiterhin explizit in Ihrer Podfile angeben:

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

Die dynamische Verknüpfung kann die Startzeit Ihrer App verlängern, insbesondere wenn Ihre App viele Abhängigkeiten hat.