小编典典

如何查看iOS版本?

all

我想检查iOS设备的版本是否比3.1.3 我尝试过的要大:

[[UIDevice currentDevice].systemVersion floatValue]

但它不起作用,我只想要一个:

if (version > 3.1.3) { }

我怎样才能做到这一点?


阅读 176

收藏
2022-03-01

共1个答案

小编典典

快速回答——

从 Swift 2.0 开始,您可以使用#availableifguard保护只应在某些系统上运行的代码。

if #available(iOS 9, *) {}

在 Objective-C 中,您需要检查系统版本并进行比较。

[[NSProcessInfo processInfo] operatingSystemVersion]在 iOS 8 及更高版本中。

从 Xcode 9 开始:

if (@available(iOS 9, *)) {}

完整答案——

在 Objective-C 和极少数情况下的 Swift
中,最好避免依赖操作系统版本作为设备或操作系统功能的指示。通常有一种更可靠的方法来检查特定功能或类是否可用。

检查 API 是否存在:

例如,您可以使用以下命令检查UIPopoverController当前设备上是否可用NSClassFromString

if (NSClassFromString(@"UIPopoverController")) {
    // Do something
}

对于弱链接类,直接向类发送消息是安全的。值得注意的是,这适用于未明确链接为“必需”的框架。对于缺少的类,表达式的计算结果为 nil,条件不成立:

if ([LAContext class]) {
    // Do something
}

一些类,比如CLLocationManagerand UIDevice,提供了检查设备功能的方法:

if ([CLLocationManager headingAvailable]) {
    // Do something
}

检查符号是否存在:

偶尔,您必须检查是否存在常数。这是在 iOS 8 中引入的UIApplicationOpenSettingsURLString,用于通过
加载设置应用程序-openURL:。在 iOS 8 之前该值不存在。将 nil 传递给此 API 会崩溃,因此您必须首先注意验证常量的存在:

if (&UIApplicationOpenSettingsURLString != NULL) {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}

与操作系统版本比较:

假设您面临检查操作系统版本的相对罕见的需求。对于面向 iOS 8
及更高版本的项目,NSProcessInfo包括一种执行版本比较的方法,出错的可能性较小:

- (BOOL)isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion)version

针对旧系统的项目可以systemVersionUIDevice. Apple
在他们的GLSprite示例代码中使用它。

// A system version of 3.1 or greater is required to use CADisplayLink. The NSTimer
// class is used as fallback when it isn't available.
NSString *reqSysVer = @"3.1";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending) {
    displayLinkSupported = TRUE;
}

如果出于某种原因您认为这systemVersion是您想要的,请确保将其视为字符串,否则您可能会截断补丁修订号(例如 3.1.2 -> 3.1)。

2022-03-01