Połącz zależności Firebase statycznie lub dynamicznie

Począwszy od CocoaPods 1.9.0 i Firebase 7, możesz wybrać, czy zależności Firebase mają być budowane jako struktury statyczne czy dynamiczne. Zalecamy używanie struktur statycznych, chyba że wymagane są pewne zachowania bibliotek dynamicznych.

Pamiętaj, że biblioteki opracowane poza GitHubem można łączyć statycznie tylko z CocoaPods 1.9.0 i nowszymi. Obecnie ta lista bibliotek obejmuje AdMob, Analytics, Firebase ML i Performance Monitoring. Wszystkie inne kanały dystrybucji, w tym plik ZIP, Menedżer pakietów Swift i Kartagina, udostępniają wyłącznie biblioteki połączone statycznie.

W tym dokumencie założono praktyczną wiedzę na temat dynamicznego i statycznego łączenia na platformach Apple. Jeśli nie znasz tych pojęć, zapoznaj się z poniższą dokumentacją:

Ponieważ ten dokument dotyczy typów łączenia bibliotek, a nie ładowania niewykonywalnych pakietów zasobów, terminy biblioteka i struktura są używane zamiennie.

Łączenie statyczne

Statycznie połączone biblioteki są dołączane do pliku wykonywalnego aplikacji w czasie kompilacji. W rezultacie pliki obiektowe w bibliotece statycznej będą obecne w aplikacji po jej uruchomieniu i nie będą musiały być rozpoznawane w czasie uruchamiania aplikacji przez dynamiczny linker. W rezultacie aplikacje korzystające z łączenia statycznego będą uruchamiane szybciej. Dzieje się to kosztem nieco większego pliku wykonywalnego binarnego/aplikacji, chociaż należy zauważyć, że większy rozmiar pliku wykonywalnego zostanie zrekompensowany brakiem dołączonych bibliotek dynamicznych.

Możesz wymusić statyczne łączenie zależności Firebase, jawnie określając połączenie w swoim Podfile:

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

Linkowanie dynamiczne

Biblioteki połączone dynamicznie są przechowywane w pakiecie aplikacji oddzielnie od głównego pliku wykonywalnego aplikacji i muszą zostać załadowane w momencie uruchomienia aplikacji przez linker dynamiczny. Wszystkie struktury Apple są ze sobą dynamicznie powiązane, aby umożliwić współdzielenie kodu pomiędzy procesami; podobnie możesz używać struktur dynamicznych do udostępniania kodu między aplikacjami i elementami docelowymi rozszerzeń. Nie można udostępniać frameworków dynamicznych pomiędzy oddzielnymi aplikacjami, nawet jeśli obie są podpisane przez tego samego programistę.

Jeśli chcesz używać Firebase jako zależności od docelowej struktury dynamicznej, musisz także dynamicznie połączyć Firebase; w przeciwnym razie w środowisku wykonawczym aplikacji natkniesz się na zduplikowane definicje klas . Dynamiczne łączenie jest domyślnym zachowaniem w use_frameworks! , ale nadal możesz jawnie określić dynamiczne połączenie w swoim Podfile:

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

Pamiętaj, że dynamiczne łączenie może wydłużyć czas uruchamiania aplikacji, szczególnie jeśli aplikacja ma wiele zależności.