更新到Xcode 9后,使用Swift 3和iPhone X模拟器,我的控制台充满了:
TIC Read Status [11:0x0]: 1:57
TIC Read Status [11:0x0]: 1:57
TIC Read Status [11:0x0]: 1:57
...
这是什么,我该如何解决?非常感谢帮助。
PS:我不想在构建方案中用Environment Variable
“沉默”它。
答案 0 :(得分:169)
Apple员工给出了以下答案:
TIC
扩展为“TCP I / O连接”,这是CFNetwork中运行TCP连接的子系统
1
和57
分别是CFStreamError域和代码;域1是kCFStreamErrorDomainPOSIX,在该域中,57
是ENOTCONN
简而言之,ENOTCONN的TCP读取失败。
由于TCP I / O连接子系统没有公共API,因此必须通过某些高级包装器(如NSURLSession)使用它。
来源:https://forums.developer.apple.com/thread/66058
修改/更新:强>
由于我们仍然有这些令人讨厌的日志,我向上述链接中的同一位Apple专家询问了我们的情况,现在特定于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的更新版本/更新。
答案 1 :(得分:38)
以下是TIC Read Status [11:0x0]: 1:57
分解的方式:
TIC
扩展为“TCP I / O连接”,这是CFNetwork中运行TCP连接的子系统
11
是TIC中的连接ID号
0x0
是指向TIC对象本身的指针
1
和57
分别是CFStreamError域和代码; 1的域是kCFStreamErrorDomainPOSIX,在该域中,57是ENOTCONN
答案 2 :(得分:29)
注意:就像@David在评论中提到的那样,它是一种隐藏警告的方法,因此使用此启动参数可以避免获得许多重复消息并拥有一个干净的控制台。完成调试后,请将其禁用,因为控制台在启用时不会提供有用的信息。例如libc++abi.dylib: terminating with uncaught exception of type NSException
。
对于那些想知道如何使警告静音并且直到有更好的修复可用的人,您可以继续使用变量并根据需要进行切换。
在产品方案中的Arguments下使用OS_ACTIVITY_MODE = disable
环境变量,以避免控制台充斥着此类警告。
注意B:启用它以查看效果。
来源:https://medium.com/@adinugroho/disable-os-logging-in-xcode-8-ec6d38502532
答案 3 :(得分:4)
我发现的最佳方式,关于此日志消息和其他一些(如NSURLSession错误,不一定是错误)是拥有自己的日志功能。
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,它可以在不混淆控制台的情况下从线程中使用记录器。
随时准备改进和调整以满足您的需求:)
答案 4 :(得分:0)
在遇到REST(GET)服务时,我遇到了同样的问题。
使用:
URLCache.shared.removeCachedResponse(for: request as URLRequest)
发出我的URL请求后,并在收到响应后重置我的URLSession对象为:
session.reset(completionHandler: {
// print(\(data))
})
解决了我的问题。
答案 5 :(得分:0)
我们设法通过在Web服务器上禁用HTTP / 2来解决此日志记录问题,在本例中,我们已从传统的ELB迁移到为AWS上的HTTP / 2添加了支持的应用程序ELB,我们开始获得“ TIC读取状态[ 11:0x0]:1:57“(位于XCode 10.1 / iOS 12控制台上)。直到苹果公司修复HTTP / 2问题(如果有)之前,这似乎是一个临时解决方案。此解决方案可能不适用于所有人,特别是在使用第三方API的情况下,但是它可以使您对问题有所了解。
答案 6 :(得分:0)
这是一个日志记录,指示TCP连接丢失/关闭/无效。如果您的应用程序具有正在运行的tcp连接并且该应用程序在后台放置了一段时间,或者您关闭了手机的屏幕,则可能会发生这种情况。操作系统决定停止尽可能多的资源以减少电池消耗。如果将应用程序置于前台,以前的tcp连接将不再起作用。您需要重新创建一个新的tcp连接。
如果它不打扰您,请忽略它。