iOS10新特性及Xcode8兼容适配资料整理
iOS10新特性及Xcode8兼容适配资料整理
兼容iOS10资料整理
一、证书管理
- Xcode8打开工程后,比较明显的就是下图了,这个是苹果的新特性,可以帮助我们自动管理证书。建议勾选这个Automatically manage signing:
- Xcode未设置开发者账号情况:
- Xcode的偏好设置中,添加苹果账号即可。
- 设备机器未添加进开发者的Device的情况:
3、正常情况下的截图:
二、Notification(通知)
iOS10中将通知相关的API都统一到了UserNotifications.framework框架中,在此基础上很多用户定义的通知,并且可以捕捉到各个通知状态的回调。以前通知的概念是:大家想接受的提前做好准备,然后一下全两分发,没收到也不管了,也不关心发送者,现在的用户通知做成了类似于网络请求,先发一个request得到response的流程,还封装了error,可以在各个状态的方法中做一些额外的操作,并且能获得一些字段,比如发送者之类的.这个功能的头文件是:#import <UserNotifications/UserNotifications.h>
主要有以下文件:
相关资料:https://onevcat.com/2016/08/notification/
三、ATS的问题
WWDC 15 提出的 ATS (App Transport Security) 是 Apple 在推进网络通讯安全的一个重要方式。iOS9 中默认非HTTPS的协议是被禁止的,当然,因为这样的推进影响面非常广,作为缓冲,解决方案是我们可以在info.plist文件中添加AppTransportSecuritySettings字典,将NSAllowsArbitraryLoads设置为YES来禁用ATS。
不过iOS10从2017年1月1日起苹果不允许我们通过这个方法跳过ATS,也就是说强制我们使用HTTPS,苹果App Store中的所有App都必须启用 App Transport Security(ATS)安全功能。如果不这样的话提交APP可能会被拒绝。
App Transport Security(应用程序安全传输),简称 ATS,是苹果在 iOS 9 中首次推出的一项隐私安全保护功能,启用ATS后,它会屏蔽明文HTTP资源加载,强制App通过HTTPS连接网络服务,通过传输加密保障用户数据安全。ATS要求服务器必须支持传输层安全(TLS)协议1.2以上版本;证书必须使用SHA256或更高的哈希算法签名;必须使用2048位以上RSA密钥或256位以上ECC算法等等,不满足条件的证书,ATS都会拒绝连接。强制开启ATS体现了苹果一贯的隐私保护态度。
开发者需要HTTPS证书,可以到沃通CA申请,沃通CA还推出了免费的https证书,兼容苹果所有设备。
这方面的相关规定和几个事实如下:
- 默认情况下你的app要可以访问加密足够强的HTTPS内容。这对所有的网络请求都有效,包括NSURLSession,UIWebView以及WKWebView等。
- 你依然可以添加NSAllowsArbitraryLoads为YES来禁用ATS,不过如果这样做的话,需要在提交app时进行说明,为什么需要访问非HTTPS内容,一般来说,可能类似浏览器类的app比较容易通过。
- 相比于使用NSAllowsArbitraryLoads将全部HTTP内容开放,选择使用NSExceptionDomains来针对特定的域名开放HTTP应该相对更容易过审核。
- NSExceptionDomains设置白名单的方式来针对特定的域名开放HTTP内容来通过审核。可以简单理解成,把不支持https协议的接口设置成http的接口。
1)在项目info.plist中添加一个Key:App Transport Security Settings,类型为
Dictionary;
- )在其内添加一个Key: Exception Domains,类型为Dictionary;
3)在Exception Domains内添加要支持的域,其中域作为Key,类型为Dictionary;
- )每个域下面需要设置3个属性:类型为Boolean;
NSIncludesSubdomains YES
NSExceptionRequiresForwardSecrecy NO
NSExceptionAllowsInsecureHTTPLoads YES
- HTTP,也是需要设置的图片的域。
- 对于网页浏览和视频播放的行为,iOS10中新加入了NSAllowsArbitraryLoadsInWebContent键。通过将它设置为YES,可以让你的app中的WKWebView和使用AVFoundation播放的在线视频不受ATS的限制。
- API 请求,基本上是必须使用 HTTPS 的,特别是如果自己可以管理服务器的话。可能需要后端尽快升级到 HTTPS。
四、iOS10 隐私权限的配置
iOS10开始对隐私权限的数据保护更加严格,如果不设置会直接 崩溃。简单的说就是访问用户数据前都需要先在info.plist文件中声明,添加对应的key-value。这些用户数据包括:
iOS10之前,只需要获取位置时添加配置,现在更严格了,比如调用相册权限,也需要在info.plist中配置privacy.
这些key的名字Xcode 8中已经自动补全。添加一个属性后,输入Privacy后会出现自动提示:
后面填的string会在弹出用户允许时展示在描述里,如果空着提交AppStore时会拒绝。列举几个:
五、Xcode8屏蔽杂乱无章的logs
更新Xcode8之后,新建立工程,都会打印一些无意义的乱七八糟的log输出,这应该是Xcode8的问题,解决方法是设置OS_ACTIVITY_MODE:disable
六、UIStatusBar方法过期
在iOS10中,如果还使用以前设置UIStatusBar类型或者控制隐藏还是显示的方法,会报警告,方法过期,需要进行适配,要想修改UIStatusBar的样式或者状态使用下图所示的属性或者方法:
七、UICollectionViewCell的优化
随着开发者对UICollectionView的信赖,项目中用到的地方比较多,但还是存在一些问题,比如卡顿、加载慢等。iOS10对UICollectionView进一步的优化:
iOS 10 之前UICollectionViewCell的生命周期是这样的:
- 1.用户滑动屏幕,屏幕外有一个cell准备加载进来,把cell从reusr队列拿出来,然后调用prepareForReuse方法,在这个方法里面,可以重置cell的状态,加载新的数据;
- 2.继续滑动,就会调用cellForItemAtIndexPath方法,在这个方法里面给cell赋值模型,然后返回给系统;
- 3.当cell马上进去屏幕的时候,就会调用willDisplayCell方法,在这个方法里面我们还可以修改cell,为进入屏幕做最后的准备工作;
- 4.执行完willDisplayCell方法后,cell就进去屏幕了.当cell完全离开屏幕以后,会调用didEndDisplayingCell方法.
iOS 10 UICollectionViewCell的生命周期是这样的:
- 1.用户滑动屏幕,屏幕外有一个cell准备加载进来,把cell从reusr队列拿出来,然后调用prepareForReuse方法,在这里当cell还没有进去屏幕的时候,就已经提前调用这个方法了,对比之前的区别是之前是cell的上边缘马上进去屏幕的时候就会调用该方法,而iOS 10 提前到cell还在屏幕外面的时候就调用;
- 2.在cellForItemAtIndexPath中创建cell,填充数据,刷新状态等操作,相比于之前也提前了;
- 3.用户继续滑动的话,当cell马上就需要显示的时候我们再调用willDisplayCell方法,原则就是:何时需要显示,何时再去调用willDisplayCell方法;
- 4.当cell完全离开屏幕以后,会调用didEndDisplayingCell方法,跟之前一样,cell会进入重用队列.
在iOS 10 之前,cell只能从重用队列里面取出,再走一遍生命周期,并调用cellForItemAtIndexPath创建或者生成一个cell.
在iOS 10 中,系统会把cell保存一段时间,也就是说当用户把cell滑出屏幕以后,如果又滑动回来,cell不用再走一遍生命周期了,只需要调用willDisplayCell方法就可以重新出现在屏幕中了.
iOS 10 中,系统是一个一个加载cell的,以前是一行一行加载的,这样就可以提升很多性能. - iOS 10 新增加的Pre-Fetching预加载
这个是为了降低UICollectionViewCell在加载的时候所花费的时间,在 iOS 10 中,除了数据源协议和代理协议外,新增加了一个UICollectionViewDataSourcePrefetching协议,这个协议里面定义了两个方法:
– (void)collectionView:(UICollectionView *)collectionView prefetchItemsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths NS_AVAILABLE_IOS(10_0); -(void)collectionView:(UICollectionView *)collectionView cancelPrefetchingForItemsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths NS_AVAILABLE_IOS(10_0);
在ColletionView prefetchItemsAt indexPaths这个方法是异步预加载数据的,当中的indexPaths数组是有序的,就是item接收数据的顺序;
CollectionView cancelPrefetcingForItemsAt indexPaths这个方法是可选的,可以用来处理在滑动中取消或者降低提前加载数据的优先级.
注意:这个协议并不能代替之前读取数据的方法,仅仅是辅助加载数据.
Pre-Fetching预加载对UITableViewCell同样适用.
八、iOS10 UIColor新增方法
官方文档中说:大多数core开头的图形框架和AVFoundation都提高了对扩展像素和宽色 域色彩空间的支持.通过图形堆栈扩展这种方式比以往支持广色域的显示设备更加容易。现在对UIKit扩展可以在sRGB的色彩空间下工作,性能更好,也可 以在更广泛的色域来搭配sRGB颜色.如果你的项目中是通过低级别的api自己实现图形处理的,建议使用sRGB,也就是说在项目中使用了RGB转化颜色 的建议转换为使用sRGB,在UIColor类中新增了两个api:
- (UIColor *)initWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);
+ (UIColor *)colorWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);
因为之前我们都是用RGB来设置颜色,在iOS10官方建议我们使用sRGB,因为它性能更好,色彩更丰富。
九、UITextField
在iOS 10 中,UITextField新增了textContentType字段,是UITextContentType类型,它是一个枚举,作用是可以指定输入框的类型,以便系统可以分析出用户的语义.是电话类型就建议一些电话,是地址类型就建议一些地址.可以在#import <UIKit/UITextInputTraits.h>文件中,查看textContentType字段,有以下可以选择的类型:
十、UIRefreshControl的使用
在iOS10中,UIScrollView新增了refreshControl属性,只要继承了UIScrollView那么就支持刷新功能:
十一、iOS10判断系统版本正确方法
判断系统版本使我们经常用到的,尤其是现在都有可能需要适配iOS10,那么问题就出现了:
substringToIndex:1在iOS 10 会被检测成 iOS 1了,所有判断系统版本最好还是用后面的两种方法。建议大家使用最后一中方法!
十二、Xcode8插件不能用的问题
参考:http://t.cn/RcSHhSz
十三、iOS10 项目中有的文字显示不全问题
用Xcode8和Xcode7.3分别测试如图:
创建一个Label然后让它自适应大小,字体大小都是17最后输出的宽度是不一样的,经过测试,英文字母没有问题,只有汉字有问题。目前只有一个一个修改控件解决这个问题,暂时没有其他好办法来解决。
iOS10新特性及Xcode8兼容适配资料整理相关推荐
- iOS10新特性,适配教程,XCode8新特性
iOS10 新特性 ###SiriKit SiriKit的功能非常强大,支持音频.视频.消息发送接收.搜索照片.预订行程.管理锻炼等等.在用到此服务时,siri会发送Intent对象,里面包括用户的请 ...
- 我所感兴趣的iOS10新特性
###SiriKit Siri API 的开放自然是 iOS 10 SDK 中最激动人心也是亮眼的特性.SiriKit 为我们提供一全套从语音识别到代码处理,最后向用户展示结果的流程.Apple 加入 ...
- [IOS]IOS10新特性以及适配点(转)
iOS 10 新特性以及适配点 SiriKit 所有第三方应用都可以用Siri,支持音频.视频.消息发送接收.搜索照片.预订行程.管理锻炼等 Proactive Suggestions 系统预先建议 ...
- iOS10 新特性-新功能,以及ReplayKit库
iOS的10.0 本文总结了iOS的10,运行于目前推出iOS设备推出的主要开发者相关的功能. iOS版10引入了新的方法来增加您的应用程序通过帮助系统参与在适当的时候建议你的应用程序给用户.如果你在 ...
- iOS10新特性之SiriKit
在6月14日凌晨的WWDC2016大会上,苹果提出iOS10是一次里程碑并且推出了十个新特性,大部分的特性是基于iPhone自身的原生应用的更新,具体的特性笔者不在这里再次叙述,请看客们移步WWDC2 ...
- Java9 jar兼容_java9新特性-6-多版本兼容jar包
1.官方Feature 2.使用说明 当一个新版本的Java出现的时候,你的库用户要花费数年时间才会切换到这个新的版本.这就意味着库得去向后兼容你想要支持的最老的Java版本(许多情况下就是Java ...
- Android 11 新特性和API兼容
这个文档主要产品层面,新的特性..兄弟blog,Android11的Api变化和迁移变化. 1,新特性 1.1,设备控件 Android 11 包含一个新的 ControlsProviderServi ...
- iOS10新特性及开发者要注意什么
当晚看了WWDC2016直播,第二天我安装了iOS10试用版,我们发现变得谨慎而开放的苹果在新一版四大平台系统中展示了很多变化,当然重中之重还是伟大的iOS,看这架势苹果是要做一系列行业平台了.通过试 ...
- iOS开发-iOS10新特性及开发者主要注意点
看了WWDC2016直播,我们发现变得谨慎而开放的苹果在新一版四大平台系统中展示了很多变化,当然重中之重还是伟大的iOS.通过试用iOS10beta版,除了长大了的更强大的Siri主要感受到iMess ...
最新文章
- 智能合约语言Solidity Solidity API
- RESTful Web 服务 - 寻址
- HTML/CSS——网页SVG ICON(小图标)解决方案
- mysql 压缩版安装
- 存储过程 SQL server(01)
- 【kafka】kafka 零拷贝 技术
- ffmpeg ffprobe查看视频文件编码格式
- Spotfire 筛选器类型修改
- 淘宝新店铺如何打造爆款
- apicloud——云编译失败
- JAVA生成纯色背景图-自定义大小-自定义颜色
- 嵌入式学习笔记(一)嵌入式操作系统测试
- excel文件导出、下载的响应类型设置
- 英文实体识别stanrdfold
- 图书管理系统java+Oracle
- 「更快!更爽!」吹水新闻2.0
- Tushare使用分享(二)
- 开水果店前景,水果店发展前景
- C++ free指针时的异常
- 如何查看网页上的密码