2014-02-12 3 views
2

Я пытаюсь создать приложение Cydia, которое будет работать на iOS 6 и 7, вызывая некоторые функции из частной структуры MusicLibrary. Эти функции находятся в разных классах в iOS 6 и 7, а класс, который существует в iOS 7, не существует в iOS 6. У меня это работает в iOS 7, но в iOS 6 я получаю «Символ не найден» «Ошибка при запуске при запуске. Это имеет смысл, но как мне избежать этого? Могу ли я скомпилировать одно приложение для обеих систем?Связь с Private Framework для iOS 6 и 7 (разные классы, но те же функции)

(я на самом деле не явно связываннии рамки, я просто включал заголовки мне нужно.)

ответ

3

Не ссылайтесь на него, и загружать его динамически.

static Class aClass; 

//... 

static void aFunction() 
{ 
    id object = [[aClass alloc]init]; 
    //... 
} 

//... 

__attribute__((constructor)) 
static void Constructor() { 
    dlopen("/System/Library/PrivateFrameworks/MusicLibrary.framework/MusicLibrary", RTLD_LAZY); 
    if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_7_0) { 
     aClass = NSClassFromString(@"ClassNameIniOS7"); 
    } else { 
     aClass = NSClassFromString(@"ClassNameIniOS6"); 
    } 
    //... 
} 
+0

Спасибо, это действительно работает! – newenglander