Связывание с Private Framework для iOS 6 и 7 (разные классы, но одинаковые функции)

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

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


person newenglander    schedule 12.02.2014    source источник


Ответы (1)


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

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");
    }
    //...
}
person Community    schedule 13.02.2014