Google 致力于为黑人社区推动种族平等。查看具体举措
Эта страница переведена с помощью Cloud Translation API.
Switch to English

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

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