-
部分参考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方法里写下
1self.window.tintColor = [UIColor redColor]
然后运行,这样是没有任何错误的。接下来将development target,base sdk以及模拟器的版本都改成6.1(注意默认的xcode是没有6.1的sdk的,需要自己另外导入)。然后运行,就会报错:也就是说tintColor属性在iOS6.1中根本就没有,在编译时候就会出错。这时候如下加上判断语句也是没有用的,照样报错(预处理,编译,运行的问题这里不再废话)
123if
([[[UIDevice currentDevice] systemVersion] floatValue] >=
7.0
) {
self.window.tintColor = [UIColor redColor];
}
12345#ifdef __IPHONE_7_0
if
([[[UIDevice currentDevice] systemVersion] floatValue] >=
7.0
) {
self.window.tintColor = [UIColor redColor];
}
#endif
注意需要加入头文件
1#
import
123456789101112131415#define __IPHONE_2_0
20000
#define __IPHONE_2_1
20100
#define __IPHONE_2_2
20200
#define __IPHONE_3_0
30000
#define __IPHONE_3_1
30100
#define __IPHONE_3_2
30200
#define __IPHONE_4_0
40000
#define __IPHONE_4_1
40100
#define __IPHONE_4_2
40200
#define __IPHONE_4_3
40300
#define __IPHONE_5_0
50000
#define __IPHONE_5_1
50100
#define __IPHONE_6_0
60000
#define __IPHONE_6_1
60100
#define __IPHONE_NA
99999
/* not available */
1#define __IPHONE_7_0
60100
除此之外,当使用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不同版本适配问题(#ifdef __IPHONE_7_0)
最新推荐文章于 2019-10-17 10:09:54 发布