60

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

我的代码没有提到 BoringSSL。但是,它确实使用 NSMutableURLRequest 对服务器进行 https 调用。通话工作正常,除了 BoringSSL 消息外,一切似乎都工作正常。

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

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

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

添加了屏幕截图

4

4 回答 4

21

有没有办法可以调试为什么会出现消息?

的,,我有点惊讶它还没有被提及。

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

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

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

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

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

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

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

CFNetwork 诊断日志

于 2018-02-25T08:42:41.797 回答
0

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

于 2018-10-26T09:13:36.673 回答
0

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

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

于 2019-03-01T09:29:00.067 回答
-1

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

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

也许你可以使用类似于你的 swift 项目的东西。

于 2018-02-27T15:51:22.510 回答