Xcode 9 iOS 11 BoringSSL SSL_ERROR_ZERO_RETURN

时间:2017-12-13 21:03:28

标签: ios xcode boringssl

我有一个在iOS上运行的简单程序HelloWorld。相同的代码已经运行了很长时间。最近,我注意到当程序在我的Macbook上连接到Xcode 9的ipad上运行时,我收到了以下BoringSSL错误。我在模拟器中运行程序时没有看到此错误。 iOS是11.2。 Xcode是9.2。

我的代码没有引用BoringSSL。但是,它确实使用NSMutableURLRequest来对服务器进行https调用。该呼叫工作正常,除了BoringSSL消息外,一切似乎都能正常工作。

有没有办法可以调试消息出现的原因? HellowWorld [466:85961],这2个数字是什么意思?

该消息是什么意思以及如何避免它?

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

4 个答案:

答案 0 :(得分:21)

  

有没有办法可以调试消息出现的原因?

,我有点惊讶它尚未被提及。

CFNetwork处理Foundation网络类的核心 - 它还具有(经常被忽略的)通过 CFNETWORK_DIAGNOSTICS 环境变量进行详细记录的功能。

以编程方式启用CFNetwork诊断日志记录

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

应将其设置为0到3之间的整数值,其中0表示关闭,较高的数字会逐渐增加日志记录。在正常开发期间,您可以通过Xcode的方案编辑器设置此环境变量。当应用程序从Xcode运行时,CFNetwork日志条目将出现在调试控制台区域中(如果不可见,请选择View> Debug Area> Show Debug Area)。

环境变量应该放在应用程序启动序列的开头。通常将它放在main的开头就足够了,但是如果你有使用CFNetwork的C ++静态初始化器,你必须把它放在那些之前。

  

注意:在Swift中,此代码将进入main.swift。默认情况下Swift应用程序   没有main.swift; “Swift编程语言”解释了如何   添加一个。
   *另请注意,在Swift中删除setenv末尾的分号。

设置上面的环境变量肯定有助于确定问题的位置,或者至少为您提供一个起点来开始诊断有点模糊的错误消息。

CFNetwork Diagnostic Logging

答案 1 :(得分:0)

我设法通过将“应用程序传输安全设置”键添加到info.plist来解决此问题。确保将“允许任意负载”设置为“是”。

答案 2 :(得分:0)

对于上述方法不起作用的人来说,这就是我的问题所在:

我正在使用Alamofire发送带有JSON 请求正文GET请求。我将其更改为一个GET请求,该请求包含参数作为URL中的查询参数(沿GET https://your-api.com/v1/request?param=value的各行)。然后它完美地工作了。

答案 3 :(得分:-1)

我在尝试使用NSLog发布一个非常长的列表时得到了类似的消息,因为它会在调试控制台中长时间发布列表然后列出部分列表后跟几个...为了显示控制台中没有打印更多,我修复了这个(使用OBJ-C)并将这个#define添加到我的VC.m

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

也许你可以使用与你的快速项目类似的东西。