Свяжите зависимости Firebase статически или динамически

Начиная с CocoaPods 1.9.0 и Firebase 7, вы можете выбрать, будут ли ваши зависимости Firebase собираться как статические или динамические фреймворки. Мы рекомендуем использовать статические фреймворки, если вам не требуется определенное поведение динамических библиотек.

Обратите внимание, что библиотеки, разработанные вне GitHub, могут быть связаны только статически, даже в CocoaPods 1.9.0 и более поздних версиях. В настоящее время этот список библиотек включает AdMob , Analytics , Firebase ML и Performance Monitoring . Все остальные каналы распространения, включая zip-архив, Swift Package Manager и Carthage, предоставляют только статически связанные библиотеки.

Данный документ предполагает наличие базовых знаний о динамической и статической компоновке на платформах Apple. Если вы не знакомы с этими понятиями, ознакомьтесь со следующей документацией:

Поскольку данный документ посвящен типам связывания библиотек, а не загрузке неисполняемых пакетов ресурсов, термины «библиотека» и «фреймворк» используются взаимозаменяемо.

Статическая ссылка

Statically linked libraries are bundled into your application executable at build time. As a result, the object files in the static library will be present in your app when it launches and do not need to be resolved at app-launch time by the dynamic linker. Consequently, apps using static linking will launch faster. This comes at the expense of a slightly larger binary / app executable, although it should be noted that the larger executable size will be offset by the lack of bundled dynamic libraries.

Вы можете принудительно установить статическую привязку к зависимостям Firebase, явно указав соответствующую привязку в вашем Podfile:

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

Динамическая компоновка

Dynamically linked libraries are stored in your app bundle separately from your app's main executable, and they must be loaded at app-launch time by the dynamic linker. Apple's frameworks are all linked dynamically to enable code-sharing between processes; similarly, you can use dynamic frameworks to share code between your app and extension targets. You cannot share dynamic frameworks between separate applications, even if they are both signed by the same developer.

Если вы хотите использовать Firebase в качестве зависимости для динамического фреймворка, вам также необходимо динамически связать Firebase; в противном случае вы столкнетесь с дублирующимися определениями классов во время выполнения вашего приложения. Динамическая связь является поведением по умолчанию при use_frameworks! но вы все еще можете явно указать динамическую связь в вашем Podfile:

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

Обратите внимание, что динамическая компоновка может увеличить время запуска вашего приложения, особенно если у него много зависимостей.