Я был бы осторожен с возвращаемым результатом floatValue:
[[[UIDevice currentDevice] systemVersion] floatValue]
Как и в случае любых операций с плавающей точкой, это может быть не совсем то, что вы ожидаете. При запуске вышеупомянутого в моей системе, сбитый с толку, почему мой условный оператор не выполнялся, я заметил возвращаемое значение:
3.20000005
Вместо этого порекомендуйте решения: Как проверить версию iOS?
Выдержка:
NSComparisonResult order = [[UIDevice currentDevice].systemVersion compare: @"3.1.3" options: NSNumericSearch];
if (order == NSOrderedSame || order == NSOrderedDescending) {
// OS version >= 3.1.3
} else {
// OS version < 3.1.3
}