Вы можете создавать динамические библиотеки для iOS и загружать их во время выполнения?
поддерживаются ли динамические библиотеки на iOS (iPhone/iPad)?
в Xcode я попытался создать новый проект ->Фреймворк И Библиотека ->библиотека какао (динамическая). В настройках проекта я поставил Base SDK до iOS device 4.1
и iOS4.1
, но он имеет ошибку сборки:
target указывает тип продукта ' com.яблоко.вид продукции.библиотека.динамичный, но нет такого типа продукта для платформа iphonesimulator'".
сборка, которую я выбрал симулятор - > отладка - > i386.
2 ответа:
в то время, когда был задан этот вопрос, динамические библиотеки не поддерживались iOS и приведут к тому, что ваше приложение будет отклонено. Разрешены только статические библиотеки.
однако в iOS8 вы можете использовать динамические библиотеки и фреймворки. Он должен "просто работать"
Я действительно не согласен с ответ темной пыли, но если я могу направить мой внутренний Билл Клинтон,это зависит от того, какой смысл поддерживает и :)
Apple не хочет, чтобы вы делали это для приложений App Store, но операционная система, безусловно, позволяет это. Джейлбрейк приложения используют эту технику все время. Вы в основном используете стандартную технику UNIX для динамического открытия фреймворка / библиотеки, а затем используете в ней материал. Этот функция dlopen позволяет открыть библиотеку, передав в путь к этой структуре, или dylib. От некоторых документы для создания приложений джейлбрейка вот пример вызова
init()
функция реализована внутри вашего собственного, отдельного dylib:#include <dlfcn.h> initWrapper() { char *dylibPath = "/Applications/myapp.app/mydylib2.dylib"; void *libHandle = dlopen(dylibPath, RTLD_NOW); if (libHandle != NULL) { // This assumes your dylib’s init function is called init, // if not change the name in "". void (*init)() = dlsym(libHandle, "init"); if (init != NULL) { init(); } dlclose(libHandle); } }
кроме того, ограничение по умолчанию не позволяет вам построить проект динамической библиотеки для iOS-это что-то в XCode, что вы можете переопределить путем редактирования некоторых xml-файлов XCode:
построить и использовать dylib на iOS
как только вы это сделаете, вы можете построить нормальный iOS .dylib нужна библиотека, и использовать его в примере кода выше. (да, вам, вероятно, придется разблокировать эту возможность снова, когда вы устанавливаете новую версию XCode).
Итак, это не техническое ограничение, а ограничение политики магазина приложений. Если вы не ограничены магазином приложений, то вы можете это сделать. Отмечать что эта техника делает не требуется джейлбрейк, хотя если приложение изолировано, это может ограничить здесь dylibs могут быть загружены из.
Edit: чтобы убедиться, что эта информация не потеряна для будущей ссылки rot, вот содержание ссылки, которую я предоставил о том, как включить iOS dylibs в Xcode. (Примечание: этот процесс по-прежнему работает на Xcode 4, но см. комментарии ниже для обновлений в пути и т. д.) Источник-это iOS место блог:
Xcode не позволяет создавать dylib для iOS. Приложение будет отклонено, если это не один двоичный файл. Но у меня есть приложение, которое имеет плагин архитектуры для загрузки дополнительных модулей. Я просто хочу быстрый прототип, чтобы доказать концепцию, прежде чем полностью перенести его на iOS. Это быстрее сделать, если dylib может просто работать. Итак, этот пост показывает, как создавать и использовать dylib, но имейте в виду, что он не будет одобрен в App Store. (Проверенный с Xcode 3.2.4 на 10.6.4)
1. открыть эти файлы в Редакторе списка свойств: / Разработчик / Платформы / MacOSX.платформа/разработчик/библиотека/в Xcode/технические характеристики/видео продукции.xcspec и /разработчик/платформы/iPhoneSimulator.платформа / разработчик / библиотека/Xcode/технические характеристики / типы продуктов симулятора iPhone.xcspec
2. найти пункт в " Типы Продуктов MacOSX.xcspec" что тип продукта
com.apple.product-type.library.dynamic
и перетащите его в "iPhone Simulator ProductTypes.xcspec".3. открыть " Типы Пакетов MacOSX.xcspec" и "iPhone симулятор PackageTypes.xcspec" найти на тех же местах.
4. найти пункт в " Типы Продуктов MacOSX.xcspec", который имеет тип пакета
com.apple.package-type.mach-o-dylib
и перетащите его в "iPhone Имитатор Типов Пакетов.xcspec".5. повторите шаги для "iPhoneOS.платформа" и перезапустить Xcode, если он был запущен.
теперь давайте построим dylib. Начните с "Статическая Библиотека Cocoa Touch" Templete. Это должно включать в себя фонд.в рамках проекта. Вот изменения, которые я сделал в верхней части templete, чтобы построить dylib.
1. Откройте файл .pbxproj (находится внутри пакета файлов проекта Xcode) в текстовом редакторе. Поиск строки" producttype", измените его значение на
com.apple.product-type.library.dynamic
;теперь откройте проект с помощью Xcode, перейдите в Проект - > Изменить Настройки Проекта
2."Каталог Установки" установлен
@executable_path/
потому что я планирую поместить dylib в тот же каталог, что и приложение выполнимый.3." Тип Mach-O " установить в динамическую библиотеку
4."Исполняемый Расширением " установить в dylib
5."Исполняемый Префикс " установить в пустой
6. добавьте один или два простых метода в библиотеку и создайте ее.
Теперь создайте приложение для его тестирования. На этот раз я выбираю вид на основе Применение. Подключите UIButton и UILable, чтобы вызвать lib и показать ответное сообщение. Вы можете загрузите полный проект TestApp и играть с ним.