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