
妥協(xié)?
時間臨近2017年1月1日,對于其他開發(fā)者來說,這是再普通不過的元旦。然而對于我等iOS小民而言,怕要徹夜難眠了。跟領(lǐng)導說:“老大,元旦之后,蘋果不讓“裸奔”了”,領(lǐng)導總是一副不屑的眼神:“等等看,車到山前自有路,總會有辦法的”。
好打臉,這下好了,12月21日,蘋果發(fā)文,蘋果APP接入HTTPS截止日期延遲,具體日期待定......
好吧!領(lǐng)導,您是對的!

[鏈接地址:Supporting App Transport Security](https://developer.apple.com/news/?id=12212016b)
看到這則消息,很多人都在為還能繼續(xù)“裸奔”而歡呼雀躍,自欺欺人的以為這是蘋果妥協(xié)的結(jié)果,事實真的如此嗎?對于這種觀點,我只能送你一句,別高興太早,人家只是告訴你:“小子,這次我們是要玩真的”。
強制使用ATS是不是蘋果過于激進,那以后上線版本是不是必須要買證書啦,也不見得,其實iOS依舊可以使用HTTP,只是我們上線的時候,要做出合理解釋而已。擦邊球還是可以打一下的,我們可以在info.plist中,將服務端host:xxx.com添加到Exception Domains中,分別設(shè)置(可悲的是擦邊球只能iOS10+):╮(╯_╰)╭
NSIncludesSubdomains: YES; // 含義是子域名是否適用
NSExceptionAllowsInsecureHTTPLoads: YES; // 是否允許不安全HTTP負載
NSExceptionRequiresForwardSecrecy: NO; // 是否適用前置加密
或者
NSIncludesSubdomains: YES;
NSThirdPartyExceptionAllowsInsecureHTTPLoads: YES; // 是否允許第三方不安全HTTP負載
NSThirdPartyExceptionRequiresForwardSecrecy: NO; // 第三方是否適用前置加密

info.plist
即,將域名xxx.com避開ATS驗證,依舊支持HTTP,不過我們需要解釋說明,可以說需要訪問的域名是第三方的,他們不支持HTTPS,不過如果訪問的是自己的服務器的話,這個理由有點懸iOS喵神[2]。不過為穩(wěn)妥起見,我們還是盡快適配HTTPS為好。
info.plist code:
<key>NSExceptionDomains</key>
<dict>
<key>xxx.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key> NSExceptionAllowsInsecureHTTPLoads </key>
<true/>
<key> NSExceptionRequiresForwardSecrecy </key>
<false/>
</dict>
......
<key>weibo.cn</key>
<dict>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
參考:
【1】 蘋果ATS(強制HTTPS)審核新政解碼
【2】關(guān)于 iOS 10 中 ATS 的問題