今天升級Xcode 7.0 bata
發現網絡訪問失敗。
輸出錯誤信息html
Google後查證,iOS9引入了新特性App Transport Security (ATS)
。詳情:App Transport Security (ATS)ios
新特性要求App內訪問的網絡必須使用HTTPS
協議。
可是如今公司的項目使用的是HTTP
協議,使用私有加密方式保證數據安全。如今也不能立刻改爲HTTPS
協議傳輸。segmentfault
最終找到如下解決辦法:
- 在Info.plist中添加
NSAppTransportSecurity
類型Dictionary
。 - 在
NSAppTransportSecurity
下添加NSAllowsArbitraryLoads
類型Boolean
,值設爲YES
看到不少同窗修改後仍是不能用添加一下截圖:
- 在Filter中搜索
Info.plist
,選擇Info.plist
進行編輯
- 按照上面提到的方式添加信息,正確的修改會看到下圖這個樣子,注意類型
NSAppTransportSecurity
爲Dictionary
,NSAllowsArbitraryLoads
爲Boolean
,複製粘貼的時候,不要多了空格,segment fault 頁面上直接複製,常常會多一個出空格!
- 注意⚠️,單元測試下面也有一個
Info.plist
,修改那個文件是沒有做用的!
補充說明
上面介紹的方法雖然解決了網絡訪問的問題,可是蘋果提供的安全保障也被關閉了。
不過,按照國內的現狀,關閉這個限制也許是更實際的作法。
至於緣由就太多了,第三方SDK(幾乎都是訪問HTTP
),合做夥伴接入(不能要求它們必定要支持HTTPS)。
若是你的App沒有受到這些緣由的限制,仍是更建議你增長HTTPS
支持,而不是關閉限制。
請你們根據項目的實際狀況做調整。xcode
出於安全考慮咱們提倡使用HTTPS
,退而求其次,優先考慮使用例外
:將容許訪問的域加入到配置列表中安全
@banxi1988 補充了配置的方法
對於實在不支持HTTPS
的應該首先考慮添加例外
網絡
添加例外的方式也很簡單:
左鍵Info.plist
選擇open with source code
而後添加相似以下的配置:app
根據本身須要的域名修改, NSIncludeSubdomains 顧名思義是包括子域的意思。dom