Statyczne lub dynamiczne łączenie zależności Firebase

Począwszy od CocoaPods 1.9.0 i Firebase 7, możesz wybrać, czy zależności Firebase mają być tworzone jako platformy statyczne czy dynamiczne. Zalecamy używanie platform statycznych, chyba że potrzebujesz określonych zachowań bibliotek dynamicznych.

Pamiętaj, że biblioteki utworzone poza GitHubem można połączyć tylko statycznie, nawet w przypadku CocoaPods w wersji 1.9.0 lub nowszej. Obecnie ta lista bibliotek obejmuje: AdMob, Analytics, Firebase ML i Performance Monitoring. Wszystkie inne kanały dystrybucji, w tym plik ZIP, Swift Package Manager i Carthage, udostępniają tylko biblioteki połączone statycznie.

W tym dokumencie zakładamy, że masz praktyczną wiedzę na temat dynamicznego i statycznego linkowania na platformach Apple. Jeśli nie znasz tych pojęć, zapoznaj się z tą dokumentacją:

Ponieważ ten dokument dotyczy typów połączeń bibliotek, a nie wczytywania niewykonywalnych pakietów zasobów, terminy biblioteka i platforma są używane zamiennie.

Łączenie statyczne

Biblioteki połączone statycznie są dołączane do pliku wykonywalnego aplikacji podczas kompilacji. W rezultacie pliki obiektów w bibliotece statycznej będą obecne w aplikacji po jej uruchomieniu i nie będą musiały być rozwiązywane przez dynamiczny linker w momencie uruchamiania aplikacji. W rezultacie aplikacje korzystające z łączenia statycznego będą uruchamiać się szybciej. Wiąże się to z nieco większym plikiem binarnym lub wykonywalnym aplikacji, ale należy pamiętać, że większy rozmiar pliku wykonywalnego zostanie zrekompensowany brakiem dołączonych bibliotek dynamicznych.

Możesz wymusić statyczne połączenie zależności Firebase, wyraźnie określając je w pliku Podfile:

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

Dynamiczne łączenie

Biblioteki połączone dynamicznie są przechowywane w pakiecie aplikacji oddzielnie od głównego pliku wykonywalnego aplikacji i muszą zostać załadowane w momencie uruchamiania aplikacji przez konsolidator dynamiczny. Wszystkie platformy Apple są połączone dynamicznie, aby umożliwić udostępnianie kodu między procesami. Podobnie możesz używać platform dynamicznych do udostępniania kodu między aplikacją a celami rozszerzenia. Nie można udostępniać dynamicznych platform między oddzielnymi aplikacjami, nawet jeśli obie są podpisane przez tego samego dewelopera.

Jeśli chcesz używać Firebase jako zależności celu dynamicznego frameworka, musisz też połączyć Firebase dynamicznie. W przeciwnym razie w czasie działania aplikacji wystąpią zduplikowane definicje klas. Dynamiczne łączenie jest domyślnym działaniem w use_frameworks!, ale nadal możesz wyraźnie określić dynamiczne łączenie w pliku Podfile:

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

Pamiętaj, że dynamiczne łączenie może wydłużyć czas uruchamiania aplikacji, zwłaszcza jeśli ma ona wiele zależności.