2015-10-08 2 views
5

У меня есть самоподписанный сертификат в виртуальной машине, которую я использую для проверки моего сервиса. Используя ответы, найденные в UIWebView to view self signed websites (No private api, not NSURLConnection) - is it possible?, я смог написать действующий код SWIFT 2.0. Xcode 7 говорит мне, что NSURLConnection устарел, и вместо этого я должен использовать NSURLSession. Ни одна из моих попыток переноса этого кода не удалась, и ни один из обычных сценариев конверсии, описанных в других ответах, не применяется.Является ли это специализированное использование NSURLConnection для обработки самоподписанных сертификатов, конвертируемых в NSURLSession?

Если я создаю новый NSURLSession, чтобы обработать вызов аутентификации с помощью моих методов делегирования, другие нагрузки все еще происходят на и, следовательно, сбой.

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!) 
} 

ответ

0

Я смог подавить предупреждение об устаревании, добавив эту строку до первого метода. Я бы предпочел решение, которое заменит NSURLConnection, но в отсутствие этого это должно будет сделать.

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