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, statische Frameworks zu verwenden, 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, des Swift Package Manager und von Carthage, bieten nur statisch verknüpfte Bibliotheken.

In diesem Dokument wird davon ausgegangen, dass Sie mit dem dynamischen und statischen Verknüpfen auf Apple-Plattformen vertraut sind. 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 von nicht ausführbaren Ressourcenbündeln geht, werden die Begriffe Bibliothek und Framework synonym verwendet.

Statische Verknüpfung

Statisch verknüpfte Bibliotheken werden zur Build-Zeit in die ausführbare Datei Ihrer Anwendung eingebunden. Die Objektdateien in der statischen Bibliothek sind daher beim Start in Ihrer App vorhanden und müssen nicht vom dynamischen Linker aufgelöst werden. Daher starten Apps, die statisches Linking verwenden, schneller. Dies geht auf Kosten einer etwas größeren Binärdatei / ausführbaren App. Es ist jedoch zu beachten, dass die größere ausführbare Datei durch das Fehlen gebündelter dynamischer Bibliotheken ausgeglichen wird.

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

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

Dynamische Verknüpfung

Dynamisch verknüpfte Bibliotheken werden in Ihrem App-Bundle separat von der Haupt-Executable Ihrer App gespeichert und müssen beim Start der App 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 Ihren App- und Erweiterungszielen freizugeben. Dynamische Frameworks können nicht zwischen separaten Anwendungen geteilt werden, 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 treten zur Laufzeit Ihrer App doppelte Klassendefinitionen auf. Die dynamische Verknüpfung ist das Standardverhalten bei use_frameworks!. Sie können sie aber auch explizit in Ihrem Podfile angeben:

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

Beachten Sie, dass dynamisches Verknüpfen die Startzeit Ihrer App verlängern kann, insbesondere wenn Ihre App viele Abhängigkeiten hat.