在使用 Swift 3和 iPhone X 模拟器升级到 Xcode 9之后,我的控制台充满了:
TIC Read Status [11:0x0]: 1:57 TIC Read Status [11:0x0]: 1:57 TIC Read Status [11:0x0]: 1:57 ...
那是什么? 我该怎么办? 非常感谢你的帮助。
PS: 我不喜欢只是在构建方案中使用 Environment Variable“沉默”它。
Environment Variable
以下是 TIC Read Status [11:0x0]: 1:57的分解过程:
TIC Read Status [11:0x0]: 1:57
TIC扩展为“ TCP I/O 连接”,这是 CFNetwork 中运行 TCP 连接的子系统
TIC
11是 TIC 中的连接 ID 号
11
0x0是指向 TIC 对象本身的指针
0x0
1和 57分别是 CFStreamError 域和代码; 1的域是 kCFStreamErrorDomainPOSIX,在该域中,57是 ENOTCONN
1
57
资料来源: https://forums.developer.apple.com/thread/66058
苹果员工的回答如下:
简而言之,ENOTCONN 的 TCP 读操作失败。
由于 TCP I/O 连接子系统没有公共 API,因此必须通过某种高级包装器(如 NSULSession)使用它。
来源: https://forums.developer.apple.com/thread/66058
编辑/更新:
因为我们仍然有这些烦人的日志,我从上面的链接中向同一位苹果专家询问了我们的情况,它现在是特定于 Xcode 9和 Swift 4的。这就是:
很多人都在抱怨这些日志,自从我升级到 Xcode 9/iOS 11以来,我所有的应用程序中都有这些日志。
2017-10-24 15:26:49.120556-0300 MyApp[1092:314222] TIC Read Status [55:0x0]: 1:57 2017-10-24 15:26:49.120668-0300 MyApp[1092:314222] TIC Read Status [55:0x0]: 1:57 2017-10-24 15:26:49.626199-0300 MyApp[1092:314617] TIC Read Status [56:0x0]: 1:57
他的回答是:
重要的是要认识到,这个 ENOTCONN 并不一定意味着有什么地方出了问题。所有版本的 HTTP 都需要关闭的 TCP 连接。所以,除非这个错误有其他症状,我的建议是你忽略它。
来源: https://forums.developer.apple.com/message/272678#272678
解决方案: 只需等待 Xcode 9的更新版本/更新。
注意: 就像@David 在评论中提到的那样,这是一种隐藏警告的方法,所以使用这个启动参数可以避免获得许多重复的消息,并且拥有一个干净的控制台。一旦完成调试,将其禁用,因为启用控制台时控制台不会提供有用的信息。例如 libc++abi.dylib: terminating with uncaught exception of type NSException。
libc++abi.dylib: terminating with uncaught exception of type NSException
对于那些想知道如何消除警告的人,在有更好的解决方案之前,你可以保持跟随变量,并根据需要进行切换。
在产品方案的 Arguments 下使用 OS_ACTIVITY_MODE = disable环境变量,以避免控制台充斥此类警告。
OS_ACTIVITY_MODE = disable
注意 B: 让它看到效果。
资料来源: https://medium.com/@adinugroho/disable-os-logging-in-xcode-8-ec6d38502532
我发现,关于这个日志消息和其他一些错误(比如不一定是错误的 NSULSession 错误) ,最好的方法是使用我自己的日志函数。
class Logger { static var project: String = "MyProject" static func log(_ string: String, label: String = "") { DispatchQueue.main.async { print("[\(Logger.project)] \(label) : \(string)") } } static func info(_ string: String) { Logger.log(string) } static func warning(_ string: String) { Logger.log(string, label: "WARNING") } static func error(_ string: String) { Logger.log(string, label: "ERROR") } }
然后在控制台面板右下角的过滤器中键入 [ MyProject ],就完成了。
注意,通过在主队列上调用 print,可以从线程使用日志记录器,而不会混淆控制台。
准备好为你的需要而改进和调整:)
当时我遇到了同样的问题,在响应 REST (GET)服务时我得到了“}”。
使用:
URLCache.shared.removeCachedResponse(for: request as URLRequest)
在发出 URL 请求后,并在得到响应后重置 URLSession 对象,如下所示:
session.reset(completionHandler: { // print(\(data)) })
解决了我的问题。
我们设法通过在 Web 服务器上禁用 HTTP/2来解决这个日志记录问题,在我们的案例中,我们已经从传统的 ELB 迁移到了在 AWS 上增加对 HTTP/2支持的应用程序 ELB,并且我们开始在 XCode 10.1/iOS 12控制台上获得“ TIC 读状态[11:0 x0] : 1:57”。这看起来像是一个临时的解决方案,直到苹果用 HTTP/2修复了这个问题(如果有的话)。这个解决方案可能不适用于所有人,特别是如果您使用的是第三方 API,但是它可以为您提供一些关于这个问题的见解。
它是一个日志记录,指示 TCP 连接丢失/关闭/无效或其他情况。如果您的应用程序有一个正在运行的 tcp 连接,并且该应用程序被放在后台一段时间,或者您关闭了手机屏幕,就会发生这种情况。操作系统决定停止尽可能多的资源,以减少电池排水。如果你把应用程序带到前台,你以前的 tcp 连接将不再工作。您需要重新创建一个新的 tcp 连接。
如果你不介意,就忽略它。