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

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

Zauważ, że biblioteki opracowane poza GitHub mogą być połączone statycznie tylko z CocoaPods 1.9.0 i nowszymi. Obecnie ta lista bibliotek obejmuje AdMob, Analytics, Firebase ML i Monitorowanie wydajności. Wszystkie inne kanały dystrybucji, w tym plik zip, Swift Package Manager i Carthage, udostępniają tylko biblioteki połączone statycznie.

Ten dokument zakłada praktyczną znajomość dynamicznego i statycznego łączenia na platformach Apple. Jeśli nie znasz tych pojęć, zapoznaj się z następującą dokumentacją:

Ponieważ dokument ten dotyczy rodzaju powiązania biblioteki i nie załadunku paczek zasobów niewykonywalnych biblioteka warunki i ramy są używane zamiennie.

Łączenie statyczne

Biblioteki połączone statycznie są dołączane do pliku wykonywalnego aplikacji w czasie kompilacji. W rezultacie pliki obiektowe w bibliotece statycznej będą obecne w Twojej aplikacji po jej uruchomieniu i nie muszą być rozwiązywane w czasie uruchamiania aplikacji przez dynamiczny linker. W związku z tym aplikacje korzystające z linków statycznych będą uruchamiane szybciej. Dzieje się to kosztem nieco większego pliku wykonywalnego pliku binarnego / aplikacji, chociaż należy zauważyć, że większy rozmiar pliku wykonywalnego zostanie zrekompensowany przez brak 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

Łączenie dynamiczne

Biblioteki połączone dynamicznie są przechowywane w pakiecie aplikacji oddzielnie od głównego pliku wykonywalnego aplikacji i muszą być ładowane w czasie uruchamiania aplikacji przez dynamiczny linker. Wszystkie frameworki Apple są połączone dynamicznie, aby umożliwić współdzielenie kodu między procesami; podobnie możesz użyć struktur dynamicznych do współdzielenia kodu między swoją aplikacją a celami rozszerzenia. Nie można udostępniać dynamicznych struktur między oddzielnymi aplikacjami, nawet jeśli obie są podpisane przez tego samego programistę.

Jeśli chcesz używać Firebase jako zależności dynamicznego celu platformy, musisz również połączyć Firebase dynamicznie; inaczej będzie prowadzony w dwóch egzemplarzach definicji klas w Twojej aplikacji w czasie wykonywania. Łączenie dynamiczne jest domyślne zachowanie z use_frameworks! , ale nadal możesz wyraźnie określić dynamiczne powiązanie w swoim pliku Podfile:

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

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