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 außerhalb von GitHub entwickelte Bibliotheken 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 Vertriebskanäle, einschließlich der ZIP-Datei, Swift Package Manager und Carthage, stellen nur statisch verknüpfte Bibliotheken bereit.

Dieses Dokument setzt praktische Kenntnisse über dynamische und statische Verknüpfungen auf Apple-Plattformen voraus. Wenn Sie mit diesen Konzepten nicht vertraut sind, werfen Sie einen Blick auf 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 synonym verwendet.

Statische Verlinkung

Statisch verknüpfte Bibliotheken werden zur Erstellungszeit in die ausführbare Datei Ihrer Anwendung gebündelt. Dadurch sind die Objektdateien in der statischen Bibliothek beim Start 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 auf Kosten einer etwas größeren ausführbaren Binär-/App-Datei, wobei zu beachten ist, dass die größere ausführbare Datei durch das Fehlen gebündelter dynamischer Bibliotheken ausgeglichen wird.

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

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

Dynamische Verlinkung

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. 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 Ihrer App und Erweiterungszielen auszutauschen. Sie können dynamische Frameworks nicht zwischen separaten Anwendungen teilen, selbst 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 stoßen Sie in der Laufzeit Ihrer App auf doppelte Klassendefinitionen . Dynamische Verknüpfung ist das Standardverhalten bei use_frameworks! , aber Sie können die dynamische Verknüpfung weiterhin 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.