Attualmente sto lavorando su Xcode 7 beta 6. Sto cercando di inviare una richiesta "Elimina" per http://mySubdomain.herokuapp.comSicurezza trasporto app Xcode 7 beta 6
L'errore che ricevo è:
App Transport Security ha bloccato una HTTP in chiaro (http: //) carico di risorse dal momento che è insicuro. Le eccezioni temporanee possono essere configurate tramite il file Info.plist dell'app.
Errore nell'effettuare una chiamata API: Errore dominio = NSURLErrorDomain Code = -1022 Impossibile caricare la risorsa poiché la politica di sicurezza del trasporto App richiede l'uso di una connessione sicura.
NSLocalizedDescription = La risorsa non potrebbe essere caricato perché la politica App Transport Security richiede l'utilizzo di una connessione sicura., NSUnderlyingError = 0x796f7ef0 {errore di dominio = Codice kCFErrorDomainCFNetwork = -1022 "(null)"}}
Nella mia chiamata API vera ho messo "https" invece di "http" e che in realtà ha funzionato per le mie richieste POST. Ma la richiesta DELETE genera l'errore precedente.
Ho visto delle soluzioni qui che riguardano il file pList, ma nessuno di loro ha funzionato per me. Ho elencato i miei tentativi qui sotto.
Primo tentativo:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
secondo tentativo:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>herokuapp.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSRequiresCertificateTransparency</key>
<false/>
</dict>
</dict>
</dict>
E, infine, ho anche messo tutte queste chiavi temporanee in questo modo:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>herokuapp.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSTemporaryExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSTemporaryThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSTemporaryThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSRequiresCertificateTransparency</key>
<false/>
<key>NSTemporaryRequiresCertificateTransparency</key>
<false/>
</dict>
</dict>
</dict>
Tutto senza fortuna! Ho sempre lo stesso errore. La richiesta DELETE è formattata correttamente perché quando eseguo manualmente da Postman, ottengo il risultato desiderato.
Ecco ciò che il mio metodo di chiamata API attuale sembra, nel caso in cui ci potrebbe essere un problema qui:
class func makeDELETEALLRequest(completion: (error:Bool) -> Void) {
let session = NSURLSession.sharedSession()
let url = NSURL(string:"https://mysubdomain.herokuapp.com/42kh24kh2kj2g24/clean")
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "DELETE"
let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in
if (error != nil) {
print("Error making API call: \(error!)")
completion(error: true)
} else {
let HTTPResponse = response as! NSHTTPURLResponse
let statusCode = HTTPResponse.statusCode
if (statusCode == 200){
print("Successfully deleted!")
completion(error: false)
} else {
print("Different status code: \(statusCode)")
completion(error: true)
}
}
}
task.resume()
}
Ancora una volta, sto usando Xcode 7 beta 6.
SUL MIO risposta selezionata La risposta che ho selezionato come corrette era giusto per me perché ho fatto tutte queste modifiche al file plist sbagliato nel mio progetto e che la risposta è stato l'unico che ha affrontato la possibilità. Le soluzioni offerte dalle altre risposte non sono sbagliate, quindi qualsiasi altra persona che ha riscontrato questo problema dovrebbe provare, poiché è valida. Spero che questo aiuti chiunque abbia problemi simili.
guida per controllare l'accettabilità di URL Web è disponibile https://medium.com/@Mrugraj/app-transport-security-b7910c4fc70f. questo potrebbe aiutare a capire per il futuro – Mrug
Primo tentativo di lavoro nel mio caso in ogni modo lo trovo utile così ho i pollici in su per me –