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 sollen. Wir empfehlen, statische Frameworks zu verwenden, sofern Sie keine bestimmten dynamischen Bibliotheksverhalten benötigen.
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 enthält diese Bibliotheksliste AdMob, Analytics, Firebase ML und Performance Monitoring. Alle anderen Vertriebskanä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 der dynamischen und statischen Verknüpfung 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 Ressourcen-Bundles geht, werden die Begriffe Bibliothek und Framework synonym verwendet.
Statisches Verknüpfen
Statisch verknüpfte Bibliotheken werden beim Erstellen in die ausführbare Datei Ihrer Anwendung eingebunden. Daher sind die Objektdateien in der statischen Bibliothek beim Start der App vorhanden und müssen nicht beim Start der App vom dynamischen Linker aufgelöst werden. Daher werden Apps, die statische Verknüpfungen verwenden, schneller gestartet. Dies geht auf Kosten einer etwas größeren Binärdatei / ausführbaren Datei der App. Die größere ausführbare Datei wird jedoch durch das Fehlen gebündelter dynamischer Bibliotheken ausgeglichen.
Sie können die statische Verknüpfung von Firebase-Abhängigkeiten erzwingen, indem Sie die Verknüpfung explizit in Ihrem Podfile angeben:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :static
Dynamic Links
Dynamisch verknüpfte Bibliotheken werden in Ihrem App-Bundle separat von der ausführbaren Hauptdatei 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 Ihrer App und Erweiterungszielen zu teilen. Sie können dynamische Frameworks nicht zwischen separaten Anwendungen teilen, 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 kommt es in der Laufzeit Ihrer App zu doppelten Klassendefinitionen. Die dynamische Verknüpfung ist das Standardverhalten bei use_frameworks!. Sie können die dynamische Verknüpfung aber auch explizit in Ihrer Podfile-Datei angeben:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic
Beachten Sie, dass die dynamische Verknüpfung die Startzeit Ihrer Anwendung erhöhen kann, insbesondere wenn Ihre Anwendung viele Abhängigkeiten hat.