В чем разница между статической и динамической библиотекой в XCode? И почему Apple не позволяет нам использовать динамические библиотеки в наших приложениях iOS?
Разница между статической и динамической библиотекой в Xcode для iPhone
Ответ 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
помещаются в изолированную программную среду приложений и доступны только для этого приложения. Этот тип был создан в первую очередь для расширений для совместного использования общего кода и ресурсов.