ios - tools - xcode iphone




Nascondi strani log Xcode indesiderati (8)

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?


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


In Xcode 10 anche la variabile OS_ACTIVITY_MODE con valore di disable (o default ) disattiva NSLog qualunque cosa NSLog .

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 da OS_ACTIVITY_MODE = disable .

Ma meglio controllare qui la nuova API os_log .


OS_ACTIVITY_MODE non ha funzionato per me ( potrebbe essere perché ho disable 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 impostare OS_ACTIVITY_DT_MODE su "NO" nelle variabili di ambiente (metodo GUI spiegato nello screenshot degli schemi nella risposta principale) fa funzionare per me.

Per quanto NSLog sia la discarica di messaggi di sistema, errori e il tuo debug: è 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. [ NSLog commento errato su NSLog ]

[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;
    }
}

Prova questo:

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

2- Sulle variabili di ambiente impostare OS_ACTIVITY_MODE = disable


Questo non è più un problema in xcode 8.1 (versione di prova 8.1 beta (8T46g)) . Puoi rimuovere la variabile d'ambiente OS_ACTIVITY_MODE dal tuo schema.

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

Debug

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


Si prega di trovare i passaggi seguenti.

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

Per ulteriori informazioni, consultare la seguente rappresentazione GIF.


Tutto apposto. 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.

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

il comando plutil -p 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 :]


Un tweet ha avuto la risposta per me - tweet

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.





ios10