iOS 11中的NSFoundationVersionNumber - 如何以编程方式检测iOS版本

时间:2017-08-23 14:20:19

标签: ios objective-c iphone

在之前的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做同样的事情,但我找不到正确的NSFoundationVersionNumberThe docs显示NSFoundationVersionNumber_iOS_9_x_Max是最新的。

那么,如果使用iOS 11,如何检测正确的NSFoundationVersionNumber

3 个答案:

答案 0 :(得分:79)

如果您使用的是Xcode 9或更高版本,则可以使用@available属性:

if (@available(iOS 11.0, *)) {
    NSLog(@"newest");
} else {
    NSLog(@"not newest");
}

在Swift中,它是相同的,但拼写为#available而不是@available

这是比其他方法更好的方法,因为编译器知道它,并会适当地抑制可用性警告。因此,在上面的示例中,您可以使用在if块中的iOS 11.0中引入的API,而不会被警告这些API对于项目的部署目标不可用。

答案 1 :(得分:15)

获取系统版本的一种指定方法是使用UIDevice的systemVersion属性。 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 :(得分:2)

Apple NSProcessInfo

Apple现在在NSProcessInfo

中提供NSOperatingSystemVersion结构

您可以将它与isOperatingSystemAtLeastVersion:一起使用,或者只需检查3个字段即可准确了解正在运行您的应用的系统版本。

它可以在obj c和swift中使用