苹果 iOS10 新特性(一)
一、系统判断方法失效:
在项目中,当需要判断系统版本的话,不要使用下面的方法:
它会永远返回 NO,substringToIndex:1在iOS 10 会被检测成 iOS 1,应使用下面的方法:
Objective-C 中这样写:
或是这样:
或是这样:
有时候会缺少一些常量,NSFoundationVersionNumber是在NSObjCRuntime.h中定义的,在iOS 10(Xcode 8)中,苹果补充了缺少的数字,设置有未来的版本。
Swift中这样写:
或是这样:
二、UIColor的问题
iOS 官方文档指出:大多数core开头的图形框架和AVFoundation都提高了对扩展像素和宽色域色彩空间的支持.通过图形堆栈扩展这种方式比以往支持广色域的显示设备更加容易。现在对UIKit扩展可以在sRGB的色彩空间下工作,性能更好,也可以在更广泛的色域来搭配sRGB颜色.如果你的项目中是通过低级别的api自己实现图形处理的,建议使用sRGB,也就是说在项目中使用了RGB转化颜色的建议转换为使用sRGB,在UIColor类中新增了两个api:
三、隐私数据的访问问题
如果项目中访问了隐私数据,比如:通讯录,相册等,并在Xcode8中打开编译的话,都会crash掉。这是由于iOS对用户的安全和隐私的增强,在申请很多私有权限的时候都要添加相应的描述,但在使用Xcode 8之前的Xcode还是使用系统的权限通知框。要想解决这个问题,只需要在info.plist添加NSContactsUsageDescription的key, value自己随意填写就可以。
如果不起作用,可以请求后台权限,类似这样:
或者在Xcode里选中当前的target,选择Capabilities,找到Background Modes,打开它,在里面选择对应权限
四、ATS的问题
1.在iOS 9的时候,默认非HTTS的网络是被禁止的,我们可以在info.plist文件中添加NSAppTransportSecurity字典,将NSAllowsArbitraryLoads设置为YES来禁用ATS;
2.从2017年1月1日起,,所有新提交的 app 默认不允许使用NSAllowsArbitraryLoads 来绕过ATS的限制,默认情况下你的 app 可以访问加密足够强的(TLS V1.2以上)HTTPS内容;
3.可以选择使用NSExceptionDomains设置白名单的方式对特定的域名开放HTTP内容来通过审核,比如说你的应用集成了第三方的登录分享SDK,可以通过这种方式来做,下面以新浪SDK作为示范(Source Code 模式下):
4.在iOS 10 中info.plist文件新加入了NSAllowsArbitraryLoadsInWebContent`` 键,允许任意web`页面加载,同时苹果会用 ATS 来保护你的app;
5.安全传输已经不再支持SSLv3, 建议停止使用SHA1和3DES算法;