一、問題描述
在學習網絡處理的過程,發現代碼都沒錯,運行時會收到如下錯誤提示:
App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
二、問題分析
應用程序采取了明文HTTP協議(http://)。WWDC 15,蘋果引入了一項隱私保護功能ATS(App Transport Security),是 Apple 在推進網絡通訊安全的一個重要方式。ATS屏蔽HTTP明文傳輸協議資源加載,因為http明文傳輸協議不安全,連接必須改成更安全的HTTPS協議。在 iOS 9 和 OSX 10.11中,默認情況下非HTTPS的網絡訪問是被禁止的。如果使用HTTP協議連接,會拋出一個錯誤。在Info.plist添加類型為Dictionary的NSAppTransportSecurity 並且將類型為 Boolean的NSAllowsArbitraryLoads 設置為 YES 即可來禁用 ATS,從而繼續使用HTTP明文傳輸。
在WWDC 2016開發者大會上,蘋果宣布了一個最后期限:到2017年1月1日 App Store中的所有應用都必須啟用 App Transport Security安全功能。App Transport Security(ATS)是蘋果在iOS 9中引入的一項隱私保護功能,屏蔽明文HTTP資源加載,連接必須經過更安全的HTTPS。蘋果目前允許開發者暫時關閉ATS,可以繼續使用HTTP連接,但到年底所有官方商店的應用都必須強制性使用ATS。
WWDC 16 ,Apple將在iOS 10和macOS 10.12收緊對HTTP的訪問限制。從2017年1月1日起,所有新提交到App Store中的App都必須啟用ATS 安全功能,默認是不允許使用 NSAllowsArbitraryLoads 來繞過 ATS 限制,保證 Spp 的網絡請求都是 HTTPS 加密的,否則可能會在應用審核時遇到麻煩。
三、問題解決
方法一:直接打開Info.plist,插入以下代碼
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
具體位置如下
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> ... <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> ... </dict> </plist>
方法二:Xcode打開Info.plist ,添加類型為Dictionary的NSAppTransportSecurity 並且將類型為 Boolean的NSAllowsArbitraryLoads 設置為 YES 即可來禁用 ATS,從而繼續使用HTTP明文傳輸。