Начиная с 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
Динамические ссылки
Динамически связанные библиотеки хранятся в наборе App Bundle отдельно от основного исполняемого файла приложения и должны загружаться при запуске приложения динамическим компоновщиком. Все фреймворки Apple динамически связаны, чтобы обеспечить совместное использование кода между процессами. Аналогичным образом вы можете использовать динамические фреймворки для совместного использования кода между вашим приложением и целевыми объектами расширения. Вы не можете использовать динамические фреймворки в разных приложениях, даже если они подписаны одним и тем же разработчиком.
Если вы хотите использовать Firebase как зависимость целевого объекта динамического фреймворка, вам также нужно динамически связать Firebase. В противном случае во время выполнения приложения возникнут дублирующиеся определения классов. Динамическое связывание используется в use_frameworks! по умолчанию, но вы можете явно указать его в Podfile:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic
Обратите внимание, что динамическое связывание может увеличить время запуска приложения, особенно если у него много зависимостей.