iOS9 & iOS10 & iOS11 HTTP 不能正常使用的解決辦法

 

iOS9 & iOS10 & iOS11 HTTP 不能正常使用的解決辦法

54

今天升級Xcode 7.0 bata發現網絡訪問失敗。
輸出錯誤信息html

 
 

Google後查證,iOS9引入了新特性App Transport Security (ATS)。詳情:App Transport Security (ATS)ios

新特性要求App內訪問的網絡必須使用HTTPS協議。
可是如今公司的項目使用的是HTTP協議,使用私有加密方式保證數據安全。如今也不能立刻改爲HTTPS協議傳輸。segmentfault

最終找到如下解決辦法:

  1. 在Info.plist中添加NSAppTransportSecurity類型Dictionary
  2. NSAppTransportSecurity下添加NSAllowsArbitraryLoads類型Boolean,值設爲YES

看到不少同窗修改後仍是不能用添加一下截圖:

  1. 在Filter中搜索Info.plist,選擇Info.plist進行編輯

圖片描述

  1. 按照上面提到的方式添加信息,正確的修改會看到下圖這個樣子,注意類型NSAppTransportSecurityDictionaryNSAllowsArbitraryLoadsBoolean,複製粘貼的時候,不要多了空格,segment fault 頁面上直接複製,常常會多一個出空格!

圖片描述

  1. 注意⚠️,單元測試下面也有一個Info.plist,修改那個文件是沒有做用的!

補充說明

上面介紹的方法雖然解決了網絡訪問的問題,可是蘋果提供的安全保障也被關閉了。
不過,按照國內的現狀,關閉這個限制也許是更實際的作法。
至於緣由就太多了,第三方SDK(幾乎都是訪問HTTP),合做夥伴接入(不能要求它們必定要支持HTTPS)。
若是你的App沒有受到這些緣由的限制,仍是更建議你增長HTTPS支持,而不是關閉限制。
請你們根據項目的實際狀況做調整。xcode

出於安全考慮咱們提倡使用HTTPS,退而求其次,優先考慮使用例外:將容許訪問的域加入到配置列表中安全

@banxi1988 補充了配置的方法
對於實在不支持HTTPS的應該首先考慮添加例外網絡

添加例外的方式也很簡單:
左鍵Info.plist選擇open with source code
而後添加相似以下的配置:app

 
 
 

根據本身須要的域名修改, NSIncludeSubdomains 顧名思義是包括子域的意思。dom

相關文章
相關標籤/搜索