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ą:
- Tematy programowania Mach-O
- Tematy dotyczące programowania dynamicznej biblioteki
- Korzystanie z Firebase w bibliotekach
Ponieważ ten dokument dotyczy typów powiązań bibliotek, a nie wczytywania niewykonalnych pakietów zasobów, terminy bibliotek i ramek 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 zostanie zrekompensowany brakiem w pakiecie 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 rozszerzeń. 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 klasy. 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.