Свяжите зависимости 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

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