Ответ 1
Образцы ниже работают для любого номера версии. например: для обнаружения iOS 5 вместо 7, замените 7 на 5 в коде.
Макеты доступностиInternal.h
Это определяет SDK, с которым вы строите:
#ifdef __IPHONE_7_0
// iOS 7.0
#endif
Это определяет версию, установленную как "Цель развертывания" на вкладке "Общие" вашей целевой конфигурации:
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000
// iOS 7.0 or later
#else
// less than 7
#endif
Версия NSFoundation
BOOL isAtLeastIOS61 = NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_6_1;
BOOL isAtMost61 = NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_6_1;
BOOL is7x = floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1;
Если вы ⌘ нажмите NSFoundationVersionNumber
, вы увидите константы версий для iOS и OSX. Константа для текущего SDK всегда отсутствует.
Версия Core Foundation
BOOL atLeastIOS61 = kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_6_1;
Как и в случае с NSFoundationVersionNumber
, версия SDK отсутствует.
Версия системы устройства
NSString *version = [[UIDevice currentDevice] systemVersion];
BOOL isAtLeast6 = [version floatValue] >= 6.0;
BOOL isAtLeast7 = [version floatValue] >= 7.0;
Альтернативный способ:
BOOL isAtLeast6 = [version hasPrefix:@"6."];
BOOL isAtLeast7 = [version hasPrefix:@"7."];
Альтернативный способ:
BOOL isAtLeast6 = [version compare:@"6.0" options:NSNumericSearch] != NSOrderedAscending
BOOL isAtLeast7 = [version compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending
В случае возникновения проблем с преобразованием float/string, пусть будет известно, что все вышеприведенные отчеты корректно, если версия равна или больше, для любой возможной версии iOS (6.0, 6.0.1, 6.1 и т.д.).