Свяжите зависимости 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. Если вы не знакомы с этими концепциями, ознакомьтесь со следующей документацией:

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

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

Статически связанные библиотеки объединяются в исполняемый файл вашего приложения во время сборки. В результате объектные файлы в статической библиотеке будут присутствовать в вашем приложении при его запуске и не должны быть разрешены во время запуска приложения динамическим компоновщиком. Следовательно, приложения, использующие статическое связывание, будут запускаться быстрее. Это происходит за счет немного большего размера исполняемого файла/приложения, хотя следует отметить, что больший размер исполняемого файла будет компенсирован отсутствием связанных динамических библиотек.

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

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

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

Динамически связанные библиотеки хранятся в вашем пакете приложений отдельно от основного исполняемого файла вашего приложения, и они должны быть загружены во время запуска приложения динамическим компоновщиком. Все фреймворки Apple связаны динамически, чтобы обеспечить совместное использование кода между процессами; аналогично, вы можете использовать динамические фреймворки для совместного использования кода между вашим приложением и целями расширения. Вы не можете совместно использовать динамические фреймворки между отдельными приложениями, даже если они оба подписаны одним и тем же разработчиком.

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

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

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