J'ai essayé d'exécuter mon application existante sur iOS9 mais j'ai échoué lors de l'utilisation AFURLSessionManager
.
__block NSURLSessionDataTask *task = [self.sessionManager dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) {
if (error) {
} else {
}
}];
[task resume];
J'obtiens l'erreur suivante:
Error Domain=NSURLErrorDomain Code=-999 "cancelled.
Obtention également des journaux suivants:
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824
CFNetwork SSLHandshake failed (-9824)
Mise à jour: j'ai ajouté plusieurs mises à jour à ma solution: le chargement HTTP de NSURLSession / NSURLConnection a échoué sur iOS 9
Réponses:
Solution trouvée:
Dans iOS9, ATS applique les meilleures pratiques lors des appels réseau, y compris l'utilisation de HTTPS.
À partir de la documentation Apple:
ATS empêche la divulgation accidentelle, fournit un comportement par défaut sécurisé et est facile à adopter. Vous devez adopter ATS dès que possible, que vous créiez une nouvelle application ou que vous mettiez à jour une application existante. 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 dès maintenant et créer un plan pour migrer le reste de votre application dès que possible.
Dans la version bêta 1, il n'y a actuellement aucun moyen de définir cela dans info.plist. La solution est de l'ajouter manuellement:
Update1: il s'agit d'une solution de contournement temporaire jusqu'à ce que vous soyez prêt à adopter la prise en charge d'iOS9 ATS.
Update2: Pour plus de détails, veuillez consulter le lien suivant: http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/
Update3: Si vous essayez de vous connecter à un hôte (YOURHOST.COM) qui n'a que TLS 1.0
Ajoutez-les à Info.plist de votre application
la source
NSTemporaryExceptionMinimumTLSVersion
doit être par exemple TLSv1.0 au lieu de 1.0 , voir NSAppTransportSecurity Exception Domaines de clés de dictionnaireComment gérer le SSL dans iOS9 , Une solution consiste à faire comme:
Comme le dit Apple :
iOS 9 et OSX 10.11 nécessitent SSL TLSv1.2 pour tous les hôtes auxquels vous prévoyez de demander des données, sauf si vous spécifiez des domaines d'exception dans le fichier Info.plist de votre application.
La syntaxe de la configuration Info.plist ressemble à ceci:
Si votre application (un navigateur Web tiers, par exemple) doit se connecter à des hôtes arbitraires, vous pouvez la configurer comme suit:
Si vous devez le faire, il est probablement préférable de mettre à jour vos serveurs pour qu'ils utilisent TLSv1.2 et SSL, s'ils ne le font pas déjà. Cela doit être considéré comme une solution de contournement temporaire.
À ce jour, la documentation de la version préliminaire ne fait aucune mention d'aucune de ces options de configuration. Une fois cela fait, je mettrai à jour la réponse pour créer un lien vers la documentation pertinente.
Pour plus d'informations, accédez à iOS9AdaptationTips
la source
La technote d'Apple sur la sécurité du transport des applications est très pratique ; cela nous a aidés à trouver une solution plus sûre à notre problème.
J'espère que cela aidera quelqu'un d'autre. Nous avions des problèmes de connexion aux URL Amazon S3 qui semblaient être des URL HTTPS TLSv12 parfaitement valides. Il s'avère que nous avons dû désactiver
NSExceptionRequiresForwardSecrecy
pour activer une autre poignée de chiffrements utilisés par S3.Dans notre
Info.plist
:la source
Si vous rencontrez ce problème avec Amazon S3 comme moi, essayez de le coller sur votre info.plist en tant qu'enfant direct de votre balise de niveau supérieur
Vous pouvez trouver plus d'informations sur:
http://docs.aws.amazon.com/mobile/sdkforios/developerguide/ats.html#resolving-the-issue
la source
J'ai trouvé une solution d' ici. Et ça marche pour moi.
Vérifiez ceci, cela peut vous aider.
la source
Ajoutez simplement les champs suivants dans votre fichier .plist
La syntaxe ressemble à ceci:
la source
Mettre à jour:
Depuis Xcode 7.1, vous n'avez pas besoin de saisir manuellement le
NSAppTransportSecurity
dictionnaire dans le fichierinfo.plist
.Il se complétera maintenant automatiquement pour vous, réalisera qu'il s'agit d'un dictionnaire, puis complétera automatiquement les
Allows Arbitrary
charges. Capture d'écran info.plistla source
Résoudre le bogue de chargement de NSURLConnection Http a échoué Ajoutez simplement le dicton suivant dans info.plist:
la source
Je l'ai résolu en ajoutant une clé dans info.plist. Les étapes que j'ai suivies sont:
J'ai ouvert le fichier info.plist de mon projet
Ajout d'une clé appelée NSAppTransportSecurity en tant que dictionnaire.
Ajout d'une sous-clé appelée NSAllowsArbitraryLoads en tant que booléen et définissez sa valeur sur YES comme dans l'image suivante. entrez la description de l'image ici
Nettoyez le projet et maintenant tout fonctionne correctement comme avant.
Lien de référence: https://stackoverflow.com/a/32609970
la source
C'est ce qui a fonctionné pour moi lorsque j'ai eu cette erreur:
la source
Vous pouvez essayer d'ajouter cette fonction dans le fichier RCTHTTPRequestHandler.m
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler { completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]); }
la source
En plus des réponses mentionnées ci-dessus, revérifiez votre URL
la source
Vous devez ajouter
App Transport Security Settings
àinfo.plist
et ajouterAllow Arbitrary Loads
àApp Transport Security Settings
la source