Ответ 2
Я на самом деле не согласен с ответом DarkDust, но если я могу направить свой внутренний Билл Клинтон, это зависит от того, что означает поддерживаемый :)
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 dylibs init function is called init,
// if not change the name in "".
void (*init)() = dlsym(libHandle, "init");
if (init != NULL) {
init();
}
dlclose(libHandle);
}
}
Кроме того, ограничение по умолчанию, запрещающее создание проекта динамической библиотеки для iOS, - это нечто в XCode, которое вы можете переопределить, отредактировав некоторые файлы XCode xml:
Сборка и использование dylib на iOS
Сделав это, вы можете создать обычную .dylib- библиотеку iOS и использовать ее в соответствии с приведенным выше примером кода. (да, вам, вероятно, придется снова разблокировать эту возможность всякий раз, когда вы устанавливаете новую версию XCode).
Таким образом, это не техническое ограничение, а ограничение политики App Store. Если вы не ограничены в App Store, тогда вы можете это сделать. Обратите внимание, что этот метод не требует джейлбрейка, хотя, если приложение помещено в "песочницу", оно может ограничивать то, откуда можно загружать dylibs.
Редактировать: чтобы удостовериться, что эта информация не будет потеряна для будущей гнили ссылки, вот содержание ссылки, которую я предоставил о том, как включить iOS dylibs в XCode. (Примечание: этот процесс все еще работает на Xcode 4, но см. Комментарий ниже для обновлений путей и т.д.) Источник - блог Места iOS:
Xcode не позволяет вам создавать dylib для iOS. Приложение будет отклонено, если его не один двоичный файл. Но у меня есть приложение с подключаемой архитектурой для загрузки дополнительных модулей. Я просто хочу быстрый прототип, чтобы доказать концепцию, прежде чем полностью перенести его на iOS. Это быстрее сделать, если Dylib может просто работать. Итак, этот пост показывает, как создать и использовать dylib, но имейте в виду, что он не будет одобрен в App Store. (Протестировано с Xcode 3.2.4 на 10.6.4)
1. Откройте эти файлы в редакторе списка свойств: /Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX Product Types.xcspec and /Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Specifications/iPhone Simulator ProductTypes.xcspec
2. Найдите элемент в " MacOSX Product Types.xcspec ", который имеет тип продукта com.apple.product-type.library.dynamic
и перетащите его в " iPhone Simulator ProductTypes.xcspec ".
![Xcode screenshot 1]()
3. Откройте " MacOSX Package Types.xcspec " и " iPhone Simulator PackageTypes.xcspec ", найденные в тех же местах.
4. Найдите элемент в " MacOSX Product Types.xcspec ", который имеет тип пакета com.apple.package-type.mach-o-dylib
и перетащите его в " iPhone Simulator PackageTypes.xcspec ".
![Xcode screenshot 2]()
5. Повторите шаги для " iPhoneOS.platform " и перезапустите Xcode, если он был запущен.
Теперь давайте создадим dylib. Начните с шаблона " Cocoa Touch Статическая библиотека ". Это должно включать Foundation.framework в проекте. Вот изменения, которые я сделал в верхней части шаблона для сборки dylib.
1. Откройте файл project.pbxproj (находится внутри пакета файлов проекта Xcode) в текстовом редакторе. Найдите строку " producttype ", измените ее значение на com.apple.product-type.library.dynamic
;
Теперь откройте проект с Xcode, перейдите в Project-> Изменить настройки проекта
2. " Каталог установки " установлен в @executable_path/
потому что я планирую поместить dylib в тот же каталог, что и исполняемый файл приложения.
3. " Тип Mach-O " установлен в Динамическую библиотеку
4. " Расширение исполняемого файла " установлено на dylib
5. " Исполняемый префикс " установлен пустым
6. Добавьте один или два простых метода в библиотеку и соберите ее.
Теперь создайте приложение для его тестирования. На этот раз я выбираю приложение на основе просмотра. Подключите UIButton и UILabel, чтобы вызвать lib и показать ответное сообщение. Вы можете скачать полный проект TestApp и поиграть с ним.