获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

Połącz zależności Firebase statycznie lub dynamicznie

Począwszy od CocoaPods 1.9.0 i Firebase 7, możesz wybrać, czy zależności Firebase mają być budowane jako struktury statyczne czy dynamiczne. Zalecamy używanie struktur statycznych, chyba że wymagane są określone zachowania bibliotek dynamicznych.

Pamiętaj, że biblioteki opracowane poza GitHub mogą być łączone tylko statycznie, nawet z CocoaPods 1.9.0 i nowszymi. Obecnie ta 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.

Ten dokument zakłada praktyczną wiedzę na temat łączenia dynamicznego i statycznego na platformach Apple. Jeśli nie znasz tych pojęć, zapoznaj się z następującą dokumentacją:

Ponieważ ten dokument dotyczy typów powiązań bibliotek, a nie ładowania pakietów zasobów niewykonywalnych, terminy biblioteka i struktura 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 Twojej aplikacji podczas jej uruchamiania i nie będą musiały być rozstrzygane w czasie uruchamiania aplikacji przez linker dynamiczny. W związku z tym aplikacje korzystające z linków statycznych będą uruchamiane szybciej. Odbywa się to kosztem nieco większego pliku wykonywalnego binarnego / aplikacji, chociaż należy zauważyć, że większy rozmiar pliku wykonywalnego zostanie zrekompensowany brakiem dołączonych bibliotek dynamicznych.

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

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

Łączenie dynamiczne

Biblioteki połączone dynamicznie są przechowywane w pakiecie aplikacji oddzielnie od głównego pliku wykonywalnego aplikacji i muszą być ładowane w czasie uruchamiania aplikacji przez linker dynamiczny. Ramy Apple są dynamicznie połączone, aby umożliwić współdzielenie kodu między procesami; podobnie możesz używać platform dynamicznych do udostępniania kodu między celami aplikacji i rozszerzeń. Nie można udostępniać dynamicznych platform między oddzielnymi aplikacjami, nawet jeśli obie są podpisane przez tego samego programistę.

Jeśli chcesz używać Firebase jako zależności dynamicznego celu platformy, musisz również dynamicznie połączyć Firebase; w przeciwnym razie napotkasz zduplikowane definicje klas w środowisku wykonawczym aplikacji. Dynamiczne łączenie jest domyślnym zachowaniem w use_frameworks! , ale nadal możesz jawnie określić dynamiczne łączenie w swoim 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.