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

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

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 biblioteki AdMob, Analytics, Firebase ML i Performance Monitoring. Wszystkie inne kanały dystrybucji, w tym plik ZIP, menedżer pakietów Swift i Carthage, udostępniają tylko biblioteki połączone statycznie.

Niniejszy dokument zakłada, że znasz już łączenie dynamiczne i statyczne na platformach Apple. Jeśli nie znasz tych pojęć, zapoznaj się z tą dokumentacją:

Ponieważ ten dokument dotyczy typów powiązań bibliotek, a nie wczytywania niewykonalnych pakietów zasobów, terminy bibliotekramek są używane zamiennie.

Łączenie statyczne

Biblioteki połączone statycznie są umieszczane w plikach wykonywalnych aplikacji w momencie kompilacji. W związku z tym pliki obiektów w bibliotece statycznej będą obecne w aplikacji w momencie jej uruchamiania i nie będą wymagać rozwiązywania przez linker dynamiczny. W rezultacie aplikacje korzystające z linkowania statycznego będą uruchamiać się szybciej. Wymaga to nieco większego pliku binarnego lub wykonywalnego, ale należy pamiętać, że większy rozmiar pliku wykonywalnego jest rekompensowany przez brak wbudowanych bibliotek dynamicznych.

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

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

Łączenie dynamiczne

Biblioteki powiązane dynamicznie są przechowywane w pakiecie aplikacji osobno od głównego pliku wykonywalnego aplikacji i muszą być ładowane w momencie uruchamiania aplikacji przez dynamiczny linker. 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 miejscami docelowymi rozszerzenia. Nie możesz udostępniać dynamicznych frameworków między osobnymi aplikacjami, nawet jeśli są one podpisane przez tego samego dewelopera.

Jeśli chcesz używać Firebase jako zależności celu dynamicznego frameworku, musisz też połączyć Firebase dynamicznie. W przeciwnym razie w czasie wykonywania aplikacji pojawią się duplikaty definicji klas. Linkowanie dynamiczne jest domyślnym zachowaniem w przypadku use_frameworks!, ale nadal możesz wyraźnie określić linkowanie dynamiczne w pliku Pod:

# 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 dużo zależności.