在之前的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
。 The docs显示NSFoundationVersionNumber_iOS_9_x_Max
是最新的。
那么,如果使用iOS 11,如何检测正确的NSFoundationVersionNumber
?
答案 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
中提供NSOperatingSystemVersion结构您可以将它与isOperatingSystemAtLeastVersion:一起使用,或者只需检查3个字段即可准确了解正在运行您的应用的系统版本。
它可以在obj c和swift中使用