Подтвердить что ты не робот

Разница между статической и динамической библиотекой в ​​Xcode для iPhone

В чем разница между статической и динамической библиотекой в ​​XCode? И почему Apple не позволяет нам использовать динамические библиотеки в наших приложениях iOS?

4b9b3361

Ответ 1

Пока вы можете создавать динамические библиотеки для Mac OS X, вы не можете использовать их для разработки iPhone.

Статическая библиотека - это просто архив объектных файлов, который втягивается в программу, связанную с ней. Компилятор будет удалять все архивные файлы и вставлять их во время связывания вместе с остальными объектными файлами.

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

Ответ 2

Динамическая библиотека не имеет никакого смысла для приложения iphone, так как нет возможности установить библиотеку на телефоне. Я помню, как читал какую-то документацию, где Apple заявила, что они решили не использовать динамические библиотеки, поскольку они не хотели, чтобы пользователям приходилось сталкиваться с проблемами поиска/обновления библиотек. Намного проще просто установить 1 пакет для каждого приложения.

Ответ 3

Apple действительно позволяет создавать динамические библиотеки. В Mac OS X они заканчиваются на .bundle или .dylib(не .so или .a как на Linux).

Что конкретно вы пытаетесь сделать? Вы создали цель для своего dylib?

Ответ 4

Static libraries (*.a) являются коллекциями объектных файлов. В свою очередь, объектный файл - это просто имя файла, который выходит из компилятора и содержит машинный код.

Dynamic libraries (*.dylib) в отличие от static, вместо того, чтобы копироваться в один монолитный исполняемый файл, загружаются в память, когда они действительно необходимы. Это может произойти во время загрузки или во время выполнения.

Dynamic libraries обычно совместно используются приложениями, поэтому система должна хранить только одну копию библиотеки и разрешать доступ к ней различным процессам. В результате вызов кода и данных из динамических библиотек происходит медленнее, чем из статических.

Все системные библиотеки iOS и macOS являются dynamic. Следовательно, наши приложения выиграют от будущих улучшений, которые Apple внесет в стандартные библиотечные фреймворки без создания и доставки новых сборок. Apple оставляет за собой возможность создавать system frameworks для себя; в настоящее время сторонние разработчики не могут создавать system frameworks на iOS.

Если ваша Deployment target - iOS8+, вы можете создать embedded framework которая является embedded framework и dynamic framework. Embedded frameworks помещаются в изолированную программную среду приложений и доступны только для этого приложения. Этот тип был создан в первую очередь для расширений для совместного использования общего кода и ресурсов.

Источник и еще один. Также читайте больше здесь