ATS自动化

到了2017.1.1,所有提交的app不允许使用 NSAllowsArbitraryLoads = Yes 来绕过ATS的限制,你必须设置为NO。

Screen Shot 2016-12-20 at 8.50.08 PM.png

如果你的app有着异常复杂的业务逻辑,手动排查找出所有的HTTP请求是非常费时费力的。
于是ATS自动化呼之欲出了。
下面记载了一些ATS自动化遇到的一些问题

定义问题

功能验证时能直接体验到功能的可用与否(或是网页打不开、头像拉取失败)。所以一种可取的方案就是打开ATS开关,功能验证的测试同学们测试用例时辅助发现ATS问题。
但自动化怎么定义问题?

App日志

如果开发们在做HTTP请求时的completion回调里打印了error,那我们还是非常方便的从日志log提取问题的。(NSLog会直接打到控制台)。但如果开发没有打印error,那这部分问题就无法发现了

Screen Shot 2016-12-20 at 8.56.44 PM.png
Dec 20 20:57:50 TKMB161106H9 TestATS[3193] <Notice>: Request failed: Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection." UserInfo={NSUnderlyingError=0x170058ed0 {Error Domain=kCFErrorDomainCFNetwork Code=-1022 "(null)"}, NSErrorFailingURLStringKey=http://www.baidu.com/, NSErrorFailingURLKey=http://www.baidu.com/, NSLocalizedDescription=The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.}

系统日志

当然系统还是能觉察到HTTP请求的

Dec 20 20:31:46 TKMB161106H9 TestATS(CFNetwork)[3160] <Notice>: App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
Dec 20 20:31:46 TKMB161106H9 TestATS(CoreFoundation)[3160] <Debug>: Bundle: CFBundle 0x100410840 </System/Library/Frameworks/CFNetwork.framework> (framework, loaded), key: Err-1022, value: The resource could not be loaded because the App Transport Security policy requires the use of a secure connection., table: Localizable, localizationName: (null), result: The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.

但遗憾的是:

  • 这些log并不能看到请求的URL
  • App启动后如果系统发现HTTP请求,那只会打印一次第一条log(即...has blocked a cleartest...)
  • 而第二条(即The resource could not...)只会在App安装后第一次启动发生HTTP请求时打出,以后再也不出现了
    换句话说,系统在一个进程里面发现第一个HTTP请求后会打印log1,之后都不会打印log1(除非强杀进程重新启动app,当然这是另外一个进程了)。打印log2,同时标记对应App,被标记的App不会再打印log2。

怎么办

结合代码搜索,和App日志,我们能发现大部分的问题。当然,剩下的那部分,我也暂时想不到办法了。有高人有大法望留言告知我。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,660评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,231评论 25 708
  • 很可能你的应用是与一个支持HTTPS传输数据的服务器交互,但是并没有使用TLS 1.2或更高。在这种情况下,你定义...
    Www刘阅读 3,272评论 0 5
  • 一部怎样的泡面番能持续火爆3个月,并且彻底改变了人们对更新频率的期待?视频平台与内容生产者又该怎样利用“求新心理”...
    敦叔阅读 879评论 7 4
  • 优秀的人犹如一本好书,越读越厚。 浅薄的人犹如一潭清水,一眼到底。 淡定的人犹如一口古钟,沉稳刚健。 完美的人犹如...
    固本阅读 224评论 0 0

友情链接更多精彩内容