Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

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

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

Поскольку этот документ связан с типами библиотек связи , а не загрузку неисполняемые наборов ресурсов, библиотека и рамки термины используются как взаимозаменяемые.

Статическое связывание

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

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

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

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

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

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

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

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