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

Od wersji CocoaPods 1.9.0 i Firebase 7 możesz wybrać, czy zależności Firebase mają być kompilowane jako statyczne czy dynamiczne struktury. Zalecamy używanie statycznych frameworków, chyba że potrzebujesz określonych zachowań 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 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.

Zakładamy, że użytkownik ma podstawową wiedzę na temat dynamicznego i statycznego łączenia na platformach Apple. Jeśli nie znasz tych pojęć, zapoznaj się z tą dokumentacją:

Ten dokument dotyczy typów połączeń bibliotek, a nie wczytywania niewykonywalnych pakietów zasobów, dlatego terminy bibliotekaframework są używane zamiennie.

Łączenie statyczne

Biblioteki połączone statycznie są dołączane do pliku wykonywalnego aplikacji w momencie kompilacji. W rezultacie pliki obiektowe w bibliotece statycznej będą obecne w aplikacji podczas jej uruchamiania i nie będą musiały być rozwiązywane przez dynamiczny linker w momencie uruchomienia aplikacji. Dzięki temu aplikacje korzystające z linkowania statycznego będą uruchamiać się szybciej. Odbija się to na nieco większym pliku 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 łączenie zależności Firebase, wyraźnie określając połączenie 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ą być wczytywane podczas uruchamiania aplikacji przez dynamiczny linker. 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 rozszerzeniem. Nie możesz udostępniać dynamicznych struktur między oddzielnymi aplikacjami, nawet jeśli obie są podpisane przez tego samego dewelopera.

Jeśli chcesz używać Firebase jako zależności dynamicznego elementu docelowego struktury, musisz też połączyć Firebase dynamicznie. W przeciwnym razie w czasie działania aplikacji wystąpią zduplikowane definicje klas. Linkowanie dynamiczne jest domyślnym zachowaniem w przypadku use_frameworks!, ale możesz też wyraźnie określić linkowanie dynamiczne 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.