到了2017.1.1,所有提交的app不允許使用 NSAllowsArbitraryLoads = Yes 來(lái)繞過(guò)ATS的限制,你必須設(shè)置為NO。
如果你的app有著異常復(fù)雜的業(yè)務(wù)邏輯其障,手動(dòng)排查找出所有的HTTP請(qǐng)求是非常費(fèi)時(shí)費(fèi)力的。
于是ATS自動(dòng)化呼之欲出了涂佃。
下面記載了一些ATS自動(dòng)化遇到的一些問(wèn)題
定義問(wèn)題
功能驗(yàn)證時(shí)能直接體驗(yàn)到功能的可用與否(或是網(wǎng)頁(yè)打不開(kāi)励翼、頭像拉取失敗)辜荠。所以一種可取的方案就是打開(kāi)ATS開(kāi)關(guān)汽抚,功能驗(yàn)證的測(cè)試同學(xué)們測(cè)試用例時(shí)輔助發(fā)現(xiàn)ATS問(wèn)題。
但自動(dòng)化怎么定義問(wèn)題伯病?
App日志
如果開(kāi)發(fā)們?cè)谧鯤TTP請(qǐng)求時(shí)的completion回調(diào)里打印了error造烁,那我們還是非常方便的從日志log提取問(wèn)題的。(NSLog會(huì)直接打到控制臺(tái))午笛。但如果開(kāi)發(fā)沒(méi)有打印error惭蟋,那這部分問(wèn)題就無(wú)法發(fā)現(xiàn)了
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.}
系統(tǒng)日志
當(dāng)然系統(tǒng)還是能覺(jué)察到HTTP請(qǐng)求的
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并不能看到請(qǐng)求的URL
- App啟動(dòng)后如果系統(tǒng)發(fā)現(xiàn)HTTP請(qǐng)求,那只會(huì)打印一次第一條log(即...has blocked a cleartest...)
- 而第二條(即The resource could not...)只會(huì)在App安裝后第一次啟動(dòng)發(fā)生HTTP請(qǐng)求時(shí)打出药磺,以后再也不出現(xiàn)了
換句話說(shuō)告组,系統(tǒng)在一個(gè)進(jìn)程里面發(fā)現(xiàn)第一個(gè)HTTP請(qǐng)求后會(huì)打印log1,之后都不會(huì)打印log1(除非強(qiáng)殺進(jìn)程重新啟動(dòng)app癌佩,當(dāng)然這是另外一個(gè)進(jìn)程了)木缝。打印log2,同時(shí)標(biāo)記對(duì)應(yīng)App围辙,被標(biāo)記的App不會(huì)再打印log2氨肌。
怎么辦
結(jié)合代碼搜索,和App日志酌畜,我們能發(fā)現(xiàn)大部分的問(wèn)題怎囚。當(dāng)然,剩下的那部分,我也暫時(shí)想不到辦法了恳守。有高人有大法望留言告知我考婴。