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

Od wersji CocoaPods 1.9.0 i Firebase 7 możesz wybrać, czy zależności Firebase mają być kompilowane jako statyczne czy dynamiczne struktury. Zalecamy używanie statycznych platform, chyba że potrzebujesz określonych dynamicznych zachowań biblioteki.

Pamiętaj, że biblioteki opracowane poza GitHubem można łączyć tylko statycznie, nawet w przypadku CocoaPods w wersji 1.9.0 lub nowszej. Obecnie lista bibliotek obejmuje AdMob, Analytics, Firebase ML i Performance Monitoring. Wszystkie inne kanały dystrybucji, w tym plik ZIP, Swift Package Manager i Carthage, udostępniają tylko biblioteki połączone statycznie.

Zakładamy, że masz podstawową wiedzę o dynamicznym i statycznym linkowaniu na platformach Apple. Jeśli nie znasz tych pojęć, zapoznaj się z tą dokumentacją:

Ten dokument dotyczy typów łączenia bibliotek, a nie wczytywania niewykonywalnych pakietów zasobów, dlatego terminy biblioteka i framework 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 aplikacji podczas jej uruchamiania i nie będą musiały być rozwiązywane w tym czasie przez dynamiczny linker. Dzięki temu aplikacje korzystające z linkowania statycznego będą uruchamiać się szybciej. Odbija się to na nieco większym rozmiarze pliku binarnego lub wykonywalnego aplikacji, ale należy pamiętać, że większy rozmiar pliku wykonywalnego zostanie zrekompensowany brakiem 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

Dynamiczne linkowanie

Biblioteki połączone dynamicznie są przechowywane w pakiecie aplikacji oddzielnie od głównego pliku wykonywalnego aplikacji i muszą być wczytywane podczas uruchamiania aplikacji przez dynamiczny linker. Frameworki Apple są połączone dynamicznie, aby umożliwić współdzielenie kodu między procesami. Podobnie możesz używać dynamicznych frameworków do współdzielenia kodu między aplikacją a celami rozszerzenia. Nie możesz udostępniać dynamicznych frameworków między oddzielnymi aplikacjami, nawet jeśli obie są podpisane przez tego samego dewelopera.

Jeśli chcesz używać Firebase jako zależności dynamicznego elementu docelowego platformy, musisz też połączyć Firebase dynamicznie. W przeciwnym razie w czasie działania aplikacji wystąpią zduplikowane definicje klas. Dynamiczne łączenie jest domyślnym działaniem w przypadku use_frameworks!, ale możesz też wyraźnie określić dynamiczne łączenie w pliku Podfile:

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