NSFoundationVersionNumber в iOS 11 - Как программно определить версию iOS
В предыдущих версиях iOS я использовал NSFoundationVersionNumber
для определения версии iOS:
#define IS_IOS10orHIGHER (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_9_x_Max)
#define IS_IOS9orHIGHER (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_8_3)
#define IS_IOS8orHIGHER (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_7_1)
#define IS_IOS7orHIGHER (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1)
#define IS_IOS6orHIGHER (floor(NSFoundationVersionNumber) >= NSFoundationVersionNumber_iOS_6_0)
...
Теперь я хотел бы сделать то же самое для iOS 11, но я не смог найти правильный NSFoundationVersionNumber
. Документы показывают, что NSFoundationVersionNumber_iOS_9_x_Max
является последним.
Итак, как правильно NSFoundationVersionNumber
если используется iOS 11?
Ответы
Ответ 1
Одним из назначенных способов получения версии системы является свойство systemVersion UIDevice. https://developer.apple.com/documentation/uikit/uidevice/1620043-systemversion?language=objc
NSString * systemVersion = [[UIDevice currentDevice] systemVersion];
Вы можете использовать его так:
#define IS_IOS11orHIGHER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 11.0)
Ответ 2
Если вы используете Xcode 9 или выше, вы можете использовать атрибут @available
:
if (@available(iOS 11.0, *)) {
NSLog(@"newest");
} else {
NSLog(@"not newest");
}
В Swift это то же самое, но написано # #available
вместо @available
.
Причина, по которой это лучший способ сделать это, чем другие методы, заключается в том, что компилятор знает об этом и будет соответствующим образом предупреждать о доступности. Таким образом, в приведенном выше примере вы можете использовать API, которые были введены в iOS 11.0 в блоке if
без предупреждения о том, что эти API недоступны для цели развертывания вашего проекта.
Ответ 3
Apple NSProcessInfo
Теперь Apple предоставляет структуру NSOperatingSystemVersion в NSProcessInfo
Вы можете использовать его с isOperatingSystemAtLeastVersion :, или просто проверьте 3 поля, чтобы точно знать, какая версия системы работает с вашим приложением.
Он доступен как для obj c, так и для swift