wake-up-neo.net

XCode 9 iOS 11 BoringSSL SSL_ERROR_ZERO_RETURN

Ich habe ein einfaches Programm HelloWorld, das auf iOS läuft. Derselbe Code läuft schon lange gut. Vor kurzem stelle ich fest, dass ich den untenstehenden BoringSSL-Fehler bekomme, wenn das Programm auf meinem mit XCode 9 verbundenen iPad auf meinem Macbook ausgeführt wird. Ich sehe diesen Fehler nicht, wenn ich das Programm im Simulator starte. Das iOS ist 11.2. Xcode ist 9.2.

Mein Code hat keinen Bezug zu BoringSSL. Es verwendet jedoch NSMutableURLRequest, um einen Server über https aufzurufen. Der Aufruf funktioniert einwandfrei und alles scheint gut zu funktionieren, mit Ausnahme der BoringSSL-Nachrichten.

Gibt es eine Möglichkeit, wie ich debuggen kann, warum die Nachricht erscheint? HellowWorld [466: 85961], was bedeuten diese beiden Zahlen? 

Weiß jemand, was die Nachricht bedeutet und wie man sie vermeiden kann?

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

Gibt es eine Möglichkeit, wie ich debuggen kann, warum die Nachricht erscheint?

Ja, da ist und ich bin ein bisschen überrascht, dass es noch nicht erwähnt wurde.

CFNetwork handhabt den Kern der Netzwerkklassen von Foundation. Außerdem verfügt es über die (oft übersehene) Möglichkeit der detaillierten Protokollierung über die Umgebungsvariable CFNETWORK_DIAGNOSTICS

Programmgesteuertes Aktivieren der CFNetwork-Diagnoseprotokollierung:

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

Es sollte auf einen ganzzahligen Wert von 0 bis 3 gesetzt werden, wobei 0 deaktiviert ist und höhere Zahlen zunehmend mehr Protokollierung ergeben. Während der normalen Entwicklung können Sie diese Umgebungsvariable über den Schema-Editor von Xcode festlegen. Wenn die App über Xcode ausgeführt wird, werden die Protokolleinträge CFNetwork im Debug-Konsolenbereich angezeigt (falls nicht sichtbar, wählen Sie View> Debug Area> Show Debug Area).

Die Umgebungsvariable sollte am Anfang der Startsequenz der App stehen. Normalerweise reicht es aus, dies an den Anfang von main zu setzen, aber wenn Sie statische C++ - Initialisierer haben, die CFNetwork verwenden, müssen Sie es vor diesen setzen.

Hinweis: In Swift würde dieser Code in main.Swift gehen. Standardmäßig sind Swift-Apps habe keinen main.Swift; "Die Programmiersprache Swift" erläutert, wie eine hinzufügen.
* Beachten Sie auch, dass in Swift das Semikolon am Ende von setenv entfernt wird.

Das Festlegen der Umgebungsvariable oben sollte auf jeden Fall helfen, zu ermitteln, wo das Problem liegt, oder zumindest einen Startpunkt für die Diagnose einer etwas vagen Fehlermeldung geben.

CFNetwork-Diagnoseprotokollierung

21
l'L'l

Es ist mir gelungen, das Problem zu beheben, indem der info.plist der Schlüssel "App Transport Security Settings" hinzugefügt wurde. Stellen Sie sicher, dass "Beliebige Ladungen zulassen" auf "Ja" gesetzt ist.

0
AndyC

Für diejenigen von Ihnen, bei denen die oben genannten Methoden nicht funktionierten, war dies in meinem Fall das Problem:

Ich habe eine GET-Anfrage mit einem JSON request body gesendet, der Alamofire verwendet. Ich habe es in eine GET-Anforderung geändert, die stattdessen die Parameter als Abfrageparameter in der URL enthält (entlang der Zeilen von GET https://your-api.com/v1/request?param=value). Dann funktionierte es einwandfrei.

0