De bron kan niet worden geladen omdat het App Transport Security-beleid het gebruik van een beveiligde verbinding vereist

Ik heb te maken met het probleem wanneer ik mijn Xcode heb bijgewerkt naar 7.0 of iOS 9.0.
Op de een of andere manier begon het me de titelfout te geven

“De bron kan niet worden geladen omdat de App Transport Security
beleid vereist het gebruik van een beveiligde verbinding”

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];
}

De service werkt prima voor eerdere versies van Xcode en eerdere iOS-versies. Maar toen ik heb bijgewerkt naar Xcode 7.0 op iOS 9.0, kreeg ik het probleem zoals het volgende wanneer ik de bovenstaande webservice-methode aanroep. De gelogde fout die ik krijg is:

Verbinding mislukt: Error Domain=NSURLErrorDomain Code=-1022 “The
bron kan niet worden geladen omdat het App Transport Security-beleid
vereist het gebruik van een beveiligde verbinding.”
UserInfo={NSunderlyingError=0x7fada0f31880 {Fout
Domein=kCFErrorDomainCFNetwerkcode=-1022 “(null)”},
NSErrorFailingURLStringKey=MijnServiceURL,
NSErrorFailingURLKey=MijnServiceURL,
NSLocalizedDescription=De bron kon niet worden geladen omdat de
App Transport Security-beleid vereist het gebruik van een beveiligde
verbinding.}

Ik heb de volgende vragen en antwoorden geprobeerd, maar kreeg daar geen resultaat. Is er een idee hoe ik die serviceoproepfout kan verwijderen?

  1. De bron kan niet worden geladen is ios9
  2. App Transport Security Xcode 7 beta 6
  3. https://stackoverflow.com/a/32609970

Antwoord 1, autoriteit 100%

Ik heb het opgelost door een sleutel toe te voegen aan info.plist.
De stappen die ik heb gevolgd zijn:

  1. Het bestand info.plistvan mijn projectdoel geopend

  2. Een sleutel met de naam NSAppTransportSecuritytoegevoegd als Dictionary.

  3. Een subsleutel toegevoegd met de naam NSAllowsArbitraryLoadsals Booleanen stel de waarde in op YESzoals in de volgende afbeelding.

voer hier de afbeeldingsbeschrijving in

Maak het project schoon en nu werkt alles weer zoals voorheen.

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

BEWERKEN:
OF In de broncode van het bestand info.plistkunnen we dat toevoegen:

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

Antwoord 2, autoriteit 30%

Let op, het gebruik van NSAllowsArbitraryLoads = truein de info.plistvan het project zorgt ervoor dat alle verbindingen met elke server onveilig zijn. Als je er zeker van wilt zijn dat alleen een specifiek domeintoegankelijk is via een onveilige verbinding, probeer dan dit:

voer hier de afbeeldingsbeschrijving in

Of, als broncode:

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

Schoon & Project bouwen na bewerking.


Antwoord 3, autoriteit 5%

Transportbeveiligingwordt geleverd in iOS 9.0 of hoger en in OS X v10.11 en hoger.

Dus standaard zijn alleen https-oproepen alleen toegestaan ​​in apps. Om App Transport Security uit te schakelen, voegt u de volgende regels toe aan het bestand info.plist

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

Voor meer info:
https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33


Antwoord 4, autoriteit 4%

Voor iOS 10.x en Swift 3.x [onderstaande versies worden ook ondersteund] voegt u gewoon de volgende regels toe in ‘info.plist’

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

Antwoord 5, autoriteit 3%

In Swift 4 kunt u

->Go Info.plist

-> Klik op plus van de lijst met informatie-eigenschappen

->Voeg App Transport Security Settingstoe als woordenboek

-> Klik op het plus-pictogram App Transport-beveiligingsinstellingen

-> Voeg Sta willekeurige ladingen toetoe JA

Balgafbeelding ziet eruit als

voer hier de afbeeldingsbeschrijving in


Antwoord 6, autoriteit 2%

Ik heb het opgelost als plist-bestand.

Voeg een NSAppTransportSecurity: Woordenboek toe.

Subsleutel met de naam “NSAllowsArbitraryLoads” toevoegen als Boolean: YES

invoeren afbeelding beschrijving hier


Antwoord 7, autoriteit 2%

De bron kan niet worden geladen omdat het App Transport Security-beleid het gebruik van een beveiligde verbinding vereist die werkt in Swift 4.03.

Open je pList.info als broncode en plak:

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

Antwoord 8, autoriteit 2%

Dit is de manier van Apple om uw api’s strenger te beveiligen (gedwongen om https te gebruiken via http). Ik zal uitleggen hoe je deze beveiligingsinstelling kunt verwijderen.


De meeste antwoorden hier wijzen op het toevoegen van deze sleutel aan uw info.plist
voer hier de afbeeldingsbeschrijving in

Dit alleen loste dit probleem voor mij niet op.
Ik moest dezelfde sleutel toevoegen aan de binnenkant

Project -> Targets -> Info -> Custom iOS Target Properties
voer hier de afbeeldingsbeschrijving in


Hierdoor kunnen echter onveilige verbindingen van iedereen plaatsvinden. Als u alleen een specifiek domein wilt toestaan ​​om onveilige verbindingen te maken, kunt u het volgende toevoegen aan uw info.plist.

voer hier de afbeeldingsbeschrijving in


Antwoord 9

Van Apple-documentatie

Als u een nieuwe app ontwikkelt, moet u uitsluitend HTTPS gebruiken. Als je een bestaande app hebt, moet je HTTPS nu zo veel mogelijk gebruiken en een plan maken om de rest van je app zo snel mogelijk te migreren. Bovendien moet uw communicatie via API’s op een hoger niveau worden versleuteld met TLS-versie 1.2 met voorwaartse geheimhouding. Als u een verbinding probeert te maken die niet aan deze vereiste voldoet, wordt een fout gegenereerd. Als uw app een verzoek moet indienen bij een onveilig domein, moet u dit domein specificeren in het Info.plist-bestand van uw app.

App-transportbeveiliging omzeilen:

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

Alle onveilige domeinen toestaan

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

Lees meer: ​​Beveiligingsuitzonderingen voor app-transport configureren in iOS 9 en OSX 10.11


Antwoord 10

Als je Xcode 8.0 en Swift 3.0 of 2.2 gebruikt

voer hier de afbeeldingsbeschrijving in


Antwoord 11

Vanaf Xcode 7.1 (swift 2.0)

voer hier de afbeeldingsbeschrijving in


Antwoord 12

Als je geen grote fan bent van XML, voeg dan gewoon onderstaande tag toe aan je plist-bestand.

voer hier de afbeeldingsbeschrijving in


Antwoord 13

Je hoeft alleen maar HTTPS te gebruiken en niet HTTP in je URL en het zal werken


Antwoord 14

iOS 9 dwingt (mogelijk) ontwikkelaars om exclusief App Transport Securityte gebruiken. Ik hoorde dit ergens willekeurig, dus ik weet niet of dit zelf waar is. Maar ik vermoed het en ben tot deze conclusie gekomen:

De app die draait op iOS 9 zal (misschien) geen verbinding meer maken met een Meteor-server zonder SSL.

Dit betekent dat het draaien van meteor run ios of meteor run ios-device (waarschijnlijk?) niet meer zal werken.

In de info.plist van de app moet NSAppTransportSecurity [Dictionary]een sleutel hebben NSAllowsArbitraryLoads [Boolean]die moet worden ingesteld op YESof Meteor moet binnenkort httpsgebruiken voor zijn localhost server.


Antwoord 15

Als je Xcode 8.0 tot 8.3.3 en Swift 2.2 tot 3.0 gebruikt

In mijn geval moet de URL http://worden gewijzigd in https://(als het niet werkt, probeer het dan)

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

voer hier de afbeeldingsbeschrijving in


Antwoord 16

Voor degenen onder u die zich ontwikkelen op localhost, volg deze stappen:

  1. Tik op de knop “+” naast Information Property Listen voeg App Transport Security Settingstoe en wijs het een DictionaryType toe
  2. Tik op de knop “+” naast het nieuw gemaakte item App Transport Security Settingsen voeg NSExceptionAllowsInsecureHTTPLoadsvan het type Booleantoe en stel de waarde ervan in tot YES.
  3. Klik met de rechtermuisknop op het item NSExceptionAllowsInsecureHTTPLoadsen klik op de optie “Rij naar rechts verschuiven” om het een onderliggend item van het bovenstaande item te maken.
  4. Tik op de knop “+” naast het NSExceptionAllowsInsecureHTTPLoads-item en voeg Allow Arbitrary Loadsvan het type Booleantoe en stel de waarde in op YES

Opmerking: het zou er uiteindelijk ongeveer zo uit moeten zien als in de volgende afbeelding

voer hier de afbeeldingsbeschrijving in


Antwoord 17

Zorg ervoor dat u het juiste info.plist-bestand wijzigt.

Dit is de tweede keerdat ik tijd verspil aan dit probleem, omdat ik niet heb gemerkt dat ik info.plist verander onder MyProjectNameUITests.


Antwoord 18

Als u firebase gebruikt, wordt NSAllowsArbitraryLoadsInWebContent = truetoegevoegd aan de sectie NSAppTransportSecurityen werkt NSAllowsArbitraryLoads = trueniet

Other episodes