2015-10-08 34 views
5

Ho un certificato autofirmato nella VM che uso per testare il mio servizio. Usando le risposte trovate in UIWebView to view self signed websites (No private api, not NSURLConnection) - is it possible? ho potuto scrivere codice swift 2.0 funzionante. Xcode 7 mi dice che NSURLConnection è deprecato e dovrei usare invece NSURLSession. Nessuno dei miei tentativi di migrare questo codice è riuscito, e nessuno dei soliti scenari di conversione descritti in altre risposte sembra applicarsi.È questo uso specializzato di NSURLConnection per gestire certificati autofirmati convertibili in NSURLSession?

Se creo un nuovo NSURLSession per gestire la verifica dell'autenticazione con i miei metodi delegati, gli altri carichi si verificano ancora su sharedSession e pertanto non riescono.

var authRequest : NSURLRequest? = nil 
var authenticated = false 
var trustedDomains = [:] // set up as necessary 

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
    if !authenticated { 
     authRequest = request 
     let urlConnection: NSURLConnection = NSURLConnection(request: request, delegate: self)! 
     urlConnection.start() 
     return false 
    } 
    else if isWebContent(request.URL!) { // write your method for this 
     return true 
    } 
    return processData(request) // write your method for this 
} 

func connection(connection: NSURLConnection, willSendRequestForAuthenticationChallenge challenge: NSURLAuthenticationChallenge) { 
    if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { 
     let challengeHost = challenge.protectionSpace.host 
     if let _ = trustedDomains[challengeHost] { 
      challenge.sender!.useCredential(NSURLCredential(forTrust: challenge.protectionSpace.serverTrust!), forAuthenticationChallenge: challenge) 
     } 
    } 
    challenge.sender!.continueWithoutCredentialForAuthenticationChallenge(challenge) 
} 

func connection(connection: NSURLConnection, didReceiveResponse response: NSURLResponse) { 
    authenticated = true 
    connection.cancel() 
    webview!.loadRequest(authRequest!) 
} 

risposta

0

Sono stato in grado di sopprimere l'avviso di deprecazione aggiungendo questa riga prima del primo metodo. Preferirei una soluzione che sostituisse NSURLConnection ma in assenza di ciò, questo dovrà essere fatto.

// hide NSURLConnection deprecation 
@available(iOS, deprecated=9.0)