Я пытаюсь создать динамическую библиотеку для iOS и загрузить ее во время выполнения. Посмотрев на this question и this answer, я делаю это с помощью iOSOpenDev и развертывания всего на моем iPhone. Xcode проект для dylib называется KDylibTwo и файлы I modiefied являются:iOS 6.1 Создание и связь динамической библиотеки
KDylibTwo.h
#import <Foundation/Foundation.h>
@interface KDylibTwo : NSObject
-(void)run;
@end
KDylibTwo.m
#import "KDylibTwo.h"
@implementation KDylibTwo
-(id)init
{
if ((self = [super init]))
{
}
return self;
}
-(void)run{
NSLog(@"KDylibTwo loadded.");
}
@end
Для того, чтобы проверить, если мой библиотека работает, после ее создания для профилирования (способ, которым iOSOpenDev развертывает его на iPhone), я могу найти его на моем устройстве в /usr/lib/libKDylibTwo.dylib
и построить настройку (снова используя iOSOpenDev), Зацепив трамплин следующим образом:
#include <dlfcn.h>
%hook SBApplicationIcon
-(void)launch{
NSLog(@"\n\n\n\n\n\n\nSBHook For libKDylibTwo.dylib");
void* dylibLink = dlopen("/usr/lib/libKDylibTwo.dylib", RTLD_NOW);
if(dylibLink == NULL) {
NSLog(@"Loading failed.");
} else {
NSLog(@"Dylib loaded.");
void (*function)(void);
*(void **)(&function) = dlsym(dylibLink, "run");
if (function) {
NSLog(@"Function found.");
(*function)();
} else {
NSLog(@"Function NOT found");
}
}
NSLog(@"End of code");
%log;
%orig;
}
%end
После установки твика на устройстве и нажав на иконке (что бы огнь зацепил код), выход консоли выглядит следующим образом:
Aug 28 13:03:35 Pudge SpringBoard[18254] <Warning>: SBHook For libKDylibTwo.dylib
Aug 28 13:03:35 Pudge SpringBoard[18254] <Warning>: Dylib loaded.
Aug 28 13:03:35 Pudge SpringBoard[18254] <Warning>: Function NOT found
Aug 28 13:03:35 Pudge SpringBoard[18254] <Warning>: End of code
Aug 28 13:03:35 Pudge SpringBoard[18254] <Warning>: -[<SBApplicationIcon: 0x1d5008c0> launch]
Моих вопрос в том, что я делаю неправильно, и функция библиотеки не вызывается или не выполняется! Я думаю, я должен уточнить, что я говорю только о джейлбрейк-устройствах, а не о разработке App Store, поэтому, пожалуйста, не отправляйте сообщения о том, что это невозможно!
Благодарим вас,
Panagiotis.
Я не дома и не могу проверить прямо сейчас. Но, Виктор прав, что техника, которую я показал, предназначена для вызова функций C, а не Obj-C. – Nate