2015-09-06 36 views
31

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.

+0

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

+0

Primo tentativo di lavoro nel mio caso in ogni modo lo trovo utile così ho i pollici in su per me –

risposta

12

Anch'io ho avuto problemi a scavalcare Protezione del trasporto app dopo l'aggiornamento a xCode 7.0, e ho provato lo stesso tipo di soluzioni che non hai avuto. Dopo essermi allontanato per un po ', ho notato che avevo apportato le modifiche a Info.plist sotto File di supporto di "Test MyAppName" anziché a quello nel progetto stesso. La cartella File supportati nel mio progetto non è stata espansa, quindi non avevo nemmeno notato Info.plist.

Tipico errore amatoriale, ne sono sicuro, ma sono solo un paio di righe nel Project Navigator e mi hanno frustrato fino a quando non ho notato la distinzione. Ho pensato di parlarne nel caso avessi lo stesso problema.

37

Apprezzare hai provato aggiungendo la seguente, al file plist:

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

... si potrebbe desiderare di provare a cambiare la vostra linea:

let url = NSURL(string:"https://mysubdomain.herokuapp.com/42kh24kh2kj2g24/clean") 

a:

let url = NSURL(string:"http://mysubdomain.herokuapp.com/42kh24kh2kj2g24/clean") 

Scusa se hai provato questo.Posso capire quanto sia frustrante quando pensi di aver esaurito tutte le vie.

Ma non appena ho eseguito la mia app su Xcode 7, in modo da poter testare le nostre app, si è iniziato con il problema "App Transport Security". Utilizziamo servizi Web basati su Oracle ed è troppo tardi per iniziare a configurare i certificati digitali per HTTP basato su SSL. Quindi, l'aggiunta di cui sopra al mio file plist ha fatto il trucco. Apprezzo che tu abbia provato questo. Ma, solo per aiutare qualcun altro, in realtà ha funzionato per me. Ha bisogno di come non ho modo immediato di abilitare SSL sulla nostra scatola Oracle.

44

L'ho risolto aggiungendo qualche chiave in info.plist. Poiché sto utilizzando l'obiettivo C per alcune applicazioni native.

I passi che ho seguito sono:

  1. aperto il mio Progetti info.plist file di

  2. Aggiunto un tasto chiamato NSAppTransportSecurity come Dictionary.

  3. Aggiunta una sottochiave denominata NSAllowsArbitraryLoads come Boolean e impostare il valore su YES come nell'immagine seguente.

enter image description here

Pulire il progetto e ora tutto sta funzionando bene come come prima.

Rif Link:

  1. https://stackoverflow.com/a/32631185/2905967

  2. https://stackoverflow.com/a/32609970

4

ho risolto in formato plist.
1. Aggiungere uno NSAppTransportSecurity : Dictionary.
2. Aggiungi sottochiave denominata NSAllowsArbitraryLoads come Boolean : YES

Questo ha funzionato bene.

+0

ha funzionato bene per me –

4

In Xcode 8

  1. aprire il mio progetti di file info.plist
  2. Aggiungere una chiave denominata AppTransportSecurity come un dizionario.
  3. Aggiungere una sottochiave denominata AllowsArbitraryLoads come booleana e impostarne il valore su Sì come nell'immagine seguente.

enter image description here

Problemi correlati