В iOS-разработке мы часто используем готовые библиотеки или упаковываем свой код для повторного использования. Тут есть два принципиально разных подхода: статические и динамические библиотеки.
- Статические библиотеки (*.a) встраивают весь свой код прямо в бинарник приложения во время компиляции. С одной стороны, это удобно - после сборки приложение не зависит от внешних файлов. С другой - любое изменение в библиотеке потребует полной перекомпиляции проекта.
- Динамические библиотеки (.dylib) работают иначе. Вместо включения в исполняемый файл они подгружаются в момент запуска приложения. Это уменьшает размер основного бинарника и ускоряет запуск (если библиотек немного). Но есть нюанс - если динамических зависимостей слишком много, время старта, наоборот, увеличится.
Особенность
iOS в том, что здесь нет общей области для динамических библиотек. Даже если десять приложений используют один и тот же фреймворк, система будет хранить десять отдельных копий - это следствие песочницы. Каждое приложение работает изолированно и не может делиться библиотеками с другими.
Ресурсы (картинки, локализация) поставляются вместе с библиотекой в специальных Bundle - это стандартный способ упаковки дополнительных файлов.
Главный вывод: выбор типа библиотеки зависит от задач. Статические - для простоты, динамические - для гибкости, но с оглядкой на особенности
iOS.