在iOS 9中,除非特定的主机名被列入白名单,否则Apple将阻止应用程序使用不安全的HTTP连接。http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/。关于WebView是否可以免除这些规则,还是我们仍然需要将浏览器打开的主机名列入白名单,包括给定页面上的所有链接?我不确定这是我们的责任还是可以免除的。
SFSafariViewController可以显示没有NSAppTransportSecurity密钥的HTTP页面。
UIWebView和WKWebView需要上述提到的NSAppTransportSecurity密钥才能显示HTTP页面。
根据苹果的指导,我已在我的应用程序的.plist文件中插入了以下内容:
<key>NSAppTransportSecurity</key>
<dict>
<!--Include to allow all connections - with and without SSL (DANGEROUS)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
当我尝试加载我的webView(从HTTPS服务器加载),我会得到以下错误并且它无法加载:
NSURLSession/NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9813)
看来不仅他们没有豁免权,即使你在.plist中做了正确的添加,它们也无法工作。
http://stackoverflow.com/questions/31937811/ios-another-error-using-app-transport-security-ats-9813
- ICL1901这个问题最初是关于iOS 9的; 然而,根据苹果公司的文档:
从iOS 10.0及更高版本开始,支持以下子键:
- NSAllowsArbitraryLoadsInWebContent
- ...
使用NSAllowsArbitraryLoadsInWebContent,这样您就不需要为WebView可能加载的每个页面设置白名单。
保留NSAllowsArbitraryLoads以保持与iOS 9的向后兼容性,并在Xcode 8项目Info.plist中启用新设置:
<key>NSAppTransportSecurity</key>
<dict>
<!--Include to allow all connections (DANGER)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>