Ответ
Статическая библиотека (.a или статический .framework) линкуется с кодом приложения на этапе компиляции. Ее код становится неотъемлемой частью исполняемого файла (бинарника).
Динамическая библиотека (.dylib или динамический .framework) линкуется на этапе запуска приложения (runtime). Код библиотеки находится в отдельном файле, который загружается в память и может использоваться несколькими процессами.
| Сравнение: | Критерий | Статическая библиотека | Динамическая библиотека |
|---|---|---|---|
| Время линковки | Компиляция (compile-time) | Загрузка (runtime) | |
| Размер приложения | Увеличивает, так как код копируется в бинарник | Не увеличивает (кроме заголовков), но библиотека должна быть доставлена с приложением | |
| Обновление | Требует пересборки приложения | Можно заменить (с ограничениями в iOS) | |
| Разделение кода | Нет, код вшит в приложение | Да, одна копия в памяти для нескольких процессов (системные библиотеки) | |
| Загрузка | Мгновенная, код уже в бинарнике | Небольшая задержка при запуске |
iOS-специфика:
- Embedding: Сторонние динамические фреймворки (
.framework) должны быть внедрены (Embedded Binaries) в бандл приложения для iOS, иначе оно не запустится. Системные фреймворки (например,Foundation.framework) уже присутствуют в iOS. - App Store & Swift: Swift-библиотеки не могут быть статически линкованы в системную кэш-память, поэтому Swift-зависимости часто доставляются как динамические фреймворки или через Swift Package Manager, который управляет линковкой.
Как добавить в Xcode:
- Статическая: Добавить в "Link Binary With Libraries" (обычно
.aили.framework). - Динамическая: Добавить в "Link Binary With Libraries" и в "Embed Frameworks" (для
.framework).