Вопрос: iOS: препроцессор для проверки версии ОС


В прошлом я использовал следующий препроцессорный код для условного выполнения кода для разных версий iOS:

#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
// target is iOS
    #if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000
    // target is lower than iOS 6.0
    #else
    // target is at least iOS 6.0
    #endif
#endif

Однако с iOS 7 у меня есть следующая проблема:

#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
// target is iOS
    #if __IPHONE_OS_VERSION_MIN_REQUIRED < 70000
    // target is lower than iOS 7.0
    NSLog(@"This message should only appear if iOS version is 6.x or lower");
    #else
    // target is at least iOS 7.0
    #endif
#endif

NSLog сообщение выше появляется на консоли под iOS 7. Я что-то делаю неправильно?

EDIT: следующий код, запущенный под iOS 7 (симулятор и устройство)

NSLog(@"Version %i", __IPHONE_OS_VERSION_MIN_REQUIRED);

дает: Версия 60000


5


источник


Ответы:


Это цель развертывания вашего приложения (минимальная версия, где может быть установлено ваше приложение), а не версия, в которой приложение работает на устройстве.

В настройках вашего проекта вы можете установить это поле:

enter image description here

Если вы измените его так, этот ввод:

NSLog(@"Version %i", __IPHONE_OS_VERSION_MIN_REQUIRED);

Возвращает 7000

Если вы хотите проверить фактическую версию операционной системы, я отсылаю вас к этому вопросу:

Как проверить версию iOS?

Но это делается во время выполнения, а не во время компиляции.


8



  #ifdef __AVAILABILITY_INTERNAL__IPHONE_9_0_DEP__IPHONE_9_0
    // you're in Xcode 7.x and can use buggy SDK with ios 9.0 only functionality
        CGFloat iOSVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (iOSVersion>=9) {
        // same good old API that predates brave new post Steve Jobs world of bugs and crashes
    }
  #else
        // you're running Xcode 6.4 or older and should use older API here
  #endif

0