Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Связать зависимости 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, явно указав привязку в вашем подфайле:

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

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

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

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

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

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