2017-10-04 4 views
1

Meine Apps könnten in iOS 11, iPhone 6 Plus verlangsamen. (Andere iOS laufen wie erwartet.)SecTrustEvaluate() verlangsamen in iOS 11

Ich weiß SecTrustEvaluate() -Methode ist ein Grund, dass die App verlangsamen. Ich laufe es in Haupt-Thread dauert etwa 3 Sekunden. Also verwende ich gcd, um es in den Hintergrundthread zu verschieben.

- (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 
      } 
      }); 
     }); 
    } 
} 

Dann blockiert es nicht UI, aber 20 Sekunden für Server Trust-Validierung.
Kann jemand dieses Problem wissen? Bitte hilf mir. Vielen Dank.

Antwort

0

Ich konfiguriere mein Problem. Dies bezieht sich nicht auf iOS 11. Es ist meine Schuld.

Ich erstelle eine NSURLSession für jede Sicherheits-Download-Image-Anfrage auf dem gleichen Host. Weil die TLS-Sitzung rechenintensiv ist, damit meine App langsamer wird. Meine Lösung ist nur eine Sitzung für alle Download-Anfrage erstellen. Das Ergebnis des ausgewerteten Serverzertifikats wird zwischengespeichert, und die nächste Anforderung (auf demselben Host, Port) erfordert keine Vertrauenswürdigkeit des Evaluierungsservers.

Weitere Informationen: https://developer.apple.com/library/content/qa/qa1727/_index.html

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