Проверьте, работает ли iOS 5 или выше.

Возможный дубликат:
Проверить версию iPhone iOS

Одно из изменений, сделанных в iOS 5, - это возможность переопределить методы drawrect. Это означает, что мне нужно изменить внешний вид navigationBar и tabBar по-другому. Я могу использовать новые методы Apple:

[[UINavigationBar appearance]setBackgroundImage:[UIImage imageNamed:@"navigationBarBackgroundRetro.png"] forBarMetrics:UIBarMetricsDefault];

//I create my TabBar controlelr
tabBarController = [[UITabBarController alloc] init];

// I create the array that will contain all the view controlers
[[UITabBar appearance] setBackgroundImage:
    [UIImage imageNamed:@"navigationBarBackgroundRetroTab.png"]];

[[UITabBar appearance] setSelectionIndicatorImage:
    [UIImage imageNamed:@"tab_select_indicator"]];

Я разрабатываю приложение для iOS 4.3 и 5.0. Однако iOS 5 игнорирует метод drawrect, который я переопределяю, поэтому он должен запускать вышеуказанный код. Как проверить версию iOS, чтобы я мог использовать вышеуказанный код, если устройство находится на iOS 5?

Ответ 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 и т.д.).