相信很多Apple Developer在升級到Xcode 7后會出現網絡訪問失敗,一般會在控制臺出現如下的錯誤信息:
The resource could not be loaded because the App Transport Security policy requires theuseofa secureconnection.
這是因為iOS 9引入了新特性App Transport Security (ATS)。詳情:https://developer.apple.com/library/prerelease/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html#//apple_ref/doc/uid/TP40016198-SW1
新特性要求App內訪問的網絡必須使用HTTPS協議。
但是現在很多公司的項目使用的是HTTP協議,使用私有加密方式保證數據安全。現在也不能馬上改成HTTPS協議傳輸。
經過查找,得到以下兩種解決辦法:
1.允許任意鏈接使用HTTP協議
1.1 在Info.plist中添加NSAppTransportSecurity, 類型Dictionary。
1.2 在NSAppTransportSecurity下添加NSAllowsArbitraryLoads, 類型Boolean, 值設為YES
2.允許特定鏈接使用HTTP協議
2.1 在Info.plist中添加NSAppTransportSecurity, 類型Dictionary。
2.2 在NSAppTransportSecurity下添加NSExceptionDomains, 類型Dictionary。
2.3 在NSExceptionDomains下添加去掉http://的鏈接主域名(如:omdbapi.com),? 類型Dictionary。
2.4 在以鏈接為Key的Dictionary下添加NSIncludesSubdomains 和 NSTemporaryExceptionAllowsInsecureHTTPLoads , 類型均為Boolean, 值均設為YES
如果有多個這樣的鏈接,則重復2.3、2.4
總結:
蘋果正在加大應用安全的管控,這個舉措可以看出蘋果對信息安全的重視,也暴露出大部分應用傳輸數據時都是未經過加密的,或使用私有方式加密,以至于蘋果開始對開發者提出要求。
私有加密雖然一定程度上是安全的,但是終究不是一個長久之計。全世界這么多安全專家在維護HTTPS安全,早日使用HTTPS確保信息安全才是王道!也省去了私有加密協議的安全隱患!