今天升級Xcode 7.0 bata發(fā)現(xiàn)網(wǎng)絡(luò)訪問失敗。
輸出錯誤信息
The resource couldnotbe loaded becausetheApp Transport Security policy requirestheuseofasecure connection.
Google后查證,iOS9引入了新特性App Transport Security (ATS)。詳情:App Transport Security (ATS)
新特性要求App內(nèi)訪問的網(wǎng)絡(luò)必須使用HTTPS協(xié)議。
但是現(xiàn)在公司的項目使用的是HTTP協(xié)議,使用私有加密方式保證數(shù)據(jù)安全。現(xiàn)在也不能馬上改成HTTPS協(xié)議傳輸。
最終找到以下解決辦法:
在Info.plist中添加NSAppTransportSecurity類型Dictionary。
在NSAppTransportSecurity下添加NSAllowsArbitraryLoads類型Boolean,值設(shè)為YES
看到很多同學(xué)修改后還是不能用添加一下截圖:
在Filter中搜索Info.plist,選擇Info.plist進(jìn)行編輯
按照上面提到的方式添加信息,正確的修改會看到下圖這個樣子,注意類型NSAppTransportSecurity為Dictionary,NSAllowsArbitraryLoads為Boolean,復(fù)制粘貼的時候,不要多了空格,segment fault 頁面上直接復(fù)制,經(jīng)常會多一個出空格!
注意??,單元測試下面也有一個Info.plist,修改那個文件是沒有作用的!
補充說明
上面介紹的方法雖然解決了網(wǎng)絡(luò)訪問的問題,但是蘋果提供的安全保障也被關(guān)閉了。
不過,按照國內(nèi)的現(xiàn)狀,關(guān)閉這個限制也許是更實際的做法。
至于原因就太多了,第三方SDK(幾乎都是訪問HTTP),合作伙伴接入(不能要求它們一定要支持HTTPS)。
如果你的App沒有受到這些原因的限制,還是更建議你增加HTTPS支持,而不是關(guān)閉限制。
請大家根據(jù)項目的實際情況作調(diào)整。
出于安全考慮我們提倡使用HTTPS,退而求其次,優(yōu)先考慮使用例外:將允許訪問的域加入到配置列表中
@banxi1988 補充了配置的方法
對于實在不支持HTTPS的應(yīng)該首先考慮添加例外
添加例外的方式也很簡單:
左鍵Info.plist選擇open with source code
然后添加類似如下的配置:
NSAppTransportSecurityNSExceptionDomainsqq.comNSIncludesSubdomainssina.com.cnNSIncludesSubdomains
根據(jù)自己需要的域名修改, NSIncludeSubdomains 顧名思義是包括子域的意思。
參考:
App Transport Security support aka apps on iOS 9 don't work #4560
711_networking_with_nsurlsession.pdf
總結(jié):
蘋果正在加大應(yīng)用安全的管控,這個舉措可以看出蘋果對信息安全的重視,也暴露出大部分應(yīng)用傳輸數(shù)據(jù)時都是未經(jīng)過加密的,或使用私有方式加密,以至于蘋果開始對開發(fā)者提出要求。
私有加密雖然一定程度上是安全的,但是終究不是一個長久之計。全世界這么多安全專家在維護(hù)HTTPS安全,早日使用HTTPS確保信息安全才是王道!也省去了私有加密協(xié)議的安全隱患!