原文地址:http://blog.csdn.net/xyxjn/article/details/40425895

部分参考http://www.cnblogs.com/ios8/p/ios-version-com.html

下面举个简单的例子来说明在iOS7.0和iOS6.1(以及更低版本)之间的适配问题(用的是xcode5.0,里边有6.1和7.0两个版本的sdk)

新建一个工程,默认的development target,base sdk以及模拟器的版本都是7.0,在AppDelegate中的didFinishLaunchingWithOptions方法里写下

[objc] view plaincopy
  1. self.window.tintColor = [UIColor redColor];

然后运行,这样是没有任何错误的。接下来将development target,base sdk以及模拟器的版本都改成6.1(注意默认的xcode是没有6.1的sdk的,需要自己另外导入)。然后运行,就会报错:

也就是说tintColor属性在iOS6.1中根本就没有,在编译时候就会出错。这时候如下加上判断语句也是没有用的,照样报错(预处理,编译,运行的问题这里不再废话)

[objc] view plaincopy
  1. if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
  2. self.window.tintColor = [UIColor redColor];
  3. }

遇见这种情况只能加上预处理语句,这样写:

[objc] view plaincopy
  1. <del>#ifdef __IPHONE_7_0
  2. if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
  3. self.window.tintColor = [UIColor redColor];
  4. }
  5. #endif</del>
[objc] view plaincopy
  1. #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
  2. if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
  3. self.window.tintColor = [UIColor redColor];
  4. }
  5. #endif
[objc] view plaincopy
  1. 其中__IPHONE_OS_VERSION_MAX_ALLOWED定义在usr/include/AvailabilityInternal.h中
  2. #ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
  3. /* make sure a default max version is set */
  4. #ifndef __IPHONE_OS_VERSION_MAX_ALLOWED
  5. #define __IPHONE_OS_VERSION_MAX_ALLOWED     __IPHONE_7_0
  6. #endif
  7. /* make sure a valid min is set */
  8. #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_2_0
  9. #undef __IPHONE_OS_VERSION_MIN_REQUIRED
  10. #define __IPHONE_OS_VERSION_MIN_REQUIRED    __IPHONE_2_0
  11. #endif
  12. 。。。。
  13. #endif
  14. 注意需要加入头文件#import </usr/include/Availability.h>
  15. 这样编译通过就不会报错了……这是因为在sdk6.1下的usr/include下边有一个Availability.h文件,里边定义了一大堆宏,其中关于iphone的有
  16. #define __IPHONE_2_0     20000
  17. #define __IPHONE_2_1     20100
  18. #define __IPHONE_2_2     20200
  19. #define __IPHONE_3_0     30000
  20. #define __IPHONE_3_1     30100
  21. #define __IPHONE_3_2     30200
  22. #define __IPHONE_4_0     40000
  23. #define __IPHONE_4_1     40100
  24. #define __IPHONE_4_2     40200
  25. #define __IPHONE_4_3     40300
  26. #define __IPHONE_5_0     50000
  27. #define __IPHONE_5_1     50100
  28. #define __IPHONE_6_0     60000
  29. #define __IPHONE_6_1     60100
  30. #define __IPHONE_NA      99999  /* not available */

而sdk7.0里边多了一行

[objc] view plaincopy
  1. #define __IPHONE_7_0 70000

iOS8当然也是一样的道理

除此之外,当使用framework或者.a的时候需要注意

因为在编译framework或者.a的时候是依赖当时编译的环境决定的,如使用iOS6的sdk可以将framework或者.a顺利编译通过,但是在真正生成app的时候需要保证编译app时的sdk和编译framework或者.a的sdk是一致的,且同时需要加入运行时判断([[[UIDevice currentDevice] systemVersion] floatValue]那个)

说明:

1、如果是使用低版本sdk编译的(如iOS6),将最终的应用安装至高版本的设备上(iOS7的系统),此时应该不会出现问题,因为iOS7兼容iOS6,但是无法使用iOS7特有的新功能,因为代码被屏蔽了。

2、如果是使用高版本sdk编译的(如iOS7),将最终的应用安装至低版本的设备上(iOS6的系统),此时如果不加入运行时判断就会出现问题(可能是crash)。因为应用本身是用iOS7编译的,并使用iOS7才有的新功能,而设备并不支持iOS7。

写的可能有点乱了,纯自己记录用的

iOS不同版本适配问题相关推荐

  1. iOS不同版本适配问题(#ifdef __IPHONE_7_0)

    部分参考http://www.cnblogs.com/ios8/p/ios-version-com.html 下面举个简单的例子来说明在iOS7.0和iOS6.1(以及更低版本)之间的适配问题(用的是 ...

  2. 深入理解HTTPS及在iOS系统中适配HTTPS类型网络请求(上)

    2019独角兽企业重金招聘Python工程师标准>>> 深入理解HTTPS及在iOS系统中适配HTTPS类型网络请求 一.引言 本篇博客主要讨论如何在客户端与服务端之间进行HTTPS ...

  3. ios系统升级记录适配篇

    以下记录的是,我在学习中的一些学习笔记,这篇笔记是自己学习的学习大杂烩,主要用于记录,方便查找 系统系列 系统发布时间 ios系统版本 ios 15系列 ios 15.2 ios 15.1 2021年 ...

  4. H5:IOS刘海屏适配

    场景 app部分页面使用H5混合开发,框架使用的是Vue.页面基本在Android上展示正常,在ios(iPhone 7.iPhone X.iPhone 11)上会出现两个问题: (1) 顶部标题栏即 ...

  5. Android应用篇 - 6.0 到 9.0 的版本适配

    这篇文章主要来讲讲 15 年后发布的 Android 6.0 - 9.0 的版本适配. Android 6.0/Android M (API 23) 1. 新特性 锁屏下语音搜索 用户可以直接在锁屏状 ...

  6. 关于IOS的屏幕适配(iPhone)——资源适配

    IOS的屏幕适配几乎不需要大量的代码操作,更多的时间我们只是动动鼠标选择一下就搞定.可以苹果在这方面做的还是比较人性的,解放了开发者. 首先来说说Iphone这几种屏(由于最近做的是iPhone AP ...

  7. html 判断是苹果几个版本号,这是我第一次遇到判断ios系统版本的问题

    一如前端深似海,学习学习再学习,这是我第一次遇到判断ios系统版本的问题 h5工作过程中一旦牵扯到判断设备的需求,那么自然而然就应该想到 window.navigator.userAgent();// ...

  8. ios 获取固件版本_觉得iOS测试版本BUG太多?系统降级试一试?

    对于那些喜欢折腾手机,尝鲜新功能的小伙伴来说,一但iOS有新的测试版本出来就会更新,但iOS 系统的小更新很是频繁,经常更新难免会出问题,尤其是较大版本间的升级(比如iOS12到iOS13),会让很多 ...

  9. Android8.0及以上系统 WiFi热点 版本适配

    代码地址如下: http://www.demodashi.com/demo/13907.html ###一.准备工作 开发环境:  jdk1.8  AS(3.0.1) 运行环境:  华为V10(And ...

最新文章

  1. 深入解析CSS样式层叠权重值
  2. 离散数学 关系和有向图
  3. 解密回声消除技术之一(理论篇)
  4. python代码模块与模块之间空1行_Day006|Python语法基础
  5. 南京大学获赠1.2亿!
  6. oracle求数据关联度,关于数据挖掘关联规则的Oracle实现
  7. ifconfig没有ip地址_没有宽带也可以实现全家上网
  8. 微软十二月补丁星期二修复58个漏洞
  9. 服务器cpu支持DDR4,迟来的惊喜 AMD新处理器支持DDR4内存
  10. mysql 同义词_数据库中的同义词synonym
  11. 沙盘模拟软件_三连冠!我校学子连续三年蝉联全国大学生沙盘模拟经营大赛福建省决赛一等奖...
  12. 配电室环境监控系统技术方案
  13. 目标检测-ImageAI从安装到使用详解
  14. 微信跳转浏览器html5,微信跳转浏览器或提示手机端打开HTML代码 最新
  15. remix os显卡linux,Remix OS 系统 PC版下载和评测 | Remix OS是什么系统_什么值得买
  16. 蓝鲸作业流程编排--参数使用
  17. iOS内存管理——alloc/release/dealloc方法的GNUstep实现与Apple的实现
  18. 小猿圈python之练习小例子
  19. 功劳是老板的、钱财是子女的、身体是自己的...
  20. 【华为校园招聘】2019春实习模拟试卷 软件题demo

热门文章

  1. oracle静默安装快吗,Oracle静默安装简要的注意事项
  2. qq数据泄露_有哪些良好的上网习惯,可以避免隐私泄露?
  3. Python代码—测试
  4. mysql安装显示3534_MySQL安装成功之后启动错误 3534、28000和简单使用
  5. java图片去掉文字,Java 移除html,图片 链接转文字
  6. format函数_畅游人工智能之海 | Keras教程之后端函数(一)
  7. 156 13.67用matlab答案,MATLAB习题答案
  8. matlab求两向量夹角_Matlab-自动化控制系统设计4频域分析
  9. android handler内存,Android handler之内存泄露原因揭示
  10. 使用screen的时候出现了如下错误: Cannot open your terminal '/dev/pts/0' - please check.