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 zawiera te 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.
Ten 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 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 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 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 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.