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

Od CocoaPods w wersjach 1.9.0 i Firebase 7 możesz wybrać, czy zależności Firebase mają być tworzone jako platforma statyczna czy dynamiczna. Zalecamy używanie platform statycznych, chyba że potrzebujesz określonych działań biblioteki dynamicznej.

Pamiętaj, że biblioteki utworzone poza GitHubem można łączyć statycznie tylko w przypadku CocoaPods w wersji 1.9.0 i nowszych. Obecnie lista bibliotek obejmuje AdMob, Analytics, Firebase ML i Monitorowanie wydajności. Wszystkie inne kanały dystrybucji, w tym plik ZIP, menedżer pakietów Swift i Carthage, zawierają tylko połączone statycznie biblioteki.

W tym dokumencie zakładamy, że masz praktyczną wiedzę na temat linków statycznych i dynamicznych na platformach Apple. Jeśli nie znasz tych pojęć, zapoznaj się z tą dokumentacją:

Ten dokument dotyczy typów połączeń z biblioteką, a nie wczytywania niewykonanych pakietów zasobów, dlatego terminy library i framework są używane zamiennie.

Łączenie statyczne

Statycznie połączone biblioteki są łączone w plik wykonywalny aplikacji podczas kompilacji. W rezultacie pliki obiektów z biblioteki statycznej będą widoczne w aplikacji po jej uruchomieniu i nie muszą być przetwarzane przez dynamiczny tag łączący w momencie uruchomienia aplikacji. Dlatego aplikacje korzystające z linków statycznych będą uruchamiane szybciej. Jest to kosztem nieco większych plików binarnych i plików wykonywalnych aplikacji, ale należy pamiętać, że większy rozmiar pliku wykonywalnego będzie kompensował brak pakietów bibliotek dynamicznych w pakiecie.

Możesz wymusić statyczne łączenie zależności Firebase, jawnie określając je w pliku Podfile:

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

Linki dynamiczne

Biblioteki połączone dynamicznie są przechowywane w pakiecie aplikacji oddzielnie od głównego pliku wykonywalnego aplikacji i muszą być ładowane przez tag łączący dynamiczne podczas uruchamiania aplikacji. Platformy Apple są połączone dynamicznie, aby umożliwiać współdzielenie kodu między procesami. Analogicznie możesz używać platform dynamicznych do współdzielenia kodu między celami aplikacji i rozszerzeń. Nie można współdzielić dynamicznych platform między różnymi aplikacjami, nawet jeśli obie są podpisane przez tego samego dewelopera.

Jeśli chcesz używać Firebase jako zależności docelowej platformy dynamicznej, musisz też połączyć Firebase dynamicznie. W przeciwnym razie w środowisku wykonawczym aplikacji pojawią się zduplikowane definicje klas. Linki dynamiczne są domyślnym działaniem w polu use_frameworks!, ale nadal możesz bezpośrednio określić takie połączenie w pliku Podfile:

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

Pamiętaj, że linki dynamiczne mogą wydłużyć czas uruchamiania aplikacji, zwłaszcza jeśli jest ona zależna od wielu.