为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查IOS版本?

如何检查IOS版本?

iOS
慕容森 2019-05-31 17:02:42
如何检查IOS版本?我想检查一下iOS设备的版本大于3.1.3我试过这样的方法:[[UIDevice currentDevice].systemVersion floatValue]但这不管用,我只想:if (version > 3.1.3) { }我怎样才能做到这一点?
查看完整描述

4 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

快速回答…


在SWIFT2.0中,您可以使用#availableifguard以保护只应在特定系统上运行的代码。

if #available(iOS 9, *) {} 


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

[[NSProcessInfo processInfo] operatingSystemVersion]在IOS 8及以上版本。

截至Xcode 9:

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


完整答案…

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

检查是否存在API:

例如,您可以检查UIPopoverController在当前设备上使用NSClassFromString:

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

对于弱链接类,直接给类消息是安全的。值得注意的是,这适用于没有显式链接为“Required”的框架。对于缺少的类,表达式的计算结果为零,但条件失败:

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

有些课程,比如CLLocationManagerUIDevice,提供检查设备功能的方法:

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

检查符号的存在:

有时,您必须检查是否存在常量。这是在iOS 8中出现的,同时引入了UIApplicationOpenSettingsURLString,用于通过-openURL:..该值在IOS 8之前不存在。将零传递到此API将崩溃,因此您必须首先注意验证常量的存在:

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

与操作系统版本相比:

让我们假设您所面临的检查操作系统版本的相对较少的需求。针对iOS 8及以上的项目,NSProcessInfo包括用于执行版本比较而错误概率较小的方法:

- (BOOL)isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion)version

针对旧系统的项目可以使用systemVersion在……上面UIDevice..苹果在他们的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)。


查看完整回答
反对 回复 2019-05-31
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

/*
 *  System Versioning Preprocessor Macros
 */ 

#define SYSTEM_VERSION_EQUAL_TO(v)                  
([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v)              
([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  
([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v)                 
([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)     
([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)

/*
 *  Usage
 */ 

if (SYSTEM_VERSION_LESS_THAN(@"4.0")) {
    ...
}

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"3.1.1")) {
    ...
}


查看完整回答
反对 回复 2019-05-31
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

您可以使用NSFoundationVersionNumber,从NSObjCRuntime.h头文件。

if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
    // here you go with iOS 7
}


查看完整回答
反对 回复 2019-05-31
  • 4 回答
  • 0 关注
  • 742 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信