Зачем мне создавать динамические фреймворки для проекта iOS?
У меня есть основная цель приложения. И я вставляю код в
frameworks
чтобы сократить время компиляции огромного проекта.
Тип фреймворка по умолчанию - Динамический (
BuildSettings -> Mach-O Type
). Я понимаю преимущества использования
Apple's dynamic frameworks
поскольку несколько приложений будут использовать одну и ту же платформу, и размер каждого приложения будет меньше (потому что размер приложения не включает эту динамическую структуру).
Но если я использую
my own frameworks
и только в моем приложении, почему я должен выбирать.
Похоже, что размер приложения будет больше с динамическими фреймворками. Источник и время запуска приложения будут больше (потому что ему нужно подключить все эти динамические библиотеки, но со статическими они уже являются частью исполняемого файла приложения).
Размер магазина приложений, вероятно, также будет больше с динамическими фреймворками.
Было бы полезно, если бы кто-нибудь мог рассказать мне, какие преимущества мы можем получить от использования
dynamic frameworks
🤝
1 ответ
Ваша оценка в основном верна.
Можно не связываться напрямую с фреймворками, а вместо этого загружать их по запросу с помощью
dlopen
.
Это можно использовать как для системы плагинов, где потребуется только одна из многих доступных библиотек, так и для отсрочки загрузки особенно тяжелых фреймворков, что фактически сократит время запуска вашего приложения.
Другие причины, которые я могу придумать для использования динамически связанных фреймворков:
- Причины лицензирования.
- Если вы разрабатываете библиотеку с закрытым исходным кодом для использования другими разработчиками, то статическая библиотека обычно содержит гораздо больше информации, чем динамическая библиотека, а с помощью статической библиотеки вы можете легко скрыть тот факт, что вы ее используете, и то, и другое вам может не понадобиться.
- Если у вас есть конфликты символов (например, из-за многократного связывания со статической библиотекой, как может быть в случае со стандартной библиотекой Rust), вы можете разделить различные кодовые базы на фреймворки, чтобы разделить пространства имен.