Связывание с частной платформой для iOS 6 и 7 (разные классы, но одинаковые функции)
Я пытаюсь создать приложение Cydia, которое будет работать на iOS 6 и 7, вызывая некоторые функции из частного фреймворка MusicLibrary. Эти функции находятся в разных классах в iOS 6 и 7, А класс, существующий в iOS 7, не существует в iOS 6. У меня это работает в iOS 7, но в iOS 6 я получаю ошибку времени выполнения "Symbol not found" при запуске. Это имеет смысл, но как мне избежать этого? Можно ли скомпилировать одно приложение для обеих систем?
(на самом деле я явно не связываю в отличие от фреймворка, я просто включил заголовки, которые мне нужны.)
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"); } //... }