使用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
在构建方案中使它“静音” 。
使用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
在构建方案中使它“静音” 。
Answers:
苹果员工给出了以下答案:
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
编辑/更新:
由于我们所有人仍然有这些烦人的日志,因此我从上面的链接向同一位苹果专家询问了我们的情况,该情况现在专门针对Xcode 9和Swift4。这里是:
自从我升级到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的较新版本/更新。
这里是如何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
注意:就像@David在评论中提到的一样,这是一种隐藏警告的方法,因此请使用此启动参数来避免收到许多重复的消息并拥有一个干净的控制台。完成调试后,请将其禁用,因为启用后控制台不会提供有用的信息。例如libc++abi.dylib: terminating with uncaught exception of type NSException
。
对于想知道如何使警告静音的人,直到可以使用更好的解决方案之前,您可以随时随地跟随变量并根据需要进行切换。
OS_ACTIVITY_MODE = disable
在产品方案的“参数”下使用环境变量,以避免控制台被此类警告淹没。
注意B:启用它即可看到效果。
来源:https://medium.com/@adinugroho/disable-os-logging-in-xcode-8-ec6d38502532
关于此日志消息和其他一些消息(例如NSURLSession错误,不一定是error),我发现的最好方法是拥有自己的日志功能。
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,我们开始获得“ TIC读取状态[11:0x0 ]:在XCode 10.1 / iOS 12控制台上为1:57“。直到苹果公司修复HTTP / 2问题(如果有)之前,这似乎是一个临时解决方案。此解决方案可能不适用于所有人,特别是在使用第三方API的情况下,但它可以使您对问题有所了解。