Связывание с частной платформой для iOS 6 и 7 (разные классы, но одинаковые функции)


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

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

1 2

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");
    }
    //...
}