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
...
それは何ですか、そしてそれをどのように修正しますか?手助けは大歓迎です。
シモンズ:私はそれをビルドスキームのEnvironment Variable
で「沈黙させる」のではないことを好みます。
アップルのスタッフは次のように答えました。
TIC
は、「[TCP I/O connection]」に展開されます。これは、CFNetwork内のTCP接続を実行するサブシステムです。
1
と57
は、それぞれCFStreamErrorドメインとコードです。 1のドメインはkCFStreamErrorDomainPOSIXであり、そのドメイン内で57
はENOTCONNです。
つまり、TCP読み取りはENOTCONNで失敗しました。
TCP I/O接続サブシステムにはパブリックAPIがないため、(NSURLSessionのような)何らかの高レベルラッパーを介して必ず使用する必要があります。
ソース: 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が必ずしも何かがうまくいっていないという意味ではないことを理解することが重要です。 Closed TCP接続はすべてのバージョンのHTTPで想定されています。そのため、このエラーに関連する他の症状が他にない限り、無視することをお勧めします。
ソース: https://forums.developer.Apple.com/message/272678#272678
解決策:Xcode 9の新しいバージョン/アップデートを待ってください。
これがTIC Read Status [11:0x0]: 1:57
の内訳です。
TIC
は、「[TCP I/O connection]」に展開されます。これは、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エラーなど)に関して私が見つけた最良の方法は、私自身のログ機能を持つことです。
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 Read Status [11:0x0」を取得しました。 ]:1:57 "、XCode 10.1/iOS 12コンソール上。もしあればAppleがHTTP/2の問題を解決するまでこれは一時的な解決策のように見えます。この解決方法は、特にサードパーティのAPIを使用している場合、誰にとってもうまくいかないかもしれませんが、問題についての洞察を得ることができます。