今天升級Xcode 7.0 bata
發現網絡訪問失敗。
輸出錯誤信息html
The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.
Google後查證,iOS9引入了新特性App Transport Security (ATS)
。詳情:App Transport Security (ATS)ios
新特性要求App內訪問的網絡必須使用HTTPS
協議。
可是如今公司的項目使用的是HTTP
協議,使用私有加密方式保證數據安全。如今也不能立刻改爲HTTPS
協議傳輸。git
NSAppTransportSecurity
類型Dictionary
。NSAppTransportSecurity
下添加NSAllowsArbitraryLoads
類型Boolean
,值設爲YES
Info.plist
,選擇Info.plist
進行編輯
NSAppTransportSecurity
爲Dictionary
,NSAllowsArbitraryLoads
爲Boolean
,複製粘貼的時候,不要多了空格,segment fault 頁面上直接複製,常常會多一個出空格!
Info.plist
,修改那個文件是沒有做用的!上面介紹的方法雖然解決了網絡訪問的問題,可是蘋果提供的安全保障也被關閉了。
不過,按照國內的現狀,關閉這個限制也許是更實際的作法。
至於緣由就太多了,第三方SDK(幾乎都是訪問HTTP
),合做夥伴接入(不能要求它們必定要支持HTTPS)。
若是你的App沒有受到這些緣由的限制,仍是更建議你增長HTTPS
支持,而不是關閉限制。
請你們根據項目的實際狀況做調整。github
出於安全考慮咱們提倡使用HTTPS
,退而求其次,優先考慮使用例外
:將容許訪問的域加入到配置列表中安全
@banxi1988 補充了配置的方法
對於實在不支持HTTPS
的應該首先考慮添加例外
網絡
添加例外的方式也很簡單:
左鍵Info.plist
選擇open with source code
而後添加相似以下的配置:session
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>qq.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> </dict> <key>sina.com.cn</key> <dict> <key>NSIncludesSubdomains</key> <true/> </dict> </dict> </dict>
根據本身須要的域名修改, NSIncludeSubdomains 顧名思義是包括子域的意思。app
蘋果正在加大應用安全的管控,這個舉措能夠看出蘋果對信息安全的重視,也暴露出大部分應用傳輸數據時都是未通過加密的,或使用私有方式加密,以致於蘋果開始對開發者提出要求。
私有加密雖然必定程度上是安全的,可是終究不是一個長久之計。全世界這麼多安全專家在維護HTTPS
安全,早日使用HTTPS
確保信息安全才是王道!也省去了私有加密協議的安全隱患!dom
推薦
,讓更多的人能找到這裏