it-swarm.com.de

Die Ressource konnte nicht geladen werden, da für die App Transport-Sicherheitsrichtlinie eine sichere Verbindung erforderlich ist

Ich stehe vor dem Problem, wenn ich meinen Xcode auf 7.0 oder iOS 9.0 aktualisiert habe. Irgendwie gab es mir den Titelfehler

"Die Ressource konnte nicht geladen werden, da für die App Transport-Sicherheitsrichtlinie eine sichere Verbindung erforderlich ist."

Webservice-Methode:

-(void)ServiceCall:(NSString*)ServiceName :(NSString *)DataString
{
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
    [sessionConfiguration setAllowsCellularAccess:YES];
    [sessionConfiguration setHTTPAdditionalHeaders:@{ @"Accept" : @"application/json" }];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration];

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",ServiceURL]];
    NSLog(@"URl %@%@",url,DataString);
    // Configure the Request
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setValue:[NSString stringWithFormat:@"%@=%@", strSessName, strSessVal] forHTTPHeaderField:@"Cookie"];
    request.HTTPBody = [DataString dataUsingEncoding:NSUTF8StringEncoding];
    request.HTTPMethod = @"Post";

    // post the request and handle response
    NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
                                          {
                                              // Handle the Response
                                              if(error)
                                              {
                                                  NSLog(@"%@",[NSString stringWithFormat:@"Connection failed: %@", [error description]]);

                                                  // Update the View
                                                  dispatch_async(dispatch_get_main_queue(), ^{

                                                      // Hide the Loader
                                                      [MBProgressHUD hideHUDForView:[[UIApplication sharedApplication] delegate].window animated:YES];


                                                  });
                                                  return;
                                              }
                                              NSArray * cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:request.URL];
                                              for (NSHTTPCookie * cookie in cookies)
                                              {
                                                  NSLog(@"%@=%@", cookie.name, cookie.value);
                                                  strSessName=cookie.name;
                                                  strSessVal=cookie.value;

                                              }

                                              NSString *retVal = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}];
[postDataTask resume];

}

Der Dienst läuft einwandfrei für frühere Xcode-Versionen und frühere iOS-Versionen. Als ich jedoch ein Update auf Xcode 7.0 für iOS 9.0 durchgeführt habe, trat das folgende Problem auf, wenn ich die obige Webdienstmethode aufrief. Der protokollierte Fehler, den ich erhalte, ist:

Verbindung fehlgeschlagen: Fehlerdomäne = NSURLErrorDomain Code = -1022 "Die Ressource konnte nicht geladen werden, da die App Transport-Sicherheitsrichtlinie die Verwendung einer sicheren Verbindung erfordert." Userinfo = {NSUnderlyingError = 0x7fada0f31880 {Fehler Domain = kCFErrorDomainCFNetwork-Code = -1022 "(null)"}, NSErrorFailingURLStringKey = MyServiceURL, NSErrorFailingURLKey = MyServiceURL, = NSLocalizedDescription Die Ressource nicht, weil die App Transport geladen werden konnte Sicherheitsrichtlinie erfordert die Verwendung einer sicheren Verbindung.}

Ich habe folgende Fragen und Antworten ausprobiert, habe dort jedoch kein Ergebnis erhalten. Gibt es eine vorläufige Idee, wie ich den Fehler bei einem Serviceabruf beheben kann?

  1. Die Ressource konnte nicht geladen werden ist ios9
  2. App Transport Security Xcode 7 Beta 6
  3. https://stackoverflow.com/a/3260997
451
Manab Kumar Mal

Ich habe es mit dem Hinzufügen eines Schlüssels in info.plist gelöst. Die Schritte, denen ich gefolgt bin, sind:

  1. Öffnete die Datei info.plist meines Projektziels

  2. Ein Schlüssel mit dem Namen NSAppTransportSecurity wurde als Dictionary hinzugefügt.

  3. Es wurde ein Unterschlüssel mit dem Namen NSAllowsArbitraryLoads als Boolean hinzugefügt und sein Wert auf YES gesetzt, wie in der folgenden Abbildung dargestellt.

enter image description here

Bereinigen Sie das Projekt und jetzt läuft alles wie zuvor.

Ref Link: https://stackoverflow.com/a/3260997

EDIT: OR Im Quellcode der Datei info.plist können wir Folgendes hinzufügen:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>yourdomain.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
       </dict>
  </dict>
876
Manab Kumar Mal

Beachten Sie, dass durch die Verwendung von NSAllowsArbitraryLoads = true in info.plist des Projekts jede Verbindung zu einem beliebigen Server unsicher werden kann. Wenn Sie sicherstellen möchten, dass nur eine bestimmte Domain über eine unsichere Verbindung erreichbar ist, versuchen Sie Folgendes:

enter image description here

Oder als Quellcode:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>domain.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

Clean & Build-Projekt nach der Bearbeitung.

255
Arjan

Die Transportsicherheit wird in iOS 9.0 oder höher sowie in OS X 10.11 und höher bereitgestellt.

Standardmäßig sind also nur https-Anrufe in Apps zulässig. Fügen Sie zum Deaktivieren von App Transport Security die folgenden Zeilen in die Datei info.plist ein ...

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

Für mehr Information:
https://developer.Apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//Apple_ref/doc/uid/TP40009251-SW =

39

Für iOS 10.x und Swift 3.x [die folgenden Versionen werden ebenfalls unterstützt] fügen Sie einfach die folgenden Zeilen in 'info.plist' hinzu

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
32
Mr. Bean

In Swift 4 können Sie verwenden

-> Gehe zu Info.plist

-> Klicken Sie auf das Pluszeichen in der Liste der Informationseigenschaften

-> Fügen Sie App Transport-Sicherheitseinstellungen als Wörterbuch hinzu

-> Klicken Sie auf das Plus-Symbol Sicherheitseinstellungen für den App-Transport

-> Add Erlaube beliebige Lasten set YES

Das Bild unten sieht aus wie

enter image description here

23
Enamul Haque

Ich habe als plist Datei gelöst.

Fügen Sie ein NSAppTransportSecurity: Dictionary hinzu.

Fügen Sie den Unterschlüssel "NSAllowsArbitraryLoads" als Boolean hinzu: YES

enter image description here

21
Avinash651

Die Ressource konnte nicht geladen werden, da die App Transport-Sicherheitsrichtlinie die Verwendung einer sicheren Verbindung in Swift 4.03 erfordert.

Öffne deine pList.info als Quellcode und füge ein:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
15
Keshav Gera

Wenn Sie Xcode 8.0 und Swift 3.0 oder 2.2 verwenden

enter image description here

11
Anit Kumar

Aus Apple Dokumentation

Wenn Sie eine neue App entwickeln, sollten Sie ausschließlich HTTPS verwenden. Wenn Sie bereits über eine App verfügen, sollten Sie HTTPS so oft wie möglich verwenden und so schnell wie möglich einen Plan für die Migration des Restes Ihrer App erstellen. Darüber hinaus muss Ihre Kommunikation über übergeordnete APIs mit TLS Version 1.2 mit Vorwärtsgeheimnis verschlüsselt werden. Wenn Sie versuchen, eine Verbindung herzustellen, die dieser Anforderung nicht entspricht, wird ein Fehler ausgegeben. Wenn Ihre App eine Anfrage an eine unsichere Domain stellen muss, müssen Sie diese Domain in der Info.plist-Datei Ihrer App angeben.

So umgehen Sie die Sicherheit des App-Transports:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.1</string>
    </dict>
  </dict>
</dict>

Um alle unsicheren Domänen zuzulassen

<key>NSAppTransportSecurity</key>
<dict>
  <!--Include to allow all connections (DANGER)-->
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

Weitere Informationen: Konfigurieren von App Transport-Sicherheitsausnahmen in iOS 9 und OSX 10.11

11
Ashok R

Sie müssen nur HTTPS und nicht HTTP in Ihrer URL verwenden, und es wird funktionieren

9
pierre23

Ab Xcode 7.1 (Swift 2.0)

enter image description here

9
A.G

Wenn Sie kein großer XML-Fan sind, fügen Sie einfach den folgenden Tag in Ihre plist-Datei ein.

enter image description here

7
MrWaqasAhmed

iOS 9 (kann) Entwickler zwingen, ausschließlich App Transport Security zu verwenden. Ich habe das irgendwo zufällig mitgehört, also weiß ich selbst nicht, ob das stimmt. Aber ich vermute es und bin zu diesem Schluss gekommen:

Die App unter iOS 9 stellt (möglicherweise) keine Verbindung mehr zu einem Meteor-Server ohne SSL her.

Dies bedeutet, dass das Ausführen von meteor run ios oder meteor run ios-device (wahrscheinlich?) Nicht mehr funktioniert.

In der info.plist der App muss NSAppTransportSecurity [Dictionary] einen Schlüssel NSAllowsArbitraryLoads [Boolean] haben, um auf YES gesetzt zu werden, oder Meteor muss https für seinen localhost server verwenden.

5
Mahesh

Wenn Sie Xcode 8.0 bis 8.3.3 und Swift 2.2 bis 3.0 verwenden

In meinem Fall muss die URL http: // in https: // geändert werden (wenn es nicht funktioniert, versuchen Sie es)

Add an App Transport Security Setting: Dictionary.
Add a NSAppTransportSecurity: Dictionary.
Add a NSExceptionDomains: Dictionary.
Add a yourdomain.com: Dictionary.  (Ex: stackoverflow.com)

Add Subkey named " NSIncludesSubdomains" as Boolean: YES
Add Subkey named " NSExceptionAllowsInsecureHTTPLoads" as Boolean: YES

enter image description here

5

Öffne dein pList.info als Quellcode und füge unten kurz vor </dict> folgenden Code hinzu,

 <!--By Passing-->
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>your.domain.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>1.0</string>
                <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
        </dict>
    </dict>
    <!--End Passing-->

Und schließlich ändere your.domain.com mit deiner Basis-URL. Vielen Dank.

3
Najam

Ich habe es geschafft, dies mit einer Kombination vieler der genannten Optionen zu lösen. Ich werde eine Checkliste aller Dinge beifügen, die ich tun musste, damit dies funktioniert.

Zusamenfassend:

  1. Setzen Sie NSAllowsArbitraryLoads für meine Uhrenerweiterung (nicht für meine Uhren-App) auf true.
  2. Stellen Sie sicher, dass ich https und nicht http verwendet habe.

Erster Schritt:

Zuerst und am offensichtlichsten musste ich einen NSAppTransportSecurity -Schlüssel als Wörterbuch in den info.plist meiner Watch-Erweiterung einfügen, wobei der Unterschlüssel NSAllowsArbitraryLoads als Boolescher Wert auf true gesetzt wurde. Nur setzen Sie dies in der Watch-Erweiterung und nicht in der Plist der Watch-App. Beachten Sie jedoch, dass dies alle Verbindungen zulässt und unsicher sein kann.

enter image description here

oder

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

Schritt zwei:

Dann musste ich sicherstellen, dass die URL, die ich zu laden versuchte, https und nicht nur http war. Für alle URLs, die noch http waren, habe ich Folgendes verwendet:

Swift :

let newURLString = oldURLString.stringByReplacingOccurrencesOfString("http", withString: "https")

Obj-C:

NSString *newURLString = [oldURLString stringByReplacingOccurrencesOfString:@“http” withString:@“https”];

2
Gordonium

Stellen Sie sicher, dass Sie die richtige info.plist-Datei ändern .

Dies ist das zweite Mal , dass ich Zeit mit diesem Thema vergeude, weil ich nicht bemerkt habe, dass ich ändere info.plist unter MyProjectNameUITests.

2
Shefy Gur-ary

Ich habe dieses Problem bei einem selbst gehosteten Analyse-Server mit einem einjährigen signierten Zertifikat und nicht mit der Option "NSAllowsArbitraryLoads" behoben.

Parse Server als jeder node.js-Server präsentiert eine öffentliche https-URL , die Sie angeben müssen. Zum Beispiel:

analyseserver --appId --masterKey --publicServerURL https://your.public.url/some_nodejs

Schauen Sie doch mal in meine Konfigurationsdateien

0
CyrIng