60 votes

Xcode 9 iOS 11 BoringSSL SSL_ERROR_ZERO_RETURN

J'ai un simple programme HelloWorld en cours d'exécution sur iOS. Le même code a été en cours d'exécution fine pour un long moment. Récemment, j'ai remarqué que je reçois le ci-dessous BoringSSL d'erreur lorsque le programme s'exécute sur mon ipad connecté à Xcode 9 sur mon Macbook. Je ne vois pas ce message d'erreur lorsque je lance le programme dans le simulateur. L'iOS 11.2. Xcode est 9.2.

Mon code n'a pas de référence à BoringSSL. Cependant, il n'utilisez NSMutableURLRequest de faire https appel à un serveur. L'appel fonctionne très bien et tout semble bien fonctionner sauf le BoringSSL messages.

Est-il une manière que je peux debug pourquoi le message? HellowWorld[466:85961], que ces 2 chiffres signifient?

Quel est le message que veut dire 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

21voto

l'L'l Points 5293

Est-il une manière que je peux debug pourquoi le message?

Oui, il est, et je suis un peu surpris qu'il n'avait pas encore été mentionnés.

CFNetwork gère la base de l' Foundations'classes pour le réseau, C'est également a la, souvent négligée, de la capacité de journalisation détaillée via l' CFNETWORK_DIAGNOSTICS variable d'environnement.

Par programme permettant CFNetwork de la journalisation des diagnostics:

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

Il doit être réglé à une valeur entière de 0 à 3, où 0 est éteint et que le nombre plus élevé de donner progressivement plus de journalisation. Au cours du développement normal, vous pouvez définir cette variable d'environnement via Xcode régime de l'éditeur. Lorsque l'application est exécutée à partir de Xcode, l' CFNetwork des entrées de journal apparaîtra dans la console de débogage de la zone (si pas visible, choisissez View > Debug Area > Show Debug Area).

La variable d'environnement doit être placé dès le début de l'application de la séquence de lancement. Normalement mettre cela au début de la main est suffisant, mais si vous avez le C++ statique initialisers qui utilisent CFNetwork vous allez avoir à mettre en avant de ceux-ci.

Remarque: Dans ce code Swift serait aller en main.swift. Par défaut Swift apps n'ont pas d' main.swift; "Le Langage de Programmation Swift" explique comment pour en ajouter une.
*Notez aussi que dans le Swift enlever le point-virgule à la fin de l' setenv.

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

CFNetwork La Journalisation Des Diagnostics

0voto

AndyC Points 80

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

0voto

florianpfisterer Points 644

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 demande GET avec un corps de demande JSON utilisant Alamofire . Je l'ai remplacée par une requête GET contenant les paramètres sous forme de 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.

-1voto

gav Points 732

J'ai reçu un message similaire lorsque j'essayais d'utiliser NSLog pour publier une très longue liste, car la liste serait affichée longtemps dans la console de débogage, puis une partie de la liste était suivie de ... à montrer il y avait plus qui n'était pas imprimé dans la console, j'ai résolu ce problème (en utilisant OBJ-C) et en ajoutant cette #define à mon VC.m

 #define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
 

Peut-être pouvez-vous utiliser quelque chose de similaire à votre projet rapide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X