4

我在 iOS8 下运行良好的应用程序不再在 iOS9 下运行。问题是,尽管我的 .plist 文件中有以下内容:

<key>NSAppTransportSecurity</key>
<dict>
   <!--Include to allow all connections (DANGER)-->
   <key>NSAllowsArbitraryLoads</key>
   <true/>
</dict>

以下代码:

NSURL *targetURL = [NSURL URLWithString:_caseStudyListTitleURL];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[_myWebView loadRequest:request];

导致错误:
NSURLSession/NSURLConnection HTTP 加载失败 (kCFStreamErrorDomainSSL, -9813)

这当然会导致显示一个空的 webView。

应用程序中的所有其他 NSURLSession 代码均正常运行。

我在我的测试 iPad 上运行 XCode 7 Beta 3 和 iOS 9。

对此的任何想法将不胜感激!

4

2 回答 2

2

试试这个解决方案:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>yourdomain.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
        </dict>
    </dict>
</dict>
于 2015-08-06T07:22:58.263 回答
0

发生这种情况是因为您使用的是自签名证书,因此有必要添加一些额外的代码。因为默认情况下 iOS 会拒绝所有不受信任的 https 连接。

限制不受信任的连接是非常好的默认行为,任何禁用此行为都是高风险的。

使用此方法绕过身份验证质询:

-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge{

//code to cancel authentication challenge

}

如果您不知道如何使用它来取消身份验证质询,那么您可以从这篇文章中找到一些关于在 WebView 中加载 HTTPS url 的帮助。

也看看这个答案

于 2015-08-07T05:36:45.460 回答