title: Swift 3 URLSession with URLCredential not working
body: <p>I am doing a URLSession, but the URL requires credentials.</p>
  
  <p>I have this whole method here that is trying to do a URLSession with URLCredentials:</p>
  
  <pre><code>func loginUser(_ username: String, password: String, completion: @escaping (_ result: Bool) -&gt; Void)
      {
          //Create request URL as String
  
          let requestString = String(format:"%@", webservice) as String
  
          //Covert URL request string to URL
  
          guard let url = URL(string: requestString) else {
              print("Error: cannot create URL")
              return
          }
  
          //Convert URL to URLRequest
  
          let urlRequest = URLRequest(url: url)
  
          print(urlRequest)
  
          //Add the username and password to URLCredential
  
          credential = URLCredential(user:username, password:password, persistence: .forSession)
  
          //Setup the URLSessionConfiguration
  
          let config = URLSessionConfiguration.default
  
          //Setup the URLSession
  
          let session = URLSession(configuration: config, delegate: self, delegateQueue: nil)
  
          //Prepare the task to get data.
  
          let task = session.dataTask(with: urlRequest, completionHandler: { (data, response, error) in
  
              DispatchQueue.main.async(execute: {
  
                  if(error == nil)
                  {
                      completion(true)
                  }
                  else
                  {
                      completion(false)
                  }
  
              })
  
          })
  
          //Run the task to get data.
  
          task.resume()
  
      }
  </code></pre>
  
  <p>and here are my URLSessionDelegate Methods:</p>
  
  <pre><code>func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -&gt; Void) {
  
          if challenge.previousFailureCount &gt; 0
          {
              completionHandler(Foundation.URLSession.AuthChallengeDisposition.cancelAuthenticationChallenge, nil)
          }
          else
          {
              completionHandler(Foundation.URLSession.AuthChallengeDisposition.useCredential, URLCredential(trust:challenge.protectionSpace.serverTrust!))
          }
  
      }
  
      /**
       Requests credentials from the delegate in response to an authentication request from the remote server.
       */
  
      func urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -&gt; Void) {
  
          completionHandler(Foundation.URLSession.AuthChallengeDisposition.useCredential,credential)
  
      }
  </code></pre>
  
  <p>I notice when I debug this in this delegate method:</p>
  
  <pre><code>func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -&gt; Void) {
  
          if challenge.previousFailureCount &gt; 0
          {
              completionHandler(Foundation.URLSession.AuthChallengeDisposition.cancelAuthenticationChallenge, nil)
          }
          else
          {
              completionHandler(Foundation.URLSession.AuthChallengeDisposition.useCredential, URLCredential(trust:challenge.protectionSpace.serverTrust!))
          }
  
      }
  </code></pre>
  
  <p>That this method gets called twice and when it hits this line for the second time:</p>
  
  <pre><code>completionHandler(Foundation.URLSession.AuthChallengeDisposition.useCredential, URLCredential(trust:challenge.protectionSpace.serverTrust!))
  </code></pre>
  
  <p>I get this error:</p>
  
  <pre><code>fatal error: unexpectedly found nil while unwrapping an Optional value
  </code></pre>
  
  <p>and then my app crashes! How do I fix this error?</p>