SecTrustEvaluate()在iOS 11中变慢

时间:2017-10-04 01:09:57

标签: ios11

我的应用程序在iOS 11,iPhone 6 plus中可能会变慢。 (其他iOS按预期运行。)

我知道SecTrustEvaluate()方法是使应用程序变慢的原因。 我在主线程中运行大约需要3秒钟。所以我使用gcd将其移动到后台线程。

- (void)URLSession:(NSURLSession *)session didReceiveChallenge(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler {
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
         BOOL allowConnect =   //Server Trust Evaluation in here
         dispatch_async( dispatch_get_main_queue(), ^{
             if (allowConnect) {
                //completionHandler;
             } else {
                 //cancel
             }
           });
       });
    }
}

然后它不会阻止UI,但需要20秒才能进行服务器信任验证。
有人能知道这个问题吗?请帮我。谢谢。

1 个答案:

答案 0 :(得分:0)

我配置了我的问题。这与iOS 11无关。这是我的错。

我为同一主机上的每个安全下载映像请求创建一个NSURLSession。 因为TLS会话的计算成本很高,所以我的应用程序会变慢。 我的解决方案是为所有下载请求只创建一个会话。 因此,评估服务器证书的结果将被缓存,并且下一个请求(在同一主机,端口上)您不需要评估服务器信任。

更多信息: https://developer.apple.com/library/content/qa/qa1727/_index.html

Why is a HTTPS NSURLSession connection only challenged once per domain?