web-dev-qa-db-fra.com

XCode 9 iOS 11 BoringSSL SSL_ERROR_ZERO_RETURN

J'ai un programme simple HelloWorld fonctionnant sur iOS. Le même code fonctionne bien depuis longtemps. Récemment, je remarque que l'erreur BoringSSL ci-dessous se produit lorsque le programme s'exécute sur mon ipad connecté à XCode 9 sur mon Macbook. Je ne vois pas cette erreur lorsque je lance le programme en simulateur. L'iOS est 11.2. Xcode est 9.2.

Mon code ne fait pas référence à BoringSSL. Cependant, NSMutableURLRequest est utilisé pour appeler un serveur https. L'appel fonctionne bien et tout semble bien fonctionner à l'exception des messages BoringSSL.

Existe-t-il un moyen pour que je puisse déboguer pourquoi le message est affiché? HellowWorld [466: 85961], que signifient ces 2 chiffres? 

Est-ce que quelqu'un sait ce que le message signifie et comment l'éviter?

2017-12-13 15:41:13.486047-0500 HellowWorld[466:85961] [BoringSSL] Function boringssl_session_errorlog: line 2871 [boringssl_session_read] SSL_ERROR_ZERO_RETURN(6): operation failed because the connection was cleanly shut down with a close_notify alert
2017-12-13 15:41:13.486363-0500 HellowWorld[466:85961] [BoringSSL] Function boringssl_session_errorlog: line 2871 [boringssl_session_read] SSL_ERROR_ZERO_RETURN(6): operation failed because the connection was cleanly shut down with a close_notify alert

 Screenshot added

59
Jason Duan

Existe-t-il un moyen pour que je puisse déboguer pourquoi le message est affiché?

Oui, il y en a, et je suis un peu surpris que cela n'ait pas encore été mentionné.

CFNetwork gère le noyau des classes réseau de Foundation - Il a également la capacité (souvent oubliée) de la journalisation détaillée via la variable d’environnement CFNETWORK_DIAGNOSTICS

Activation par programme de l'enregistrement CFNetwork du diagnostic:

setenv("CFNETWORK_DIAGNOSTICS", "3", 1);

Il doit être défini sur une valeur entière comprise entre 0 et 3, où 0 est désactivé et les nombres plus élevés donnent progressivement plus de journalisation. Pendant le développement normal, vous pouvez définir cette variable d’environnement via l’éditeur de schémas de Xcode. Lorsque l'application est exécutée à partir de Xcode, les entrées du journal CFNetwork apparaissent dans la zone de la console de débogage (si elles ne sont pas visibles, choisissez View> Debug Area> Show Debug Area).

La variable d’environnement doit être placée au tout début de la séquence de lancement de l’application. Il est normalement suffisant de placer cela au début de main, mais si vous avez des initialiseurs statiques C++ qui utilisent CFNetwork, vous devrez le mettre avant ceux-ci.

Remarque: dans Swift, ce code irait dans main.Swift. Par défaut, les applications Swift ne pas avoir un main.Swift; «Le langage de programmation Swift» explique comment en ajouter un.
* Notez également que dans Swift, supprimez le point-virgule à la fin de la setenv.

Définir la variable d'environnement ci-dessus devrait certainement aider à déterminer où se situe le problème, ou à tout le moins vous donner un point de départ pour commencer à diagnostiquer un message d'erreur quelque peu vague.

Journalisation des diagnostics de CFNetwork

21
l'L'l

J'ai réussi à résoudre le problème en ajoutant la clé "Paramètres de sécurité du transport d'application" à l'info.plist. Assurez-vous que "Autoriser les charges arbitraires" est défini sur "Oui".

0
AndyC

Pour ceux d'entre vous pour qui les méthodes ci-dessus n'ont pas fonctionné, voici le problème dans mon cas:

J'envoyais une requête GET avec un corps JSON request à l'aide de Alamofire . Je l'ai changé en une requête GET qui contient les paramètres en tant que paramètres de requête dans l'URL (le long des lignes de GET https://your-api.com/v1/request?param=value). Ensuite, cela a fonctionné parfaitement.

0
florianpfisterer