关于ATS问题

ATS (App Transport Security) WWDC2016中苹果官方提到,从2017年1月1日起,上线的app必须经过苹果对app通信安全(ATS)的审核,否则可能会被拒。

ATS早在2015年就已经提出来,只是我们常规的处理是在Info.plist 中添加 NSAppTransportSecurity 字典并且将 NSAllowsArbitraryLoad 设置为 YES 来禁用 ATS。

审核问题

目前ATS配置中下面的key、value出现时苹果审核时会要求提供合理的解释:

  • NSAllowsArbitraryLoads = YES
  • NSExceptionAllowsInsecureHTTPLoads = YES
  • NSAllowsArbitraryLoadsInWebContent = YES
  • NSAllowsArbitraryLoadsForMedia = YES
  • NSExceptionMinimumTLSVersion,版本号小于1.2时

解决方案

  1. 为了兼容 iOS9,设置 NSAllowsArbitraryLoads 为 YES;
  2. 为了 iOS10 更容易审核过,设置NSAllowsArbitraryLoadsInWebContent YES;
  3. 对于 API 请求基本上是必须使用 HTTPS 的,某些必须使用http的url如云存储中的资源,特别是如果自己可以管理服务器的话。如果使用的是第三方的 API,而他们没有提供 HTTPS 支持的话,需要在 NSExceptionDomains 中进行添加白名单。;
  4. 如果你的 app 只支持 iOS 10,并且有用户可以自由输入网址进行浏览的功能,或者是在线视频音频播放功能的话,只加入 NSAllowsArbitraryLoadsInWebContent 或/和 NSAllowsArbitraryLoadsForMedia,并且将组件换成 UIWebView 或 WKWebView,以及 AVFoundation 中的 player 就可以了。除了 WKWebKit 以外,另外一个访问网页的选择是使用 SFSafariViewController。因为其实 SFSafariViewController 就是一个独立于 app 的 Safari 进程,所以它完全不受 ATS 的限制。

踩坑

虽官网ATS时间延后,但是我在年初接入处理时,未重视组件内请求接口导致了在iOS 10 URLSession不可用的问题;对于第三方API和组件化的模块网络接口一定要注意!!!

关于ATS问题_第1张图片
如图
相关资料

Getting Ready for ATS Enforcement in 2017

你可能感兴趣的:(关于ATS问题)