Od wersji CocoaPods 1.9.0 i Firebase 7 możesz wybrać, czy zależności Firebase mają być kompilowane jako statyczne czy dynamiczne frameworki. Zalecamy używanie statycznych frameworków, chyba że wymagane jest określone zachowanie biblioteki dynamicznej.
Pamiętaj, że biblioteki opracowane poza GitHubem można łą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 łączenia dynamicznego i statycznego na platformach Apple. Jeśli nie znasz tych pojęć, zapoznaj się z tymi materiałami:
Ponieważ ten dokument dotyczy typów łączenia bibliotek, a nie wczytywania niewykonywalnych pakietów zasobów, terminy biblioteka i framework są używane zamiennie.
Łączenie statyczne
Biblioteki połączone statycznie są dołączane do pliku wykonywalnego aplikacji podczas kompilacji. Dzięki temu pliki obiektów w bibliotece statycznej będą obecne w aplikacji podczas jej uruchamiania i nie będą musiały być rozwiązywane przez linker dynamiczny. W rezultacie aplikacje korzystające z łączenia statycznego będą uruchamiać się szybciej. Dzieje się to kosztem nieco większego pliku binarnego lub pliku wykonywalnego aplikacji, ale należy pamiętać, że większy rozmiar pliku wykonywalnego zostanie zrównoważony brakiem dołączonych bibliotek dynamicznych.
Możesz wymusić statyczne łączenie zależności Firebase, wyraźnie określając łączenie w pliku Podfile:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :static
Łączenie dynamiczne
Biblioteki połączone dynamicznie są przechowywane w pakiecie aplikacji oddzielnie od głównego pliku wykonywalnego aplikacji i muszą być wczytywane podczas uruchamiania aplikacji przez linker dynamiczny. Frameworki Apple są połączone dynamicznie, aby umożliwić udostępnianie kodu między procesami. Podobnie możesz używać dynamicznych frameworków do udostępniania kodu między aplikacją a rozszerzeniami. Nie możesz udostępniać dynamicznych frameworków między różnymi aplikacjami, nawet jeśli są one podpisane przez tego samego dewelopera.
Jeśli chcesz używać Firebase jako zależności dynamicznego frameworka, musisz też połączyć Firebase dynamicznie. W przeciwnym razie w czasie działania aplikacji wystąpią zduplikowane definicje klas. Łączenie dynamiczne jest domyślnym zachowaniem w przypadku use_frameworks!, ale nadal możesz wyraźnie określić łączenie dynamiczne w pliku Podfile:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic
Pamiętaj, że łączenie dynamiczne może wydłużyć czas uruchamiania aplikacji, zwłaszcza jeśli ma ona wiele zależności.