Je fais face au problème lorsque j'ai mis à jour mon Xcode vers 7.0 ou iOS 9.0. D'une manière ou d'une autre, cela a commencé à me donner l'erreur intitulée
"La ressource n'a pas pu être chargée car la stratégie de sécurité du transport d'application nécessite l'utilisation d'une connexion sécurisée"
Méthode de Webservice:
-(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];
}
Le service fonctionne correctement pour les versions antérieures de Xcode et les versions précédentes d'iOS Mais lorsque j'ai mis à jour vers Xcode 7.0 qui est sur iOS 9.0, il a commencé à me poser le problème comme suit lorsque j'appelle la méthode de service Web ci-dessus. L'erreur enregistrée que j'obtiens est:
Échec de la connexion: Erreur Domain = NSURLErrorDomain Code = -1022 "La ressource n'a pas pu être chargée car la stratégie de sécurité du transport d'application nécessite l'utilisation d'une connexion sécurisée." UserInfo = {NSUnderlyingError = 0x7fada0f31880 {Error Domain = kCFErrorDomainCFNetwork Code = -1022 "(null)"}, NSErrorFailingURLStringKey = MyServiceURL , NSErrorFailingURLKey = MyServiceURL , NSLocalizedDescription = La ressource pourrait ne pas sécuriser l'utilisation de l'application connexion.}
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 à l'avance de la façon de supprimer cette erreur d'appel de service?
la source
Réponses:
Je l'ai résolu en ajoutant une clé dans info.plist. Les étapes que j'ai suivies sont:
Ouverture du
info.plist
fichier de ma cible de projetAjout d'une clé appelée
NSAppTransportSecurity
commeDictionary
.NSAllowsArbitraryLoads
asBoolean
et définissez sa valeurYES
comme sur l'image suivante.Nettoyez le projet et maintenant tout fonctionne bien comme avant.
Lien de référence: https://stackoverflow.com/a/32609970
EDIT: OU Dans le code source du
info.plist
fichier, nous pouvons ajouter que:la source
NSExceptionDomains
. Sinon, ce sera une exceptionNSAllowArbitraryLoads
, alors vous devez utiliser https pour visiter ceciexception
App Transport Security Settings
etAllow Arbitrary Loads
respectivementSoyez conscient, l'utilisation
NSAllowsArbitraryLoads = true
dans le projetinfo.plist
permet à toute connexion à n'importe quel serveur d'être non sécurisée. Si vous voulez vous assurer que seul un domaine spécifique est accessible via une connexion non sécurisée, essayez ceci:Ou, comme code source:
Projet Clean & Build après modification.
la source
La sécurité du transport est fournie dans iOS 9.0 ou version ultérieure, et dans OS X v10.11 et version ultérieure.
Par défaut, seuls les appels https ne sont autorisés que dans les applications. Pour désactiver App Transport Security, ajoutez les lignes suivantes dans le fichier info.plist ...
Pour plus d'informations:
https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33
la source
Pour iOS 10.x et Swift 3.x [les versions ci-dessous sont également prises en charge] ajoutez simplement les lignes suivantes dans 'info.plist'
la source
Dans Swift 4, vous pouvez utiliser
-> Aller Info.plist
-> Cliquez sur plus de la liste des propriétés de l'information
-> Ajouter des paramètres de sécurité de transport d'application en tant que dictionnaire
-> Cliquez sur l'icône Plus Paramètres de sécurité du transport d'application
-> Ajouter Autoriser les charges arbitraires défini OUI
L'image ci-dessous ressemble
la source
J'ai résolu comme fichier plist.
Ajoutez un NSAppTransportSecurity: Dictionary.
Ajouter une sous-clé nommée "NSAllowsArbitraryLoads" en tant que booléen: OUI
la source
La ressource n'a pas pu être chargée car la stratégie de sécurité du transport d'application nécessite l'utilisation d'une connexion sécurisée fonctionnant dans Swift 4.03.
Ouvrez votre pList.info en tant que code source et collez:
la source
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 possible en ce moment et créer un plan pour migrer le reste de votre application dès que possible. De plus, votre communication via des API de niveau supérieur doit être chiffrée à l'aide de TLS version 1.2 avec secret à terme. Si vous essayez d'établir une connexion qui ne respecte pas cette exigence, une erreur est générée. Si votre application doit faire une demande à un domaine non sécurisé, vous devez spécifier ce domaine dans le fichier Info.plist de votre application.
Pour contourner la sécurité du transport d'application:
Pour autoriser tous les domaines non sécurisés
En savoir plus: Configuration des exceptions de sécurité de transport d'application dans iOS 9 et OSX 10.11
la source
Si vous utilisez Xcode 8.0 et swift 3.0 ou 2.2
la source
À partir de Xcode 7.1 (swift 2.0)
la source
C'est la façon qu'Apple impose de renforcer la sécurité sur vos API (forcé d'utiliser https sur http). Je vais vous expliquer comment supprimer ce paramètre de sécurité.
La plupart des réponses ici soulignent l'ajout de cette clé à votre info.plist
Cela seul n'a pas résolu ce problème pour moi. J'ai dû ajouter la même clé à l'intérieur
Project -> Targets -> Info -> Custom iOS Target Properties
Cela permettra cependant à des connexions non sécurisées de se produire. Si vous souhaitez autoriser uniquement un domaine spécifique à utiliser des connexions non sécurisées, vous pouvez ajouter ce qui suit à votre info.plist.
la source
Vous avez juste besoin d'utiliser HTTPS et non HTTP dans votre URL et cela fonctionnera
la source
Si vous n'êtes pas un grand fan de XML, ajoutez simplement la balise ci-dessous dans votre fichier plist.
la source
iOS 9 (peut) forcer les développeurs à utiliser exclusivement App Transport Security . J'ai entendu cela quelque part au hasard, donc je ne sais pas si c'est vrai moi-même. Mais je le soupçonne et je suis arrivé à cette conclusion:
L'application fonctionnant sur iOS 9 ne se connectera peut-être plus à un serveur Meteor sans SSL.
Cela signifie que l'exécution de meteor run ios ou meteor run ios-device ne fonctionnera (probablement?) Plus.
Dans info.plist de l'application,
NSAppTransportSecurity [Dictionary]
doit avoir une cléNSAllowsArbitraryLoads [Boolean]
à définirYES
ou Meteor doit l'utiliserhttps
pourlocalhost server
bientôt.la source
Si vous utilisez Xcode 8.0 à 8.3.3 et swift 2.2 à 3.0
la source
Ouvrez votre pList.info en tant que code source et en bas juste avant d'
</dict>
ajouter le code suivant,Et changez enfin
your.domain.com
avec votre URL de base. Merci.la source
Pour ceux d'entre vous qui développent sur localhost, procédez comme suit:
Information Property List
et ajoutezApp Transport Security Settings
et attribuez-lui unDictionary
typeApp Transport Security Settings
entrée nouvellement créée et ajoutezNSExceptionAllowsInsecureHTTPLoads
du typeBoolean
et définissez sa valeur surYES
.NSExceptionAllowsInsecureHTTPLoads
entrée et cliquez sur l'option "Shift Row Right" pour en faire un enfant de l'entrée ci-dessus.NSExceptionAllowsInsecureHTTPLoads
entrée et ajoutezAllow Arbitrary Loads
du typeBoolean
et définissez sa valeur surYES
Remarque: il devrait à la fin ressembler à quelque chose comme présenté dans l'image suivante
la source
J'ai réussi à résoudre ce problème avec une combinaison de nombreuses options mentionnées. Je vais inclure une liste de contrôle de toutes les choses que je devais faire pour que cela fonctionne.
En bref:
NSAllowsArbitraryLoads
sur true pour mon extension de montre (pas mon application de montre).https
et nonhttp
.La première étape:
Tout d'abord et le plus évidemment, j'ai dû ajouter une
NSAppTransportSecurity
clé en tant que dictionnaire dans l'extension de ma montreinfo.plist
avec une sous-clé appelée enNSAllowsArbitraryLoads
tant que booléen définie sur true. Ne le définissez que dans l'extension de la montre et non dans le plist de l'application de montre. Bien noter que cela permet toutes les connexions et pourrait être peu sûr.ou
Deuxième étape:
Ensuite, je devais m'assurer que l'URL que j'essayais de charger était
https
et pas seulementhttp
. Pour toutes les URL qui étaient encore http, j'ai utilisé:Rapide :
let newURLString = oldURLString.stringByReplacingOccurrencesOfString("http", withString: "https")
Obj-C:
NSString *newURLString = [oldURLString stringByReplacingOccurrencesOfString:@“http” withString:@“https”];
la source
Assurez-vous de modifier le bon fichier info.plist .
C'est la deuxième fois que je perds du temps sur ce problème, car je n'ai pas remarqué que je change info.plist sous MyProjectNameUITests.
la source
Si vous utilisez Firebase, il s'ajoutera
NSAllowsArbitraryLoadsInWebContent = true
dans laNSAppTransportSecurity
section etNSAllowsArbitraryLoads = true
ne fonctionnera pasla source
J'ai résolu ce problème dans le cas d'un serveur d'analyse auto-hébergé utilisant un certificat signé d'un an plutôt que l'option "NSAllowsArbitraryLoads"
Analyser le serveur comme n'importe quel serveur node.js présente une URL https publique que vous devez spécifier. Par exemple:
serveur-parse --appId --masterKey --publicServerURL https: //your.public.url/some_nodejs
N'hésitez pas à jeter un œil à mes fichiers de configuration
la source