Swift / https: NSURLSession / NSURLConnection La carga HTTP falló

Desafortunadamente esta mañana mi XCode se actualizó a la versión 7 y la aplicación iOS que estaba desarrollando con http ahora quiere https. Entonces, siguiendo muchos tutoriales, configuré mi server MAMP para usar https / ssl creando un certificate ficticio. Ahora en las URL de mi aplicación iOS son como las siguientes:

static var webServerLoginURL = "https://localhost:443/excogitoweb/mobile/loginM.php" static var webServerGetUserTasks = "https://localhost:443/excogitoweb/mobile/handleTasks.php" static var webServerGetUsers = "https://localhost:443/excogitoweb/mobile/handleUsers.php" static var webServerGetProjects = "https://localhost:443/excogitoweb/mobile/handleProjects.php" 

y funcionan bien si trato de acceder a ellos en mi browser. Estaba acostumbrado a acceder a la database y a los files php con NSURLSession.shanetworkingSession (). DataTaskWithRequest () que ahora genera el error en el título. Por ejemplo, aquí está la línea donde se genera el error:

 if let responseJSON: [[String: String]] = (try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions())) as? [[String: String]] { ... } 

y este es el post de error completo:

 2015-09-21 16:41:48.354 ExcogitoWeb[75200:476213] CFNetwork SSLHandshake failed (-9824) 2015-09-21 16:41:48.355 ExcogitoWeb[75200:476213] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824) fatal error: unexpectedly found nil while unwrapping an Optional value 

Me gustaría saber cómo solucionar esto. He leído algunas respuestas útiles aquí, pero hay muchas cosas que todavía no entiendo y si alguien me ayudaría / me explicaría, estaría muy agradecido.

Agregue esto a Info.plist su aplicación Info.plist

 <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> 
 fatal error: unexpectedly found nil while unwrapping an Optional value 

generalmente significa que estás haciendo algo que no es tan bueno y mirando tu if

 if let responseJSON: [[String: String]] = (try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions())) as? [[String: String]] { 

¡Puedo ver que hay data! , pero ese object de datos es nulo. Realmente deberías desenvolver los opcionales antes de usarlos, especialmente cuando trabajas con datos remotos.

Entonces tienes un error de networking, probablemente esté relacionado con el ATS Apple agregado en iOS 9.

Vea otra respuesta sobre cómo desactivar temporalmente ATS. https://stackoverflow.com/a/30748166/421755

editar: veo ahora que agregaste ssl a tu host local, eso está bien. Sin embargo, no es suficiente para que ATS funcione, ya que necesita TLS 1.2 y no certificates autofirmados.

Realmente vieja pregunta, pero pensé que iba a responder. Esto suele suceder cuando intenta desenvolver un object http y vuelve a cero.

Asegúrese de desenvolver su url y darle un valor pnetworkingeterminado.

ejemplo:

 let jsonURL = "your https link to your json" guard let url = URL(string: jsonURL) else { return } // dont force unwrap 

¡espero que esto ayude!