La ressource n'a pas pu être chargée car la stratégie de security du transport de l'application nécessite l'utilisation d'une connection sécurisée

Je suis confronté au problème lorsque j'ai mis à jour mon Xcode à 7.0 ou iOS 9.0. D'une certaine manière, il a commencé à me donner l'erreur titrée

"La ressource n'a pas pu être chargée car la stratégie de security du transport de l'application nécessite l'utilisation d'une connection sécurisée"

Méthode de service Web:

-(void)ServiceCall:(NSSsortingng*)ServiceName :(NSSsortingng *)DataSsortingng { NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; [sessionConfiguration setAllowsCellularAccess:YES]; [sessionConfiguration setHTTPAdditionalHeaders:@{ @"Accept" : @"application/json" }]; NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration]; NSURL *url = [NSURL URLWithSsortingng:[NSSsortingng ssortingngWithFormat:@"%@",ServiceURL]]; NSLog(@"URl %@%@",url,DataSsortingng); // Configure the Request NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; [request setValue:[NSSsortingng ssortingngWithFormat:@"%@=%@", strSessName, strSessVal] forHTTPHeaderField:@"Cookie"]; request.HTTPBody = [DataSsortingng dataUsingEncoding:NSUTF8SsortingngEncoding]; 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(@"%@",[NSSsortingng ssortingngWithFormat:@"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; } NSSsortingng *retVal = [[NSSsortingng alloc] initWithData:data encoding:NSUTF8SsortingngEncoding]; }]; [postDataTask resume]; } 

Le service fonctionne bien pour les versions précédentes de Xcode et les versions précédentes d'iOS. Mais lorsque j'ai mis à jour vers Xcode 7.0 sur iOS 9.0, il a commencé à me poser le problème suivant lorsque j'appelle la méthode de service Web ci-dessus. L'erreur enregistrée que je reçois est:

Échec de la connection: Erreur Domaine = NSURLErrorDomain Code = -1022 "La ressource n'a pas pu être chargée car la stratégie de security du transport de l'application nécessite l'utilisation d'une connection sécurisée." UserInfo = {NSUnderlyingError = 0x7fada0f31880 {Erreur domaine = kCFErrorDomainCFNetwork Code = -1022 "(NULL)"}, NSErrorFailingURLSsortingngKey = MyServiceURL , NSErrorFailingURLKey = MyServiceURL , NSLocalizedDescription = La ressource n'a pas pu être chargée car la stratégie de security du transport de l'application nécessite l'utilisation d'un connection.}

J'ai essayé de suivre les questions et réponses, mais je n'ai obtenu aucun résultat, y a-t-il une idée avancée de la façon dont je peux supprimer cette erreur d'appel de service?

  1. La ressource n'a pas pu être chargée est ios9
  2. App Transport Security Xcode 7 beta 6
  3. https://stackoverflow.com/a/32609970

Je l'ai résolu en ajoutant une key dans info.plist. Les étapes que j'ai suivies sont:

  1. Ouvert mon file Projets info.plist

  2. Ajout d'une key appelée NSAppTransportSecurity tant que Dictionary .

  3. Ajout d'une sous-key appelée NSAllowsArbitraryLoads tant que Boolean et définissez sa valeur sur YES comme l'image suivante.

entrez la description de l'image ici

Nettoyez le projet et maintenant tout fonctionne comme avant.

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

EDIT: OU Dans le code source du file info.plist , nous pouvons append que:

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

Sachez NSAllowsArbitraryLoads = true utilisant NSAllowsArbitraryLoads = true toute connection à un server n'est pas sécurisée. Si vous voulez vous assurer que seul un domaine spécifique est accessible via une connection non sécurisée, essayez ceci:

entrez la description de l'image ici

Ou, en tant que code source:

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

Projet Clean & Build après l'édition.

Pour iOS 10.x et Swift 3.x [les versions ci-dessous sont également supscopes] il suffit d'append les lignes suivantes dans 'info.plist'

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

La security du transport est fournie dans iOS 9.0 ou version ultérieure et dans OS X v10.11 et versions ultérieures.

Ainsi, par défaut, seuls les appels https sont autorisés dans les applications. Pour désactiver App Transport Security, ajoutez les lignes suivantes dans le file info.plist

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

Pour plus d'informations:
https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33

J'ai résolu comme dossier de plist.

Ajoutez un NSAppTransportSecurity: Dictionary.

Ajouter une sous-key nommée "NSAllowsArbitraryLoads" en tant que boolean: OUI

entrez la description de l'image ici

Dans Xcode 7.1 (swift 2.0)

entrez la description de l'image ici

De la documentation Apple

Si vous développez une nouvelle application, vous devez utiliser HTTPS exclusivement. Si vous avez une application existante, vous devez utiliser HTTPS autant que vous le pouvez en ce moment, et créer un plan pour migrer le rest de votre application dès que possible. En outre, votre communication via des API de niveau supérieur doit être cryptée à l'aide de TLS version 1.2 avec le secret de transfert. Si vous essayez d'établir une connection qui ne respecte pas cette condition, une erreur est générée. Si votre application doit faire une request à un domaine non sécurisé, vous devez spécifier ce domaine dans le file Info.plist de votre application.

Pour contourner la security du transport de l'application:

 <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> <ssortingng>TLSv1.1</ssortingng> </dict> </dict> </dict> 

Pour autoriser tous les domaines non sécurisés

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

En savoir plus: Configuration des exceptions de security du transport de l'application dans iOS 9 et OSX 10.11

Si vous utilisez Xcode 8.0 et swift 3.0 ou 2.2

entrez la description de l'image ici

iOS 9 (peut) oblige les développeurs à utiliser App Transport Security exclusivement. Je l'ai entendu quelque part au hasard, donc je ne sais pas si c'est vrai moi-même. Mais je le soupçonne et suis arrivé à cette conclusion:

L'application fonctionnant sur iOS 9 ne se connectera peut-être plus à un server Meteor sans SSL.

Cela signifie que l'exécution de météos run ios ou meteor run ios-device ne fonctionnera probablement pas (probablement?).

Dans le file NSAppTransportSecurity [Dictionary] l'application, NSAppTransportSecurity [Dictionary] doit avoir une key NSAllowsArbitraryLoads [Boolean] définie sur YES ou Meteor doit bientôt utiliser https pour son localhost server .

Vous avez juste besoin d'utiliser HTTPS et pas HTTP dans votre URL et cela fonctionnera

J'ai réussi à résoudre cela avec une combinaison de plusieurs des options mentionnées. Je vais inclure une list de toutes les choses que je devais faire pour que cela fonctionne.

En bref:

  1. Définissez NSAllowsArbitraryLoads sur true pour mon extension de surveillance (et non sur mon application de surveillance).
  2. Assurez-vous d'utiliser https et non http .

La première étape:

Tout d'abord et surtout, j'ai dû append une key NSAppTransportSecurity tant que dictionary dans info.plist de ma montre avec une sous-key appelée NSAllowsArbitraryLoads tant que boolean à true. Définissez-le uniquement dans l'extension de la montre et non dans le plist de l'application de surveillance. Bien que prendre note que cela permet toutes les connections et pourrait être non sécurisé.

entrez la description de l'image ici

ou

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

Deuxième étape:

Ensuite, je devais m'assurer que l'URL que j'essayais de charger était https et pas seulement http . Pour toutes les URL qui étaient encore http j'ai utilisé:

Swift :

let newURLSsortingng = oldURLSsortingng.ssortingngByReplacingOccurrencesOfSsortingng("http", withSsortingng: "https")

Obj-C:

NSSsortingng *newURLSsortingng = [oldURLSsortingng ssortingngByReplacingOccurrencesOfSsortingng:@“http” withSsortingng:@“https”];

J'ai résolu ce problème dans le cas d'un server parse auto-hébergé utilisant un certificate signé d'un an plutôt que l'option "NSAllowsArbitraryLoads"

Parse Server comme n'importe quel server node.js présente une URL https publique que vous devez spécifier. Par exemple:

parse-server –appId –masterKey –publicServerURL https: //your.public.url/some_nodejs

N'hésitez pas à jeter un oeil à mes files de configuration

Si vous n'êtes pas un grand fan de XML, alors ajoutez simplement la balise ci-dessous dans votre file plist.

entrez la description de l'image ici

Si vous utilisez Xcode 8.0 à 8.3.3 et swift 2.2 à 3.0

Dans mon cas, besoin de changer l'URL http: // à https: // (si cela ne fonctionne pas, essayez)

 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 

entrez la description de l'image ici

Ouvrez votre pList.info comme code source et en bas juste avant </dict> ajoutez le code suivant,

  <!--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> <ssortingng>1.0</ssortingng> <key>NSTemporaryExceptionRequiresForwardSecrecy</key> <false/> </dict> </dict> </dict> <!--End Passing--> 

Et enfin, changez your.domain.com avec votre URL de base. Merci.