Autenticación con WKWebView en Swift

En mi aplicación de iOS, me gustaría usar una WKWebView para envolver una URL externa en la aplicación. Esta URL requiere authentication básica (necesita cnetworkingenciales de usuario y contraseña, como en la siguiente captura de pantalla).

introduzca la descripción de la imagen aquí

Después de algunas investigaciones, bash utilizar el método didReceiveAuthenticationChallenge , para habilitar un inicio de session automático, así que no estoy entendiendo cómo funciona.

Este es mi codigo

 import UIKit import WebKit class WebViewController: UIViewController, WKNavigationDelegate { var webView: WKWebView? private var request : NSURLRequest { let baseUrl = "https://unimol.esse3.cineca.it/auth/Logon.do" let URL = NSURL(string: baseUrl)! return NSURLRequest(URL: URL) } /* Start the network activity indicator when the web view is loading */ func webView(webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation){ UIApplication.shanetworkingApplication().networkActivityIndicatorVisible = true } /* Stop the network activity indicator when the loading finishes */ func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation){ UIApplication.shanetworkingApplication().networkActivityIndicatorVisible = false } func webView(webView: WKWebView, decidePolicyForNavigationResponse navigationResponse: WKNavigationResponse, decisionHandler: ((WKNavigationResponsePolicy) -> Void)){ decisionHandler(.Allow) } func webView(webView: WKWebView, didReceiveAuthenticationChallenge challenge: NSURLAuthenticationChallenge, completionHandler: (NSURLSessionAuthChallengeDisposition, NSURLCnetworkingential?) -> Void) { if challenge.protectionSpace.host == "https://unimol.esse3.cineca.it/auth/Logon.do" { let user = "*******" let password = "******" let cnetworkingential = NSURLCnetworkingential(user: user, password: password, persistence: NSURLCnetworkingentialPersistence.ForSession) challenge.sender?.useCnetworkingential(cnetworkingential, forAuthenticationChallenge: challenge) } } override func viewDidLoad() { /* Create our preferences on how the web page should be loaded */ let preferences = WKPreferences() preferences.javaScriptEnabled = false /* Create a configuration for our preferences */ let configuration = WKWebViewConfiguration() configuration.preferences = preferences /* Now instantiate the web view */ webView = WKWebView(frame: view.bounds, configuration: configuration) if let theWebView = webView { /* Load a web page into our web view */ let urlRequest = self.request theWebView.loadRequest(urlRequest) theWebView.navigationDelegate = self view.addSubview(theWebView) } } } 

Me enfrento con esta exception:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Completion handler passed to -[MyUnimol.WebViewController webView:didReceiveAuthenticationChallenge:completionHandler:] was not called'

Si borro el método didReceiveAuthenticationChallenge , puedo llegar a la URL, pero me da, obviamente, cnetworkingenciales incorrectas.

¿Alguien podría explicarme lo que estoy haciendo mal por favor?

Agregue la siguiente línea:

 completionHandler(NSURLSessionAuthChallengeDisposition.UseCnetworkingential, cnetworkingential) 

Al final de didReceiveAuthenticationChallenge resolvió el problema.