2015-09-21 12 views
7

Sfortunatamente questa mattina il mio XCode aggiornato alla versione 7 e l'app iOS che stavo sviluppando con http ora vuole https. Quindi, seguendo molti tutorial, ho configurato il mio server MAMP per usare https/ssl creando un certificato fittizio. Ora nei miei URL app iOS sono come la seguente:Swift/https: NSURLSession/NSURLConnection carico HTTP non riuscito

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" 

e funzionano bene se provo ad accedere loro nel mio browser. Sono stato utilizzato per accedere al database e ai file php con NSURLSession.sharedSession(). DataTaskWithRequest() che ora solleva l'errore nel titolo. Ad esempio, ecco la linea in cui viene generato l'errore:

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

e questo è il messaggio di errore 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 

Mi piacerebbe sapere come risolvere questo problema. Ho letto alcune risposte utili qui ma ci sono molte cose che ancora non capisco e se qualcuno mi aiutasse/mi spiegasse, sarei molto grato.

risposta

9

Aggiungi questo al Info.plist

<key>NSAppTransportSecurity</key> 
    <dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
    </dict> 
+2

Questo non è sicuro. Meglio usare questo: http://stackoverflow.com/a/32331282/1447641 – Apfelsaft

3
fatal error: unexpectedly found nil while unwrapping an Optional value 

di solito significa che si sta facendo qualcosa di non così buono, e guardando il tuo if

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

posso vedere che c'è un data!, ma che oggetto di dati è pari a zero. Dovresti davvero scartare gli opzionali prima di usarli, specialmente quando lavori con dati remoti.

allora avete un errore di rete, che è probabilmente legato alla ATS Apple ha aggiunto in iOS 9.

Vedere un'altra risposta su come temporaneamente disabilitare ATS. https://stackoverflow.com/a/30748166/421755

modifica: vedo ora che hai aggiunto ssl al tuo localhost, va bene. Tuttavia, ATS non è sufficiente per funzionare, poiché richiede TLS 1.2 e non certificati autofirmati.

+0

Sì, suppongo che il problema sia che i dati sono nulli a causa di quella rete di errori, proverò a disattivarlo come hai detto ... tutto quello che ho capito è che dovrei aggiornare MAMP ssl/tls a 1.2 .. è possibile ora? O dobbiamo aspettare? –

+1

Ho appena modificato la risposta nello stesso momento in cui hai commentato. Penso che sia più semplice disabilitare 'ATS' quando si utilizza un server locale. Assicurati di abilitarlo più tardi quando spedisci l'app! – Simon

+0

Ho appena letto che TLS 1.2 sarà disponibile con OSX El Capitan ... Lo spero davvero. Sto sviluppando questa app per iOS per un esame e non vorrei apparire come un ragazzo inesperto per il mio insegnante ...grazie per il tuo healp –

1

Davvero vecchia questione della tua app, ma ho pensato di rispondere. Questo di solito accade quando si tenta di scartare un oggetto http e ritorna indietro.

Assicurati di scartare l'URL e assegnargli un valore predefinito.

esempio:

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

speranza che questo aiuti!

Problemi correlati