iOS版本判断
做iOS版本适配的时候,因为有些API是在新的版本里才出现的,所以需要做版本的判断。下面就说一下iOS提供的几个版本判断的方法
OC:@available,Swift:#available这个是xcode9新出的一个判断iOS版本的方法,下面的代码是判断scrollview在iOS11中的新属性的方法。if(@available(iOS11.0,*)){scrollView.contentInsetAdjustmentBehavior=UIScrollViewContentInsetAdjustmentNever;}else{self.automaticallyAdjustsScrollViewInsets=NO;}其中@available(iOS11.0,*)第一个参数iOS11.0代表在iOS11.0版本以上,第二个参数*代表其他所有平台。所以这段代码的意思运行这段代码的系统是否在iOS11.0和其他平台上,如果是则执行if里的语句,不是则执行else里的语句。
NSFoundationVersionNumberNSFoundationVersionNumber是一个double值,定义在头文件NSObjCRuntime.h中,这个头文件中包含一系列的iOS、Mac的版本FOUNDATION_EXPORTdoubleNSFoundationVersionNumber;#ifTARGET_OS_MAC#defineNSFoundationVersionNumber10_0397.40#defineNSFoundationVersionNumber10_1425.00#defineNSFoundationVersionNumber10_1_1425.00#defineNSFoundationVersionNumber10_1_2425.00#defineNSFoundationVersionNumber10_1_3425.00#defineNSFoundationVersionNumber10_1_4425.00#defineNSFoundationVersionNumber10_2462.00#defineNSFoundationVersionNumber10_2_1462.00#defineNSFoundationVersionNumber10_2_2462.00#defineNSFoundationVersionNumber10_2_3462.00#defineNSFoundationVersionNumber10_2_4462.00#defineNSFoundationVersionNumber10_2_5462.00#defineNSFoundationVersionNumber10_2_6462.00#defineNSFoundationVersionNumber10_2_7462.70#defineNSFoundationVersionNumber10_2_8462.70#defineNSFoundationVersionNumber10_3500.00#defineNSFoundationVersionNumber10_3_1500.00#defineNSFoundationVersionNumber10_3_2500.30#defineNSFoundationVersionNumber10_3_3500.54#defineNSFoundationVersionNumber10_3_4500.56#defineNSFoundationVersionNumber10_3_5500.56#defineNSFoundationVersionNumber10_3_6500.56#defineNSFoundationVersionNumber10_3_7500.56#defineNSFoundationVersionNumber10_3_8500.56#defineNSFoundationVersionNumber10_3_9500.58#defineNSFoundationVersionNumber10_4567.00#defineNSFoundationVersionNumber10_4_1567.00#defineNSFoundationVersionNumber10_4_2567.12#defineNSFoundationVersionNumber10_4_3567.21#defineNSFoundationVersionNumber10_4_4_Intel567.23#defineNSFoundationVersionNumber10_4_4_PowerPC567.21#defineNSFoundationVersionNumber10_4_5567.25#defineNSFoundationVersionNumber10_4_6567.26#defineNSFoundationVersionNumber10_4_7567.27#defineNSFoundationVersionNumber10_4_8567.28#defineNSFoundationVersionNumber10_4_9567.29#defineNSFoundationVersionNumber10_4_10567.29#defineNSFoundationVersionNumber10_4_11567.36#defineNSFoundationVersionNumber10_5677.00#defineNSFoundationVersionNumber10_5_1677.10#defineNSFoundationVersionNumber10_5_2677.15#defineNSFoundationVersionNumber10_5_3677.19#defineNSFoundationVersionNumber10_5_4677.19#defineNSFoundationVersionNumber10_5_5677.21#defineNSFoundationVersionNumber10_5_6677.22#defineNSFoundationVersionNumber10_5_7677.24#defineNSFoundationVersionNumber10_5_8677.26#defineNSFoundationVersionNumber10_6751.00#defineNSFoundationVersionNumber10_6_1751.00#defineNSFoundationVersionNumber10_6_2751.14#defineNSFoundationVersionNumber10_6_3751.21#defineNSFoundationVersionNumber10_6_4751.29#defineNSFoundationVersionNumber10_6_5751.42#defineNSFoundationVersionNumber10_6_6751.53#defineNSFoundationVersionNumber10_6_7751.53#defineNSFoundationVersionNumber10_6_8751.62#defineNSFoundationVersionNumber10_7833.10#defineNSFoundationVersionNumber10_7_1833.10#defineNSFoundationVersionNumber10_7_2833.20#defineNSFoundationVersionNumber10_7_3833.24#defineNSFoundationVersionNumber10_7_4833.25#defineNSFoundationVersionNumber10_8945.00#defineNSFoundationVersionNumber10_8_1945.00#defineNSFoundationVersionNumber10_8_2945.11#defineNSFoundationVersionNumber10_8_3945.16#defineNSFoundationVersionNumber10_8_4945.18#defineNSFoundationVersionNumber10_91056#defineNSFoundationVersionNumber10_9_11056#defineNSFoundationVersionNumber10_9_21056.13#defineNSFoundationVersionNumber10_101151.16#defineNSFoundationVersionNumber10_10_11151.16#defineNSFoundationVersionNumber10_10_21152.14#defineNSFoundationVersionNumber10_10_31153.20#defineNSFoundationVersionNumber10_10_41153.20#defineNSFoundationVersionNumber10_10_51154#defineNSFoundationVersionNumber10_10_Max1199#defineNSFoundationVersionNumber10_111252#defineNSFoundationVersionNumber10_11_11255.1#defineNSFoundationVersionNumber10_11_21256.1#defineNSFoundationVersionNumber10_11_31256.1#defineNSFoundationVersionNumber10_11_41258#defineNSFoundationVersionNumber10_11_Max1299#endif#ifTARGET_OS_IPHONE#defineNSFoundationVersionNumber_iPhoneOS_2_0678.24#defineNSFoundationVersionNumber_iPhoneOS_2_1678.26#defineNSFoundationVersionNumber_iPhoneOS_2_2678.29#defineNSFoundationVersionNumber_iPhoneOS_3_0678.47#defineNSFoundationVersionNumber_iPhoneOS_3_1678.51#defineNSFoundationVersionNumber_iPhoneOS_3_2678.60#defineNSFoundationVersionNumber_iOS_4_0751.32#defineNSFoundationVersionNumber_iOS_4_1751.37#defineNSFoundationVersionNumber_iOS_4_2751.49#defineNSFoundationVersionNumber_iOS_4_3751.49#defineNSFoundationVersionNumber_iOS_5_0881.00#defineNSFoundationVersionNumber_iOS_5_1890.10#defineNSFoundationVersionNumber_iOS_6_0992.00#defineNSFoundationVersionNumber_iOS_6_1993.00#defineNSFoundationVersionNumber_iOS_7_01047.20#defineNSFoundationVersionNumber_iOS_7_11047.25#defineNSFoundationVersionNumber_iOS_8_01140.11#defineNSFoundationVersionNumber_iOS_8_11141.1#defineNSFoundationVersionNumber_iOS_8_21142.14#defineNSFoundationVersionNumber_iOS_8_31144.17#defineNSFoundationVersionNumber_iOS_8_41144.17#defineNSFoundationVersionNumber_iOS_8_x_Max1199#defineNSFoundationVersionNumber_iOS_9_01240.1#defineNSFoundationVersionNumber_iOS_9_11241.14#defineNSFoundationVersionNumber_iOS_9_21242.12#defineNSFoundationVersionNumber_iOS_9_31242.12#defineNSFoundationVersionNumber_iOS_9_41280.25#defineNSFoundationVersionNumber_iOS_9_x_Max1299#endif如果要判断系统运行的版本可以使用下面代码
if(NSFoundationVersionNumber>NSFoundationVersionNumber_iOS_9_x_Max){}else{}不过这个头文件里定义的最大的宏是NSFoundationVersionNumber_iOS_9_x_Max。不过NSFoundationVersionNumber在iOS10.3.1上和iOS11上输出的值分别为1349.55和1444.12,看来苹果只是没有提供对应的宏,但是却改变了NSFoundationVersionNumber的值。
UIDevice的systemVersion属性可以使用如下代码判断系统版本,这段代码使用xcode9在iOS10.3.1模拟器上运行NSString*version=[UIDevicecurrentDevice].systemVersion;floatfloat_version=[versionfloatValue];//10.300000NSLog(@"%f",float_version);if(float_version>=10.3){NSLog(@"系统版本大于等于10.3");}else{NSLog(@"系统版本小于10.3");}//输出系统版本大于等于10.3判断某个系统版本的方法或类来判断系统版本if(NSStringFromClass([UIAlertControllerclass])){NSLog(@"iOS8以上");}if([@""respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]){//存在这个方法NSLog(@"iOS7以上");}__IPHONE_OS_VERSION_MIN_REQUIRED,__IPHONE_OS_VERSION_MAX_ALLOWED,__IPHONE_11_0这三个宏个人感觉是比较坑的,刚开始看这个宏感觉就是判断iOS的最大使用版本、最小版本的,可是用上才发现完全是错的。这三个宏是在编译期间就已经确定好的,__IPHONE_OS_VERSION_MIN_REQUIRED这个宏是你在xcode中设置的Develoymenttarget,也就是你的app能够运行的最小的iOS版本。__IPHONE_OS_VERSION_MAX_ALLOWED这个宏就是你的xcode支持的最大iOS版本,__IPHONE_11_0这个宏也是跟xcode版本有关。所以这三个宏都是在编译期间就已经确定好了的,所以不能用来动态判断你的app运行在哪个系统版本的iOS上。这一点大家一定要弄清,否则就容易被坑。以上就是我所了解到的判断系统版本的内容,有什么不对的地方欢迎大家指出。参考链接:
http://www.wenghengcong.com/2016/12/iOS-%E7%89%88%E6%9C%AC%E5%85%BC%E5%AE%B9/http://blog.csdn.net/Cloudox_/article/details/53408693如何回退ios版本
恢复设备以移除开发者Beta版
要立即移除开发者Beta版,您需要抹掉并恢复您的设备。之后,如果您有归档的备份,则可以通过这个备份再次设置您的设备。
请注意,使用Beta版软件时创建的备份可能与旧版iOS不兼容。如果您未曾使用当前版iOS制作过较久的备份,则可能无法使用最新备份来恢复设备。
检查您使用的是不是最新版本的iTunes。将您的设备连接到电脑,然后按照以下说明将设备置于恢复模式:在配备面容ID的iPad上:按下调高音量按钮再快速松开。按下调低音量按钮再快速松开。按住顶部按钮,直到设备开始重新启动。继续按住顶部按钮,直到设备进入恢复模式。对于iPhone8或更新机型:按下再快速松开调高音量按钮。按下调低音量按钮再快速松开。然后,按住侧边按钮,直到您看到恢复模式屏幕。对于iPhone7、iPhone7Plus 或iPodtouch(第7代):同时按住睡眠/唤醒按钮和调低音量按钮。看到Apple标志时,不要松开按钮。继续按住这两个按钮,直到您看到恢复模式屏幕。对于iPhone6s及更早机型、配备主屏幕按钮的iPad或iPodtouch(第6代或更早机型):同时按住睡眠/唤醒按钮和主屏幕按钮。看到Apple标志时,不要松开按钮。继续按住这两个按钮,直到您看到恢复模式屏幕。在“恢复”选项出现点按它。这样会抹掉设备并安装最新的非Beta版iOS。 等待恢复完成。系统提示时,输入您的AppleID和密码,这会停用激活锁。如果恢复流程无法完成,请了解该怎么做。恢复完成后,您可以从已归档的iTunes备份来设置您的设备,这个备份应该来自较低版本的iOS。
如果您将装有iOSBeta版的设备备份到iCloud或iTunes,则备份无法在较低版本的iOS中使用。例如,如果您从iOS12Beta版回到iOS11.4.1,则使用iOSBeta版时创建的备份将无法恢复。应使用您在安装iOSBeta版前所做的备份进行恢复。