Nasconde strani log Xcode indesiderati


695

Quando si utilizza Xcode 8+ e si crea un nuovo progetto vuoto, durante l'esecuzione dell'applicazione vengono visualizzati i seguenti registri:

2016-06-13 16:33:34.406093 TestiOS10[8209:100611] bundleid: com.appc.TestiOS10, enable_level: 0, persist_level: 0, propagate_with_activity: 0
2016-06-13 16:33:34.406323 TestiOS10[8209:100607] Created DB, header sequence number = 248
2016-06-13 16:33:34.409564 TestiOS10[8209:100611] subsystem: com.apple.UIKit, category: HIDEvents, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-06-13 16:33:34.504117 TestiOS10[8209:100607] Created DB, header sequence number = 248
2016-06-13 16:33:34.548023 TestiOS10[8209:100607] subsystem: com.apple.BaseBoard, category: MachPort, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-06-13 16:33:34.568458 TestiOS10[8209:100608] subsystem: com.apple.FrontBoard, category: Common, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0

Forse qualcuno ha già trovato una configurazione da gestire?


1
Sembra essere solo il debug delle informazioni di registrazione rimaste dallo sviluppo. Indagare ...
JAL

hai disattivato l'utilizzo dell'API del linker dinamico in xcode?
Teja Nandamuri,

Sembra che non funzioni per me in Xcode 8, questa soluzione funziona solo per Xcode 8 beta.
Badal Shah,

Ho avuto questo problema con Xcode 8.2.1 su El Capitan. L'aggiornamento a macOS Sierra ha risolto il problema.
hwaxxer,

Riscontro ancora il problema su Xcode 9.3, ho inviato il bug # 34767176 di Apple (Xcode 9 visualizza le dichiarazioni di stampa di debug del framework di sistema), che è un duplicato del bug aperto # 32256894 Invia un duplicato del bug ad Apple: bugreport.apple.com/web
Paul Solt

Risposte:


1507

Prova questo:

1- Dal menu Xcode, aprire: Prodotto> Schema> Modifica schema

2- Sulle variabili di ambiente impostate OS_ACTIVITY_MODE=disable

Immagine dello schermo


25
Funziona anche con Xcode 8.0, quindi suggerisco che sia la soluzione.
nadein,

27
Per chiunque si stia chiedendo come accedere a quella schermata, è necessario andare su Prodotto> Schema> Modifica schema o Comando + <
chrishale

46
@iDevzilla, c'è qualche problema con questa soluzione, rimuove alcune cose importanti dal registro quando si utilizza un dispositivo reale, come i dati registrati automaticamente. Ti preghiamo di rivederlo di nuovo, non sono sicuro che sia la soluzione più ideale.
Itai Spector,

104
Sfortunatamente, questa opzione nasconde tutte le cose NSLogda un dispositivo reale per me ...
Dmitry Isaev il

8
Il problema resiste solo in Simulator. Personalmente non credo sia una buona idea aggiungere la variabile d'ambiente, perché nasconde anche registri importanti come problemi con i vincoli di layout e tra l'altro l'esempio di @ AirXygène. Nel simulatore puoi anche premere "CMD + /" per aprire la console, ti darà i registri vecchio stile. Speriamo che Apple risolva questo problema in Xcode, tuttavia, c'è molto interesse nel guardare il numero di voti;)
Bocaxica,

360

Basandosi sul tweet originale di @rustyshelf e sulla risposta illustrata di iDevzilla, ecco una soluzione che mette a tacere il rumore del simulatore senza disabilitare l'uscita NSLog dal dispositivo.

  1. In Prodotto> Schema> Modifica schema ...> Esegui (debug), imposta la variabile di ambiente OS_ACTIVITY_MODE su $ {DEBUG_ACTIVITY_MODE} in questo modo:

inserisci qui la descrizione dell'immagine

  1. Vai alle impostazioni di creazione del progetto e fai clic su + per aggiungere un'impostazione definita dall'utente denominata DEBUG_ACTIVITY_MODE. Espandi questa impostazione e fai clic su + accanto a Debug per aggiungere un valore specifico della piattaforma. Seleziona il menu a discesa e modificalo in "Qualsiasi simulatore iOS". Quindi imposta il suo valore su "disabilita" in questo modo:

inserisci qui la descrizione dell'immagine


6
@NSNoob assicurati di non avere uno spazio nella variabile env.
sbarow

7
Peccato che questa non sia la risposta accettata e che pessima questa risposta sta perdendo il conteggio dei voti. Molto meglio rispondere a IMHO dal momento che disabilita solo OS_ACTIVITY_MODE per DEBUG basato sul simulatore.
Swany,

18
Questo non ha funzionato per me, e nemmeno la risposta più votata. Utilizzo di Xcode 8.2.1 su OS X 10.11.6 El Capitan. Ma ciò che ha funzionato è stata una combinazione di questa risposta e quella di BaseZen, usando OS_ACTIVITY_DT_MODE invece di OS_ACTIVITY_MODE. (E inaspettatamente per me almeno "NO" e "disabilita" hanno disattivato la registrazione dilagante.)
RenniePet

1
@RenniePet, è esattamente quello che ha fatto per me. Grazie!
Misha,

8
Questa soluzione nasconderà tutto NSLog a partire da Xcode 9. Per conservare NSLog, sostituirlo disablecon default.
Cœur,

88

OS_ACTIVITY_MODE non ha funzionato per me ( potrebbe essere stato perché ho sbagliato disablea scrivere come disabled, ma non è più naturale?!?), O almeno non ha impedito una grande quantità di messaggi. Quindi, ecco il vero affare con le variabili d'ambiente.

https://llvm.org/svn/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp

lldb_private::Error
PlatformDarwin::LaunchProcess(lldb_private::ProcessLaunchInfo &launch_info) {
  // Starting in Fall 2016 OSes, NSLog messages only get mirrored to stderr
  // if the OS_ACTIVITY_DT_MODE environment variable is set.  (It doesn't
  // require any specific value; rather, it just needs to exist).
  // We will set it here as long as the IDE_DISABLED_OS_ACTIVITY_DT_MODE flag
  // is not set.  Xcode makes use of IDE_DISABLED_OS_ACTIVITY_DT_MODE to tell
  // LLDB *not* to muck with the OS_ACTIVITY_DT_MODE flag when they
  // specifically want it unset.
  const char *disable_env_var = "IDE_DISABLED_OS_ACTIVITY_DT_MODE";
  auto &env_vars = launch_info.GetEnvironmentEntries();
  if (!env_vars.ContainsEnvironmentVariable(disable_env_var)) {
    // We want to make sure that OS_ACTIVITY_DT_MODE is set so that
    // we get os_log and NSLog messages mirrored to the target process
    // stderr.
    if (!env_vars.ContainsEnvironmentVariable("OS_ACTIVITY_DT_MODE"))
      env_vars.AppendArgument(llvm::StringRef("OS_ACTIVITY_DT_MODE=enable"));
  }

  // Let our parent class do the real launching.
  return PlatformPOSIX::LaunchProcess(launch_info);
}

Quindi l'impostazione OS_ACTIVITY_DT_MODEsu "NO" nelle variabili di ambiente (metodo GUI spiegato nello screenshot degli schemi nella risposta principale) fa funzionare per me.

Per quanto riguarda NSLogla discarica di messaggi di sistema, errori e il tuo debug: probabilmente è comunque richiesto un vero approccio di registrazione, ad esempio https://github.com/fpillet/NSLogger .

O

Bevi il nuovo Kool-Aid: http://asciiwwdc.com/2016/sessions/721 https://developer.apple.com/videos/play/wwdc2016/721/ Non è sorprendente che ci siano alcuni intoppi dopo aver revisionato l'intero API di registrazione.

ADDENDUM

Ad ogni modo, NSLogè solo uno spessore:

https://developer.apple.com/library/content/releasenotes/Miscellaneous/RN-Foundation-OSX10.12/

NSLog / CFLog

NSLog ora è solo uno spessore di os_log nella maggior parte dei casi.

Ha senso solo ora citare la fonte per l'altra variabile env. Abbastanza un posto diverso, questa volta dagli interni di Apple. Non sono sicuro del motivo per cui si sovrappongono. [Commento errato su NSLogrimosso]

[Modificato il 22 settembre]: Mi chiedo cosa "release" e "stream" facciano diversamente da "debug". Fonte insufficiente.

https://github.com/macosforge/libdispatch/blob/8e63547ea4e5abbfe55c0c3064181c4950a791d3/src/voucher.c

e = getenv("OS_ACTIVITY_MODE");
if (e) {
    if (strcmp(e, "release") == 0) {
        mode = voucher_activity_mode_release;
    } else if (strcmp(e, "debug") == 0) {
        mode = voucher_activity_mode_debug;
    } else if (strcmp(e, "stream") == 0) {
        mode = voucher_activity_mode_stream;
    } else if (strcmp(e, "disable") == 0) {
        mode = voucher_activity_mode_disable;
    }
}

11
Sempre bello vedere una risposta che fornisca ragioni e background piuttosto che solo la soluzione rapida.
jscs,

Ha funzionato questa risposta usando OS_ACTIVITY_DT_MODE = NO
Almas Adilbek,

1
Questo produce un comportamento diverso rispetto a OS_ACTIVITY_MODE = disabilita? C'è qualche motivo per preferire questa soluzione?
n8gray,

1
Non è così. Nasconde tutto.
Durazno,

2
@Frizlab Sì, menziono entrambi nel mio post. Vedi "OR" ... Mi riferisco os_loginformalmente come il nuovo aiuto Kool.
BaseZen,

64

Un tweet ha avuto la risposta per me - https://twitter.com/rustyshelf/status/775505191160328194

Per impedire a Xcode 8 iOS Simulator di registrarsi come un matto, imposta una variabile di ambiente OS_ACTIVITY_MODE = disabilita nel tuo schema di debug.

Ha funzionato.


6
Come già detto: OS_ACTIVITY_MODE = disable disattiva tutte le altre registrazioni con un NSLog.
dzensik,

5
Questa soluzione nasconderà tutto NSLog a partire da Xcode 9. Per conservare NSLog, sostituirlo disablecon default.
Cœur,

34

Si prega di trovare i passaggi seguenti.

  1. Seleziona Prodotto => Schema => Modifica schema o usa il collegamento: CMD + <
  2. Seleziona l' Runopzione dal lato sinistro.
  3. Nella sezione Variabili d'ambiente, aggiungi la variabile OS_ACTIVITY_MODE = disabilita

Per ulteriori informazioni, consultare la seguente rappresentazione GIF.

Modifica schema


3
Aspetta .... Al secondo tentativo ha funzionato. Complimenti per Gif Video. Le migliori risposte sono sempre in fondo!
eonista

2
Questa soluzione nasconderà tutto NSLog a partire da Xcode 9. Per conservare NSLog, sostituirlo disablecon default.
Cœur

33

Questo non è ancora stato risolto in Xcode versione 8.0 beta 2 (8S162m) per me e nella console Xcode vengono visualizzati anche registri extra

** MODIFICA 8/1/16: questo è stato riconosciuto nelle note di rilascio per Xcode 8 Beta 4 (8S188o) come un problema ancora persistente .

Problemi noti in Xcode 8 beta 4 - IDE

Debug

• Xcode Debug Console mostra una registrazione extra dai framework di sistema durante il debug delle applicazioni nel simulatore. (27331147, 26652255)

Presumibilmente questo sarà risolto dal rilascio di GM. Fino ad allora pazienza e sebbene non ideale ma una soluzione alternativa che sto usando è sotto ...

Simile alla risposta precedente, devo:

  • anteponi i miei registri di stampa con un tipo di carattere speciale (ad es. * o ^ o! ecc ecc.)

  • Quindi utilizzare la casella di ricerca in basso a destra nel riquadro della console per filtrare i registri della mia console immettendo il carattere speciale scelto per ottenere che la console visualizzi i miei registri di stampa come previsto

consolle


1
@SimplyLearning troverai queste informazioni su Twitter. Ma potresti visitare questo sito ufficiale da apple: developer.apple.com/news o dal loro feed di notizie per ricevere aggiornamenti quando li pubblicano: developer.apple.com/news/rss/news.rss A proposito: sembra che essere un problema in Xcode Beta 3.
benrudhart,

50
Ho appena ricevuto Xcode 8 GM e il problema persiste ancora. Molto noioso!!
AdamM,

8
Ho appena scaricato Xcode versione 8.0 (8A218a) dall'App Store. Il problema è ancora lì.
Statik,

4
Semplicemente ridicolo. Ancora lì nella versione Final MAS.
Shai Mishali,

1
Usiamo un prefisso tag per il filtraggio. Alcuni problemi sono: Più righe mostreranno solo la prima. Quando si utilizza lldb per il debug, è necessario attivare o disattivare il filtro. Davvero davvero triste che ad oggi la console sia estremamente limitata. Abbiamo un'app per un filtro decente, ma dobbiamo copiare / incollare dalla console. Che triste.
bauerMusic

23

La mia soluzione è utilizzare il comando debugger e / o il messaggio di registro nei punti di interruzione.

inserisci qui la descrizione dell'immagine

E cambia l'output della console da All Output a Output Debugger come

inserisci qui la descrizione dell'immagine


14

Tutto a posto. Sembra che ci sia molta confusione su questo, quindi ti darò un modo per insistere senza usare quel trucco di schema. Mi rivolgerò specificamente al simulatore iOS, ma potrebbe anche essere necessario applicarlo anche per il sim TV che si trova in una directory diversa.

Il problema che sta causando tutta questa roba sono i plists che si trovano all'interno della directory Xcode. Esiste un processo che viene avviato chiamato configd_sim all'avvio del Sim che legge i piani e stampa le informazioni di debug se i piani specificano che devono essere registrati.

I plists si trovano qui:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Preferences/Logging/Subsystems

Se stai giocando con una beta, prendi nota che la directory sarà diversa.

Vedrai numerosi plists in questa directory. Ora, crea ed esegui la tua applicazione e osserva i registri. Stai cercando il contenuto immediatamente seguito dal sottosistema: parte. È il nome immediatamente successivo a questo che rappresenta il corrispondente plist problematico.

inserisci qui la descrizione dell'immagine

Da lì, modifica il plist per eliminare la chiave / valore di debug [Livello] che è un dizionario che contiene la "Enable" => "Default"chiave / valore ... o semplicemente elimina il plist. Nota che dovrai essere root per fare una di queste due cose poiché si trovano nell'applicazione Xcode.

il plutil -pcomando potrebbe essere utile anche a te. vale a dire

plutil -p /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator.sdk/System/Library/Preferences/Logging/Subsystems/com.apple.BackBoardServices.fence.plist

Questo mi ha dato uno dei piani problematici che conteneva:

{ "DEFAULT-OPTIONS" => { "Level" => { "Enable" => "Default" }}}

In bocca al lupo :]


Ho zippato, quindi cancellato nel caso avessi bisogno di ripristinare.
dandan78,

1
Ho scoperto che questo non è stato in grado di mettere a tacere un sacco di codice di rete, probabilmente perché manca un nome di sottosistema:2016-09-23 15:09:21.354686 ProductName[8823:191206][] tcp_connection_start 3 starting
BaseZen

@BaseZen Sfortunatamente, ho affrontato solo la domanda di OP che non conteneva alcun problema di registrazione tcp. Puoi creare un nuovo post SO se hai bisogno di aiuto per risolvere questo problema.
La cometa di Sozin il

13

Ciò è correlato a un problema noto relativo alla registrazione riscontrato nelle Note di rilascio di Xcode 8 Beta (richiesto anche a un tecnico del WWDC).

Durante il debug delle applicazioni WatchOS nel simulatore Watch, il sistema operativo potrebbe produrre una quantità eccessiva di registrazioni inutili. (26652255)

Al momento non sono disponibili soluzioni alternative, è necessario attendere una nuova versione di Xcode.

EDIT 7/5/16: presumibilmente corretto da Xcode 8 Beta 2:

Risolto in Xcode 8 beta 2 - IDE

Debug

  • Quando si esegue il debug di un'app sul simulatore, i registri sono visibili. (26457535)

Note di rilascio di Xcode 8 Beta 2


Pensato anche quello, ma non sto usando un'applicazione watchOS né un simulatore watchOS. Ma potrebbe succedere anche ad altri Sim. Mettere in attesa per ora e vedere se un certo Xcode 8 Beta lo risolverà nelle prossime settimane / mesi.
Hans Knöchel,

@HansKnoechel non lo sono nemmeno io, ma posso confermare che questo problema si verifica con qualsiasi applicazione. Nessuna parola "ufficiale" da parte di Apple oltre alle note di rilascio e alcune discussioni al WWDC.
JAL

grazie, lo stesso qui! Dovremmo parlarne domani durante il WWDC, hehe :-)
Hans Knöchel,

Succede anche per il mio simulatore di iPhone 5s, probabilmente tutti i simulatori.
Semplicemente il

Non sono riuscito ad accedere al link in questa risposta, nonostante sia stato effettuato l'accesso, ma questo link funziona: adcdownload.apple.com/WWDC_2016/Xcode_8_beta/…
SimplGy

7

Questo non è più un problema in xcode 8.1 (versione di prova 8.1 beta (8T46g)) . È possibile rimuovere la OS_ACTIVITY_MODEvariabile di ambiente dal proprio schema.

https://developer.apple.com/go/?id=xcode-8.1-beta-rn

Debug

• Xcode Debug Console non mostra più registrazioni extra dai framework di sistema durante il debug delle applicazioni nel Simulatore. (26652255, 27331147)


20
Sto ancora ricevendo molte registrazioni spurie in 8.1. Principalmente roba di connessione socket e tcp strano. Qualcun altro o solo io?
Jordan Smith,

3
Ho appena scaricato Xcode 8.1 oggi (31/10/2016) e continuo a vedere alcuni log di debug come questo [MC] Reading from private effective user settings.da un nuovo progetto fittizio vuoto File> Nuovo> Progetto.
Zhang,

4

In Xcode 10 anche la OS_ACTIVITY_MODEvariabile con valore disable(o default) disattiva NSLogqualunque cosa.

Quindi, se si desidera eliminare il rumore della console ma non i propri registri, è possibile provare il buon vecchio printf("")anziché NSLog poiché non è influenzato dal OS_ACTIVITY_MODE=disable .

Ma meglio controllare qui la nuova os_logAPI .


1

Questa soluzione ha funzionato per me:

  1. Esegui l'app nel simulatore
  2. Apri il registro di sistema ( + /)

Questo scaricherà tutti i dati di debug e anche i tuoi NSLogs.

Per filtrare solo le tue dichiarazioni NSLog:

  1. Prefisso ciascuno con un simbolo, ad esempio: NSLog(@"^ Test Log")
  2. Filtra i risultati usando la casella di ricerca in alto a destra, "^" nel caso sopra

Questo è ciò che dovresti ottenere:

Schermata della console

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.