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?
- De bron kan niet worden geladen is ios9
- App Transport Security Xcode 7 beta 6
- 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:
-
Het bestand
info.plist
van mijn projectdoel geopend -
Een sleutel met de naam
NSAppTransportSecurity
toegevoegd alsDictionary
. -
Een subsleutel toegevoegd met de naam
NSAllowsArbitraryLoads
alsBoolean
en stel de waarde in opYES
zoals in de volgende afbeelding.
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.plist
kunnen 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 = true
in de info.plist
van 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:
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>
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
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
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
Dit alleen loste dit probleem voor mij niet op.
Ik moest dezelfde sleutel toevoegen aan de binnenkant
Project -> Targets -> Info -> Custom iOS Target Properties
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.
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
Antwoord 11
Vanaf Xcode 7.1 (swift 2.0)
Antwoord 12
Als je geen grote fan bent van XML, voeg dan gewoon onderstaande tag toe aan je plist-bestand.
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 YES
of Meteor moet binnenkort https
gebruiken 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
Antwoord 16
Voor degenen onder u die zich ontwikkelen op localhost, volg deze stappen:
- Tik op de knop “+” naast
Information Property List
en voegApp Transport Security Settings
toe en wijs het eenDictionary
Type toe - Tik op de knop “+” naast het nieuw gemaakte item
App Transport Security Settings
en voegNSExceptionAllowsInsecureHTTPLoads
van het typeBoolean
toe en stel de waarde ervan in totYES
. - Klik met de rechtermuisknop op het item
NSExceptionAllowsInsecureHTTPLoads
en klik op de optie “Rij naar rechts verschuiven” om het een onderliggend item van het bovenstaande item te maken. - Tik op de knop “+” naast het
NSExceptionAllowsInsecureHTTPLoads
-item en voegAllow Arbitrary Loads
van het typeBoolean
toe en stel de waarde in opYES
Opmerking: het zou er uiteindelijk ongeveer zo uit moeten zien als in de volgende afbeelding
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 = true
toegevoegd aan de sectie NSAppTransportSecurity
en werkt NSAllowsArbitraryLoads = true
niet