Это очень обсуждаемый предмет, особенно в последнее время. Надеюсь, это не обман, поскольку я перешел ко всем другим вопросам.Вызов dlopen на ios
Меня не интересует, законно это или нет. Хотя на 100% не ясно, можете ли вы свободно делать то, что хотите, с помощью dylib на iOS8, кажется, что допустимо некоторое количество динамической загрузки (см., Например, Can you build dynamic libraries for iOS and load them at runtime?).
Меня интересует только то, что делает работу dlopen (забудьте о подарках на данный момент)! У меня очень простой пример iOS, где я вручную делаю dlopen, а затем dlsym, чтобы вызвать функцию в доморощенном dylib. Это отлично работает на симуляторе, но не работает на устройстве. Устройство работает под управлением iPhone 4s (без взлома) iOS 7.1.2.
AFAIK законно звонить в dlopen даже на iOS 7, так как есть явные инструкции Apple о том, как их поддерживать (см. Здесь «Развертывание содержащего приложения для старых версий iOS» здесь https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW3).
Я предполагаю, что основная причина - это что-то простое, например, dylib, находящееся в папке, которой iOS не нравится для двоичных файлов. У кого-нибудь есть опыт, который делает это, и знаю, что такое ограничения, или, возможно, знает, что я делаю неправильно.
FYI мой код нагрузки:
NSString* resourcePath = [[NSBundle mainBundle] resourcePath];
NSString* dlPath = [NSString stringWithFormat: @"%@/frameworktest", resourcePath];
const char* cdlpath = [dlPath UTF8String];
void* hModule = dlopen(cdlpath, RTLD_LAZY);
dylib (frameworktest) была создана путем создания Cocoa Touch Framework, создание и захвата dylib бинарного от встроенного каркаса и добавления к ресурсам проекта (в Корневая папка). otool показывает dylib в качестве библиотеки dynmic armv7, ориентированной на версию ios min версии 7.0. Я могу успешно сфотографировать файл, поэтому я знаю, что ищу подходящую папку.
Я могу шагнуть глубоко в сборник dlopen. До сих пор на самом деле он стал неинформирующим, ища очевидные неудачи :)
Любые идеи?
Подключен ли ваш dylib? – duskwuff
Вы получаете сообщение об ошибке? Если это так, вы должны указать, что это такое. Все, что вы говорите, это «... но не работает на устройстве» *. Я также нашел 'RTLD_GLOBAL | RTLD_LAZY' полезен. Я отказываюсь от него, если просто «RTLD_LAZY» терпит неудачу. (Но это на других операционных системах). Если все остальное не удастся, вы можете попробовать просить [Jailbreak QA] (http://www.jailbreakqa.com/). Они часто знают об этих типах угловых случаев. – jww
@ duskwuff Дилиб такой же, как и для сборки фреймов, поэтому беззнаковый (я бы ожидал).Будет ли это действительно нужно подписать для отладки? Любая идея о том, как его подписать (я рассмотрю надлежащий метод построения и упаковки фреймворков - это может ответить на этот вопрос и вообще мой вопрос). –