Che cos'è lo stato di lettura TIC 1:57 in iOS11 / Xcode 9?


158

Dopo l'aggiornamento a Xcode 9, usando Swift 3 e il simulatore di iPhone X, la mia console è piena di:

TIC Read Status [11:0x0]: 1:57
TIC Read Status [11:0x0]: 1:57
TIC Read Status [11:0x0]: 1:57
...

Che cos'è e come posso ripararlo? L'aiuto è molto apprezzato.

PS: Preferisco non solo "silenziarlo" con uno Environment Variableschema di costruzione.



5
bene. ho trovato anche questa discussione. ma è osx, vecchio e non ha davvero risposto ...
Cerca il

hai ancora trovato una soluzione?
Khodour.F,

2
la cosa fastidiosa non è che questo acceda alla console, ma sembra anche appendere il thread principale
Hogdotmac,

1
si lo fa. ma solo in modalità debug per quanto ho notato.
David cerca il

Risposte:


182

Lo staff Apple ha dato la seguente risposta:

TIC si espande in "Connessione TCP I / O", che è un sottosistema all'interno di CFNetwork che esegue una connessione TCP

1e 57sono rispettivamente il dominio e il codice CFStreamError; un dominio 1 è kCFStreamErrorDomainPOSIX e, all'interno di quel dominio, 57è ENOTCONN

In breve, una lettura TCP non è riuscita con ENOTCONN.

Poiché il sottosistema di connessione I / O TCP non ha API pubbliche, è necessario utilizzarlo necessariamente tramite un wrapper di alto livello (come NSURLSession).

fonte: https://forums.developer.apple.com/thread/66058

EDIT / UPDATE:

Dal momento che tutti abbiamo ancora questi noiosi registri, ho chiesto allo stesso specialista Apple dal link sopra sulla nostra situazione , che ora è specifico per Xcode 9 e Swift 4. Ecco qui:

Molte persone si lamentano di questi registri, che ho riscontrato anche in tutte le mie app da quando ho eseguito l'aggiornamento a 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

La sua risposta:

È importante rendersi conto che questo ENOTCONN non significa necessariamente che qualcosa sia andato storto. Connessioni TCP chiuse sono previste in tutte le versioni di HTTP. Quindi, a meno che non ci siano altri sintomi associati a questo errore, la mia raccomandazione è di ignorarlo.

fonte: https://forums.developer.apple.com/message/272678#272678

SOLUZIONE: attendere solo le versioni / gli aggiornamenti più recenti di Xcode 9.


30
Questo non è specifico per Swift. Lo sto ottenendo anche con Objectiv-C.
Victor Engel,

8
Sei andato davvero oltre per ottenere questa risposta
G. LC,

7
La tua soluzione sembra non aver funzionato, poiché è ancora presente in XCode10.
Gennadii Tsypenko,

2
dobbiamo trovare un modo per sbarazzarci di questo, perché la stampa dei log influisce sulle prestazioni dell'app durante il runtime, per ora possiamo sperare che per build non #DEBUG questo non verrà stampato
Stoyan,

6
sarebbe bello avere alcune impostazioni, quindi potremmo effettivamente "ignorarlo"
Zaporozhchenko Oleksandr

40

Ecco come si TIC Read Status [11:0x0]: 1:57scompone:

TIC si espande in "Connessione TCP I / O", che è un sottosistema all'interno di CFNetwork che esegue una connessione TCP

11 è un numero ID di connessione all'interno di TIC

0x0 è un puntatore all'oggetto TIC stesso

1e 57sono rispettivamente il dominio e il codice CFStreamError; un dominio 1 è kCFStreamErrorDomainPOSIX e, all'interno di quel dominio, 57 è ENOTCONN

Fonte: https://forums.developer.apple.com/thread/66058


va bene. Fin qui tutto bene. è qualcosa di brutto o solo un'informazione? devo aggiustare qualcosa?
David Seek,

Credo che abbia qualcosa a che fare con iOS11.0 e potrebbe essere risolto nelle versioni future
0

8
Ma perché sta realmente accadendo? E perché è iniziato all'improvviso con iOS 11?
Lane Rettig,

Ne sto ricevendo anche alcuni toni nel mio registro ma tutte le mie chiamate di rete funzionano bene: L

Lo stesso problema cosa devo fare con questo?
Genevios,

35

Nota: come quello che @David ha menzionato nel commento, è un modo per nascondere gli avvisi, quindi usa questo argomento di lancio per evitare di ricevere molti messaggi ripetitivi e avere una console pulita. Una volta eseguito il debug, tenerlo disabilitato poiché la console non fornisce informazioni utili quando è abilitata. Per esempio libc++abi.dylib: terminating with uncaught exception of type NSException.

Per le persone che si chiedono come mettere a tacere l'avvertimento e fino a quando non è disponibile una soluzione migliore, è possibile tenere a portata di mano la seguente variabile e attivare o disattivare, se necessario.

Utilizzare OS_ACTIVITY_MODE = disablela variabile di ambiente in Argomenti negli schemi del prodotto per evitare che la console venga invasa da tali avvisi.

Nota B: abilitalo per vedere l'effetto.

Fonte: https://medium.com/@adinugroho/disable-os-logging-in-xcode-8-ec6d38502532

inserisci qui la descrizione dell'immagine


13
Inoltre ho letteralmente detto che non voglio la sua opzione ^^ Il semplice silenziamento non elimina il problema.
David cerca il

23
Le persone devono smettere di suggerire di disabilitare tutte le istruzioni di registro. Le risposte come questa dovrebbero essere eliminate.
Claus Jørgensen,

6

Il modo migliore che ho trovato, riguardo a questo messaggio di registro e ad alcuni altri (come gli errori NSURLSession che non sono necessariamente errori) è di avere le mie funzioni di registro.

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")
    }
}

Quindi digito semplicemente [MyProject] nel filtro in basso a destra nel riquadro della console, e il gioco è fatto.

Nota che chiamando print sulla coda principale, consente al tuo logger di essere usato dai thread senza confondere la tua console.

Pronto per essere migliorato e ottimizzato per le tue esigenze :)


selezionare "os_log". questo è il modo in cui Apple consiglia di utilizzare con la registrazione avanzata
user1105951

0

Stavo riscontrando lo stesso problema in cui ottenevo "}" in risposta a un servizio REST (GET).

usando:

URLCache.shared.removeCachedResponse(for: request as URLRequest)

dopo aver effettuato la richiesta URL e reimpostato l'oggetto URLSession dopo aver ottenuto la risposta come:

session.reset(completionHandler: {
  // print(\(data))                          
})

Risolto il mio problema


1
Non risolverò il mio problema poiché ciò accade anche se tutte le mie app sono chiamate a Firebase. E non riesco a manipolare il framework. Ma lo inoltrerò al team di sviluppo di Firebase. Forse possono farci qualcosa.
David Seek,

0

Riusciamo a risolvere questo problema di registrazione disabilitando HTTP / 2 sul server Web, nel nostro caso siamo passati dall'ELB classico all'ELB dell'applicazione che ha aggiunto il supporto a HTTP / 2 su AWS e abbiamo iniziato a ottenere "Stato lettura TIC [11: 0x0 ]: 1:57 "sulla console XCode 10.1 / iOS 12. Sembra una soluzione temporanea fino a quando Apple non risolve il problema con HTTP / 2 se presente. Questa soluzione potrebbe non funzionare per tutti, specialmente se si utilizzano API di terze parti, ma fornisce alcune informazioni sul problema.


4
Bene, sono passati 1,5 anni da quando Apple ha introdotto questa ... chiamiamola ... funzione ... Non vedo che questo verrà "riparato" presto.
David, cerca il

0

È una registrazione che indica che una connessione TCP è persa / chiusa / non_valida o altro. Questo può accadere se la tua app ha una connessione tcp in esecuzione e l'app viene messa in background per un po 'di tempo o hai spento lo schermo del tuo telefono. Il sistema operativo decide di interrompere quante più risorse possibili per ridurre il consumo della batteria. Se porti in primo piano l'app, le connessioni tcp che avevi prima non funzioneranno più. Devi ricreare una nuova connessione tcp.

Se non ti dà fastidio, ignoralo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.