Начиная с CocoaPods 1.9.0 и Firebase 7, вы можете выбрать, будут ли ваши зависимости Firebase построены как статические или динамические платформы. Мы рекомендуем использовать статические платформы, если вам не требуется определенное поведение динамической библиотеки.
Обратите внимание, что библиотеки, разработанные за пределами GitHub, могут быть связаны только статически даже с CocoaPods 1.9.0 и более поздних версий. В настоящее время в этот список библиотек входят AdMob , Analytics , Firebase ML и Performance Monitoring . Все остальные каналы распространения, включая zip-файл, Swift Package Manager и Carthage, предоставляют только статически связанные библиотеки.
В этом документе предполагается наличие практических знаний динамического и статического связывания на платформах Apple. Если вы не знакомы с этими понятиями, ознакомьтесь со следующей документацией:
- Темы по программированию Mach-O
- Темы по программированию динамических библиотек
- Использование Firebase в библиотеках
Поскольку в этом документе рассматриваются типы связывания библиотек, а не загрузка пакетов неисполняемых ресурсов, термины «библиотека» и «фреймворк» используются как взаимозаменяемые.
Статическая связь
Статически связанные библиотеки включаются в исполняемый файл вашего приложения во время сборки. В результате объектные файлы статической библиотеки будут присутствовать в вашем приложении при его запуске, и их не нужно будет разрешать во время запуска приложения динамическим компоновщиком. Следовательно, приложения, использующие статическое связывание, будут запускаться быстрее. Это происходит за счет немного большего размера исполняемого файла/исполняемого файла приложения, хотя следует отметить, что больший размер исполняемого файла будет компенсирован отсутствием связанных динамических библиотек.
Вы можете принудительно статически связать зависимости Firebase, явно указав связь в вашем подфайле:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :static
Динамическое связывание
Динамически подключаемые библиотеки хранятся в пакете вашего приложения отдельно от основного исполняемого файла вашего приложения, и они должны быть загружены во время запуска приложения динамическим компоновщиком. Все платформы Apple динамически связаны между собой, что позволяет совместно использовать код между процессами; аналогичным образом вы можете использовать динамические платформы для совместного использования кода между вашим приложением и целями расширения. Вы не можете использовать динамические платформы для разных приложений, даже если они оба подписаны одним и тем же разработчиком.
Если вы хотите использовать Firebase в качестве зависимости от целевой динамической платформы, вам также необходимо динамически связать Firebase; в противном случае вы столкнетесь с повторяющимися определениями классов во время выполнения вашего приложения. Динамическое связывание — это поведение по умолчанию для use_frameworks!
, но вы все равно можете явно указать динамическую связь в своем подфайле:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic
Обратите внимание, что динамическое связывание может увеличить время запуска вашего приложения, особенно если у вашего приложения много зависимостей.