2015-09-06 13 views
31

Ich arbeite gerade an Xcode 7 beta 6. Ich versuche, eine "DELETE" Anfrage an http://mySubdomain.herokuapp.comApp Transport Sicherheit Xcode 7 beta 6

Der Fehler I erhalten zu senden:

App Transport Security blockiert hat einen unverschlüsselt HTTP (http: //) Ressourcenbelastung, da es unsicher ist. Temporäre Ausnahmen können über die Info.plist-Datei Ihrer App konfiguriert werden.
Fehler beim API-Aufruf: Fehlerdomäne = NSURLErrorDomain Code = -1022 Die Ressource konnte nicht geladen werden, da die App-Transportsicherheitsrichtlinie die Verwendung einer sicheren Verbindung erfordert.
NSLocalizedDescription = Die Ressource konnte nicht geladen werden, da die App-Transport-Sicherheitsrichtlinie die Verwendung einer sicheren Verbindung erfordert., NSUnderlyingError = 0x796f7ef0 {Fehler Domain = kCFErrorDomainCFNetwork-Code = -1022 "(null)"}}

In meinem tatsächlichen API-Aufruf habe ich "https" anstelle von "http" eingegeben und das hat tatsächlich für meine POST-Anfragen funktioniert. Aber die DELETE-Anfrage löst den obigen Fehler aus.

Ich habe hier Lösungen gesehen, die die pList-Datei beinhalten, aber keiner von ihnen hat für mich funktioniert. Ich habe meine Versuche unten aufgelistet.

Erster Versuch:

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

Zweiter Versuch:

<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> 

Und schließlich ich auch alle diese temporäre Schlüssel setzen in etwa so:

<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> 

Alles ohne Glück! Ich bekomme immer den gleichen Fehler. Die DELETE-Anfrage ist korrekt formatiert, denn wenn ich es manuell von Postman aus mache, bekomme ich das gewünschte Ergebnis. Hier

ist, was meine eigentliche API-Aufruf Methode aussieht, nur für den Fall könnte es ein Problem sein, hier:

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() 
    } 

Noch einmal, ich bin mit Xcode 7 Beta 6.

ÜBER MEINE AUSGEWÄHLTE ANTWORT Die Antwort, die ich war richtig für mich als richtig ausgewählt, weil ich alle diese Änderungen an der falschen pList Datei in meinem Projekt gemacht und die Antwort war der einzige, der die Möglichkeit angesprochen. Die Lösungen, die von den anderen Antworten angeboten werden, sind nicht falsch, also sollten andere Leute, die dieses Problem erfahren, es versuchen, da sie gültig sind. Ich hoffe, das hilft jedem, der ähnliche Probleme hat.

+0

Ein Leitfaden überprüfen Akzeptanz von Web-URL https://medium.com/@Mrugraj/app-transport-security-b7910c4fc70f zur Verfügung steht. Dies könnte helfen, für die Zukunft zu verstehen – Mrug

+0

Erste Versuch Arbeit in meinem Fall irgendwie finde ich es hilfreich, so dass ich Daumen hoch für Sie haben –

Antwort

12

Ich hatte auch Schwierigkeiten, App Transport Security nach dem Upgrade auf xCode 7.0 zu überschreiben, und versuchte die gleichen Lösungen, die Sie nicht nutzen können. Nachdem ich eine Weile davon entfernt war, bemerkte ich, dass ich die Änderungen an der Info.plist unter Unterstützende Dateien von "MyAppName Tests" vorgenommen hatte und nicht an der im Projekt selbst. Der Ordner "Unterstützende Dateien" in meinem Projekt wurde nicht erweitert, sodass ich die Info.plist nicht bemerkt hatte.

Typischer Amateurfehler, da bin ich mir sicher, aber im Project Navigator sind sie nur ein paar Zeilen auseinander und das hat mich frustriert, bis ich den Unterschied bemerkt habe. Ich dachte, ich würde es erwähnen, falls Sie das gleiche Problem haben.

37

Schätzen Sie haben versucht, die folgende hinzufügen, um Ihre plist-Datei:

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

... Sie könnten Ihre Linie versuchen wollen zu ändern:

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

zu:

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

Entschuldigung, wenn Sie dies versucht haben.Ich kann verstehen, wie frustrierend es ist, wenn Sie denken, dass Sie alle Möglichkeiten ausgeschöpft haben.

Aber sobald ich meine App auf Xcode 7 hochgefahren habe, damit ich unsere Apps testen kann, hat man mit dem "App Transport Security" -Problem angefangen. Wir verwenden Oracle-basierte Web-Services und es ist zu spät, um digitale Zertifikate für SSL-basiertes HTTP zu konfigurieren. Also, der obige Zusatz zu meiner Plist-Datei hat den Trick gemacht. Schätze, du hast es versucht. Aber, nur um anderen zu helfen, hat es tatsächlich für mich funktioniert. Es muss, da ich keine sofortige Möglichkeit habe, SSL auf unserer Oracle-Box zu aktivieren.

44

Ich habe es gelöst mit Hinzufügen eines Schlüssels in info.plist. Da ich Ziel C für eine native Anwendung verwende.

Die Schritte, die ich gefolgt sind:

  1. Eröffnet meine Projekte info.plist Datei

  2. Added ein Key NSAppTransportSecurity als Dictionary genannt.

  3. Ein Unterschlüssel mit der Bezeichnung NSAllowsArbitraryLoads als wurde hinzugefügt und der Wert auf YES wie folgt eingestellt.

enter image description here

Reinigen Sie das Projekt und jetzt läuft alles wie wie vor gut.

Ref-Link:

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

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

4

Ich habe als plist-Datei gelöst.
1. Fügen Sie eine NSAppTransportSecurity : Dictionary hinzu.
2. Fügen Sie einen Unterschlüssel namens NSAllowsArbitraryLoads als Boolean : YES hinzu

Dies funktionierte gut.

+0

Arbeitete für mich gut –

4

In Xcode 8

  1. meine Projekte info.plist Datei öffnen
  2. einen Schlüssel hinzufügen AppTransportSecurity als Wörterbuch bezeichnet.
  3. Fügen Sie einen Unterschlüssel mit der Bezeichnung AllowsArbitraryLoads als Boolean hinzu und setzen Sie seinen Wert wie im folgenden Bild auf YES.

enter image description here