Проверяем версию iOS
10.08.2016Как проверить версию iOS? Очень просто:
NSString* requiredVersion = @"9.3.1";
NSString* currentSystemVersion = [[UIDevice currentDevice] systemVersion];
if ([currSystemVersion compare:requiredVersion options:NSNumericSearch] != NSOrderedAscending) {
// code that is suitable for iOS >= 9.3.1
} else {
// code for versions older that 9.3.1
}
В Swift’е это сделать несколько проще:
if #available(iOS 9.3.1, *) {
// code that is suitable for iOS >= 9.3.1
} else {
// code for versions older than 9.3.1
}
Важное отступление. Наверняка возникает вопрос, почему нельзя сделать так:
if (UIDevice.currentDevice.systemVersion.floatValue >= 9.3) {
// do something for iOS greater or equal 9.3
}
Отвечаю. Пункт первый - а что если вам надо >= 9.3.1 именно с 1 обновления, а не для всей 9.3? Float сравнение уже не позволит написать такое условие, в то же время приведенный мной код строкового сравнения позволяет сделать это. Пункт второй, более важный - сравнение чисел с плавающей точкой. Пример, для вот такого кода
NSString* systemVersion = @"9.3.2";
float sysVer = systemVersion.floatValue;
в sysVer будет 9.30000019 и простое сравнение sysVer == 9.3 не сработает. В таком случае надо бы делать fabs(sysVer - 9.3) <= 0.01 что уже как проигрывает по выразительности, так и ставит вопросы - а каков эпсилон версий операционки?
Со swift’ом в общем таких проблем нет.