11版本判断 ios_ios swift 判断 ios版本 - CSDN
  • iOS11新增版本判断API

    2018-01-19 15:23:05
    iOS11版本现在有了简单的API,OC也开始支持swfit的@available语法,不用再手写iOS版本判断了。 if (@available(iOS 11.0, *)) { // 版本适配 } // 或者 #ifdef __IPHONE_11_0 #endif 目前没发现有iPhoneX的...

    iOS11新增版本判断API

    • iOS11版本现在有了简单的API,OC也开始支持swfit的@available语法,不用再手写iOS版本判断了。
    if (@available(iOS 11.0, *)) {
      // 版本适配
    }
    // 或者
    #ifdef __IPHONE_11_0   
    #endif
    • 目前没发现有iPhoneX的机型判断API,暂时可以使用size来做代替判断。
    #define kDevice_iPhoneX CGSizeEqualToSize(CGSizeMake(375, 812), [[UIScreen mainScreen] bounds].size)
    // 或者
    if (UIScreen.mainScreen.bounds.size.height == 812) {
        NSLog(@"this is iPhone X");
    }
    展开全文
  • iOS 判断系统版本

    2018-02-12 17:12:18
    由于各种原因,程序需要兼容iOS以前的版本,那么设置一个较低的部署...以前我们判断iOS版本会如下写: if ([[[UIDevice currentDevice].systemVersion substringToIndex:1] intValue] >= 7) { // iOS 7.0 及以后的版本

    方案一

    double systemVersion = [UIDevice currentDevice].systemVersion.boolValue;
    
        if (systemVersion >= 7.0) {
            // >= iOS 7.0
        } else {
            // < iOS 7.0
        }
    
        if (systemVersion >= 10.0) {
            // >= iOS 10.0
        } else {
            // < iOS 10.0
        }

    如果只是大致判断是哪个系统版本,上面的方法是可行的,如果具体到某个版本,如 10.0.1,那就会有偏差。我们知道systemVersion依旧是10.0。

    方案二

        NSString *systemVersion = [UIDevice currentDevice].systemVersion;
        NSComparisonResult comparisonResult = [systemVersion compare:@"10.0.1" options:NSNumericSearch];
    
        if (comparisonResult == NSOrderedAscending) {
            // < iOS 10.0.1
        } else if (comparisonResult == NSOrderedSame) {
            // = iOS 10.0.1
        } else if (comparisonResult == NSOrderedDescending) {
            // > iOS 10.0.1
        }
    
        或者
    
        if (comparisonResult != NSOrderedAscending) {
            // >= iOS 10.0.1
        } else {
            // < iOS 10.0.1
        }

    有篇博客提到,这种方法不靠谱。比如系统版本是10.1.1,而我们提供的版本是8.2,会返回NSOrderedAscending,即认为10.1.1 < 8.2 。
    其实,用这样的比较方式NSComparisonResult comparisonResult = [systemVersion compare:@"10.0.1"],的确会出现这种情况,因为默认是每个字符逐个比较,即1(0.1.1) < 8(.2),结果可想而知。但我是用NSNumericSearch方式比较的,即数值的比较,不是字符比较,也不需要转化成NSValue(NSNumber)再去比较。

    方案三

    if (NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_7_0) {
        // >= iOS 7.0
    } else {
        // < iOS 7.0
    }
    
    或者:
    
    if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_7_0) {
        // >= iOS 7.0
    } else {
        // < iOS 7.0
    }

    这些宏定义是Apple预先定义好的,如下:

    #if TARGET_OS_IPHONE
    ...
    #define NSFoundationVersionNumber_iOS_9_4 1280.25
    #define NSFoundationVersionNumber_iOS_9_x_Max 1299
    #endif
    

    细心的童靴可能已经发现问题了。《惊! Apple没有提供iOS 10 以后的宏?》。那我们要判断iOS10.0以后的版本该怎么做呢?
    有篇博客中提到,iOS10.0以后版本号提供了,并且逐次降低了,并提供了依据。

    #if TARGET_OS_MAC
    #define NSFoundationVersionNumber10_1_1 425.00
    #define NSFoundationVersionNumber10_1_2 425.00
    #define NSFoundationVersionNumber10_1_3 425.00
    #define NSFoundationVersionNumber10_1_4 425.00
    ...
    #endif
    

    我想这位童鞋可能没仔细看, 这两组宏是分别针对iPhone和macOS的,不能混为一谈的。

    所以也只能像下面的方式来大致判断iOS 10.0, 但之前的iOS版本是可以准确判断的。

        if (NSFoundationVersionNumber > floor(NSFoundationVersionNumber_iOS_9_x_Max)) {
            // > iOS 10.0
        } else {
            // <= iOS 10.0
        }

    方案四

    在iOS8.0中,Apple也提供了NSProcessInfo 这个类来检测版本问题。

    @property (readonly) NSOperatingSystemVersion operatingSystemVersion NS_AVAILABLE(10_10, 8_0);
    - (BOOL) isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion)version NS_AVAILABLE(10_10, 8_0);
    

    所以可以这样检测:

    if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion){.majorVersion = 8, .minorVersion = 3, .patchVersion = 0}]) {
         // >= iOS 8.3
    } else {
         // < iOS 8.3
    }

    用来判断iOS 10.0以上的各个版本也是没有问题的,唯一的缺点就是不能准确版本是哪个版本,当然这种情况很少。如果是这种情况,可以通过字符串的比较判断。

    方案五

    通过判断某种特定的类有没有被定义,或者类能不能响应哪个特定版本才有的方法。
    比如,UIAlertController 是在iOS 8.0才被引进来的一个类,我们这个依据来判断版本

        if (NSClassFromString(@"UIAlertController")) {
            // >= iOS 8.0
        } else {
            // < iOS 8.0
        }

    说到这里,就顺便提一下在编译期间如何进行版本控制,依然用UIAlertController 来说明。

    NS_CLASS_AVAILABLE_IOS(8_0) @interface UIAlertController : UIViewController

    NS_CLASS_AVAILABLE_IOS(8_0) 这个宏说明,UIAlertController 是在iOS8.0才被引进来的API,那如果我们在iOS7.0上使用,应用程序就会挂掉,那么如何在iOS8.0及以后的版本使用UIAlertController ,而在iOS8.0以前的版本中仍然使用UIAlertView 呢?

    这里我们会介绍一下在#import <AvailabilityInternal.h> 中的两个宏定义:

    • __IPHONE_OS_VERSION_MIN_REQUIRED

    • __IPHONE_OS_VERSION_MAX_ALLOWED

    从字面意思就可以直到,__IPHONE_OS_VERSION_MIN_REQUIRED 表示iPhone支持最低的版本系统,__IPHONE_OS_VERSION_MAX_ALLOWED 表示iPhone允许最高的系统版本。

    __IPHONE_OS_VERSION_MAX_ALLOWED 的取值来自iOS SDK的版本,比如我现在使用的是Xcode Version 8.2.1(8C1002),SDK版本是iOS 10.2,怎么看Xcode里SDK的iOS版本呢?

    进入PROJECT,选择Build Setting,在Architectures中的Base SDK中可以查看当前的iOS SDK版本。

    打印这个宏,可以看到它一直输出100200。

    __IPHONE_OS_VERSION_MIN_REQUIRED 的取值来自项目TARGETS的Deployment Target,即APP愿意支持的最低版本。如果我们修改它为8.2,打印这个宏,会发现输出80200,默认为10.2。

    通常,__IPHONE_OS_VERSION_MAX_ALLOWED 可以代表当前的SDK的版本,用来判断当前版本是否开始支持或具有某些功能。而__IPHONE_OS_VERSION_MIN_REQUIRED 则是当前SDK支持的最低版本,用来判断当前版本是否仍然支持或具有某些功能。

    回到UIAlertController 使用的问题,我们就可以使用这些宏,添加版本检测判断,从而使我们的代码更健壮。

     - (void)showAlertView {
    #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_9_0
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Title" message:@"message" delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
        [alertView show];
    #else
        if (NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_8_0) {
            UIAlertController *alertViewController = [UIAlertController alertControllerWithTitle:@"Title" message:@"message" preferredStyle:UIAlertControllerStyleAlert];
    
            UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil];
            UIAlertAction *otherAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
    
            [alertViewController addAction:cancelAction];
            [alertViewController addAction:otherAction];
    
            [self presentViewController:alertViewController animated:YES completion:NULL];
        }
    #endif
    }

    方案六

    iOS 11.0 以后,Apple加入了新的API,以后我们就可以像在Swift中的那样,很方便的判断系统版本了。

    if (@available(iOS 11.0, *)) {
        // iOS 11.0 及以后的版本
    } else {
        // iOS 11.0 之前
    }

    参考链接:

    展开全文
  • if #available(iOS 10.0, *) { }else { } 当然了,#available()不仅可以判断iOS,还可以判断if #available(tvOS 1.0, *) { } if #available(watchOS 1.0, *) { }

    if #available(iOS 10.0, *) {
                
    }else {
                
    }

    当然了,#available()不仅可以判断iOS,还可以判断
    if #available(tvOS 1.0, *) {
                    
    }
    if #available(watchOS 1.0, *) {
                    
    }
    if #available(OSX 10.11, *) {
                    
    }

    建议建一个Swift文件,里面写一个判断版本的函数,然后在其他地方调用。

    展开全文
  • 代码中判断设备iOS系统版本号从而使用不同方法处理来适配的四种方法

    在iOS开发过程中,如果要使用到一些跟特定系统版本特性有关的功能,或者要适配低版本系统的用户,还有一些方法是新版本系统才有的,有一些方法在新版本中已经弃用了,这都需要对不同系统版本的设备进行分别的处理,而这有个前提就是判断系统的版本号。

    判断系统版本号有多种方法,这里都列出来供大家和自己在开发中需要时进行选择使用。

    方法一:直接获取系统版本

    iOS提供了直接获取系统版本号的方法:

    NSString *version = [UIDevice currentDevice].systemVersion;
    if (version.doubleValue >= 9.0) {
        // 针对 9.0 以上的iOS系统进行处理
    } else {
        // 针对 9.0 以下的iOS系统进行处理
    }

    这种方法应该说也是最常见和常用的方法了。

    方法二:通过Foundation框架版本号

    iOS系统升级时Foundation框架也会升级版本号,我们可以通过获取Foundation的版本号来判断对应的iOS版本,这个iOS也提供了很直观的宏来进行判断:

    #if TARGET_OS_IPHONE
    #define NSFoundationVersionNumber_iPhoneOS_2_0  678.24
    #define NSFoundationVersionNumber_iPhoneOS_2_1  678.26
    #define NSFoundationVersionNumber_iPhoneOS_2_2  678.29
    #define NSFoundationVersionNumber_iPhoneOS_3_0  678.47
    #define NSFoundationVersionNumber_iPhoneOS_3_1  678.51
    #define NSFoundationVersionNumber_iPhoneOS_3_2  678.60
    #define NSFoundationVersionNumber_iOS_4_0  751.32
    #define NSFoundationVersionNumber_iOS_4_1  751.37
    #define NSFoundationVersionNumber_iOS_4_2  751.49
    #define NSFoundationVersionNumber_iOS_4_3  751.49
    #define NSFoundationVersionNumber_iOS_5_0  881.00
    #define NSFoundationVersionNumber_iOS_5_1  890.10
    #define NSFoundationVersionNumber_iOS_6_0  992.00
    #define NSFoundationVersionNumber_iOS_6_1  993.00
    #define NSFoundationVersionNumber_iOS_7_0 1047.20
    #define NSFoundationVersionNumber_iOS_7_1 1047.25
    #define NSFoundationVersionNumber_iOS_8_0 1140.11
    #define NSFoundationVersionNumber_iOS_8_1 1141.1
    #define NSFoundationVersionNumber_iOS_8_2 1142.14
    #define NSFoundationVersionNumber_iOS_8_3 1144.17
    #define NSFoundationVersionNumber_iOS_8_4 1144.17
    #define NSFoundationVersionNumber_iOS_8_x_Max 1199
    #define NSFoundationVersionNumber_iOS_9_0 1240.1
    #define NSFoundationVersionNumber_iOS_9_1 1241.14
    #define NSFoundationVersionNumber_iOS_9_2 1242.12
    #define NSFoundationVersionNumber_iOS_9_3 1242.12
    #define NSFoundationVersionNumber_iOS_9_4 1280.25
    #define NSFoundationVersionNumber_iOS_9_x_Max 1299
    #endif

    可以看到,最上面判断了这是iPhone的系统,相应的还有Mac的系统。这些都是NSFoundationVersionNumber这个宏定义的值,我们可以判断它来获取当前设备的系统版本,用法如下:

    if (NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_9_0) {
        // iOS 9.0 以上系统的处理
    } else {
        // iOS 9.0 以下系统的处理
    }

    方法三:根据特有的类判断

    我们之前说有些类和方法是新版本才有的,要使用的时候要判断一下版本号,但也可以反过来利用这一点,判断有没有这个类从而得知当前的版本号范围。

    比如说 UIAlertController 这个类,是iOS 8之后才出现的,用来取代 UIAlertView 和 UIActionsheet 的,如果当前系统没有这个类,说明是低于iOS 8的,可以这么判断:

    if (NSClassFromString(@"UIAlertController")) { // 存在这个类
        // iOS 8.0 以上系统的处理
    } else {
        // iOS 8.0 以下系统的处理
    }

    方法四:根据特有的方法进行判断

    类似于根据特有的类来判断,有些方法也是某个系统版本之后才出现的,根据有无这个方法即可得知当前版本号的范围,比如 boundingRectWithSize:options:attributes:context: 这个方法是 iOS 7.0 之后才有的,可以这样判断:

    if ([@"" respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]) { // 存在这个方法
        // iOS 7.0 以上系统的处理
    } else {
        // iOS 7.0 以下系统的处理
    }

    其实根据类和方法来判断直接就可以决定使用什么类和方法了,也算是跳过了先判断系统然后选择方法这一步,严格来说已经不算是为了判断系统版本了。


    版权所有:http://blog.csdn.net/cloudox_

    展开全文
  • 在预编译阶段判断ios版本  #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_5_0 // This code will compile on versions >= ios5.0 #else // This code will compile on versions #endif

    在预编译阶段判断ios版本  

    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_5_0

    // This code will compile on versions >= ios5.0
    #else
    // This code will compile on versions<5.0
    #endif 
    展开全文
  • <body><script type="text/javascript"> var str= navigator.userAgent.toLowerCase(); var ver=str.match(/cpu iphone os (.*?) like mac os/); if(!ver){
  • 判断版本iOS SDK

    2013-10-07 09:02:45
    本篇译自:Matt ... 原文:...这篇日志会告诉你在ios编程中如何判断不同的版本ios系统。 1,让项目/Target支持不同版本iOS 要让一个程序可以在
  • 怎么判断ios 版本

    2012-02-25 08:53:38
    前几天工程项目要用到判断ios版本,最后研究了一下,分享一下:   -(void)getIOSVersion { // #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 50000 //此方法和编译器相关 // quanju.iOSVersion=1; // #...
  • //判断是否需要提示更新App- (void)shareAppVersionAlert { if(![self judgeNeedVersionUpdate]) return ; //App内info.plist文件里面版本号 NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];...
  • JS判断IOS系统版本

    2014-11-18 11:22:06
    var ver = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/); ver = parseInt(ver[1], 10); if(ver) { alert("需要IOS7及以上才可安装"); return; }
  • iOS8系统开始,用户可以在设置里面设置在WiFi环境下,自动更新安装的App。此功能大大方便了用户,但是一些用户没有开启此项功能,因此还是需要在程序里面提示用户的 方法一:在服务器接口约定对应的数据,这样,...
  • ios中应用的版本判断有两种方法: 1.将你的应用版本号同步在你自己的服务器上,打开程序后去自己的服务器获取版本号和手机上的应用版本号做比较,然后去appstore升级 2.通过url获取appstore上的最新版本信息,然后...
  • iPhoneX推出已经有很长时间了,从最初的简单适配到前一段时间拿到真机开始做更优化的适配,我在部分地方用到了判断手机型号及系统版本的方法,下面分享一下。 首先需要导入头文件 #import <sys/utsname.h> ...
  • iOS 13下的设备判断

    2019-11-29 18:33:59
    通常的设备判断方式(1) 移动端还是PC(2) 安卓还是iOS(3) 是否用微信打开2. iOS 13的问题3. iOS 13下如何判断设备 1. 通常的设备判断方式 通常在进行如下判断时,常使用navigator.userAgent。 (1) 移动端还是PC ...
  • 先来两段代码:片段1: #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 50000 //you can use iOS 5 APIs here because the SDK supports them //but the code may still crash if run on an iOS 4 device #else //this c
  • var browser = { versions: function () { var u = navigator.userAgent, app = navigator.appVersion; return {//移动终端浏览器版本信息 trident: u.indexO
  • double version = [[UIDevice currentDevice].systemVersion doubleValue];//判定系统版本。  if(version>=5.0f){  [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed: @"navigationB
  • var browser = { versions : function() { var u = navigator.userAgent, app = navigator...return { //移动终端浏览器版本信息  trident : u.indexOf('Trident') > -1, //IE内核  presto : u.indexOf('Presto')
  • Unity 只带获取系统版本号接口:Application.version(),在PC和Android上都可以正常获取版本号,而在IOS上只能获取到Build号,所以需要通过Object获取 // app版本 NSString *ver = [[[NSBundle mainBundle] ...
1 2 3 4 5 ... 20
收藏数 156,713
精华内容 62,685
关键字:

11版本判断 ios