Ocultar registros extraños no deseados de Xcode

Al usar Xcode 8+ y crear un nuevo proyecto en blanco, los siguientes registros aparecen cuando se ejecuta la aplicación:

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 

Tal vez alguien ya encontró una configuración para manejar esto?

Prueba esto:

1- Desde el menú de Xcode, abra: Producto> Esquema> Editar esquema

2- En sus variables de entorno establecer OS_ACTIVITY_MODE = disable

Captura de pantalla

Sobre la base del tweet original de @rustyshelf, y la respuesta ilustrada de iDevzilla, aquí hay una solución que silencia el ruido del simulador sin desactivar la salida NSLog del dispositivo.

  1. En Producto> Esquema> Editar esquema …> Ejecutar (Depurar), establezca la variable de entorno OS_ACTIVITY_MODE en $ {DEBUG_ACTIVITY_MODE} para que se vea así:

enter image description here

  1. Vaya a la configuración de comstackción de su proyecto y haga clic en + para agregar una configuración definida por el usuario llamada DEBUG_ACTIVITY_MODE. Expanda esta configuración y haga clic en + junto a Depurar para agregar un valor específico de la plataforma. Seleccione el menú desplegable y cámbielo a “Cualquier simulador de iOS”. A continuación, establezca su valor en “deshabilitar” para que se vea así:

enter image description here

OS_ACTIVITY_MODE no funcionó para mí ( puede ser que haya disable error tipográfico, pero ¿no es eso más natural?!?), O al menos no ha impedido una gran cantidad de mensajes. Así que aquí está el verdadero trato con las variables de entorno.

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

Entonces, al establecer OS_ACTIVITY_DT_MODE en “NO” en las variables de entorno (el método GUI explicado en la captura de pantalla Schemes en la respuesta principal) hace que funcione para mí.

En cuanto a que NSLog es el vertedero de los mensajes del sistema, los errores y su propia depuración, probablemente se NSLog un enfoque de registro real, por ejemplo, https://github.com/fpillet/NSLogger .

O

Beba el nuevo Kool-Aid: http://asciiwwdc.com/2016/sessions/721 https://developer.apple.com/videos/play/wwdc2016/721/ No es sorprendente que haya algunos enganches después de revisar todo el API de registro.

APÉNDICE

De todos modos, NSLog es solo un shim:

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

NSLog / CFLog

NSLog ahora es solo un complemento para os_log en la mayoría de las circunstancias.

Ahora tiene sentido ahora citar la fuente de la otra variable env. Un lugar bastante diferente, esta vez de los internos de Apple. No estoy seguro de por qué se superponen. [Comentario incorrecto sobre NSLog eliminado]

[Editado el 22 de septiembre]: me pregunto qué hacen “release” y “stream” de forma diferente a “debug”. No hay suficiente fuente.

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

Un tweet tenía la respuesta para mí: https://twitter.com/rustyshelf/status/775505191160328194

Para evitar que el simulador Xcode 8 iOS inicie sesión como loco, configure una variable de entorno OS_ACTIVITY_MODE = disable en su esquema de depuración.

Funcionó.

Esto todavía no está solucionado en Xcode Version 8.0 beta 2 (8S162m) para mí y los registros adicionales también están apareciendo en la consola Xcode

** EDIT 8/1/16: Esto ha sido reconocido en las notas de la versión de Xcode 8 Beta 4 (8S188o) ya que aún persisten problemas .

Problemas conocidos en Xcode 8 beta 4 – IDE

Depuración

• Xcode Debug Console muestra el registro adicional de los marcos del sistema al depurar aplicaciones en el simulador. (27331147, 26652255)

Presumiblemente, esto se resolverá con la publicación de GM. Hasta entonces, la paciencia y, aunque no es ideal, pero una solución que estoy usando está por debajo …

Al igual que en la respuesta anterior, tengo que:

  • prefijo mis registros de impresión con algún tipo de carácter especial (por ejemplo, * o ^ o! etc, etc.)

  • A continuación, use el cuadro de búsqueda en la parte inferior derecha del panel de la consola para filtrar los registros de la consola ingresando el carácter especial que eligió para que la consola muestre mis registros de impresión como estaba previsto.

consola

Por favor, encuentre los pasos a continuación.

  1. Seleccione Product => Scheme => Edit Scheme o use un atajo: CMD + <
  2. Seleccione la opción Run desde el lado izquierdo.
  3. En la sección Variables del entorno, agregue la variable OS_ACTIVITY_MODE = disable

Para obtener más información, encuentre la siguiente representación de GIF.

Editar esquema

Mi solución es usar el comando del depurador y / o el Mensaje de registro en puntos de interrupción.

enter image description here

Y cambie la salida de la consola de All Output a Debugger Output como

enter image description here

Esto está relacionado con un problema conocido con el registro que se encuentra en las Notas de versión de Xcode 8 Beta (también se le preguntó a un ingeniero en WWDC).

Al depurar aplicaciones WatchOS en el simulador Watch, el sistema operativo puede producir una cantidad excesiva de registros inútiles. (26652255)

Actualmente no hay ninguna solución disponible, debe esperar una nueva versión de Xcode.

EDITAR 7/5/16: Esto es supuestamente arreglado desde Xcode 8 Beta 2:

Resuelto en Xcode 8 beta 2 – IDE

Depuración

  • Al depurar una aplicación en el simulador, los registros están visibles. (26457535)

Notas de la versión de Xcode 8 Beta 2

Bien. Parece que hay mucho alboroto acerca de este, así que les daré a todos una manera de persistir sin usar ese truco de esquema. Me referiré específicamente al simulador de iOS, pero también podría ser necesario aplicarlo para el TV Sim, que se encuentra en un directorio diferente.

El problema que está causando todo esto son listas ubicadas dentro del directorio de Xcode. Hay un proceso que se inicia llamado configd_sim cuando se inicia el Sim que lee los plists y muestra información de depuración si los plists especifican que deben registrarse.

Los plists se encuentran aquí:

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

Si está jugando con una versión beta, tenga en cuenta que el directorio será diferente.

Verá numerosas listas en este directorio. Ahora, crea y ejecuta tu aplicación y observa los registros. Está buscando el contenido seguido inmediatamente por el subsistema: parte. Es el nombre que sigue inmediatamente que representa el plist problemático correspondiente.

enter image description here

Desde allí, modifique el plist para eliminar la clave / valor de depuración [Level] que es un diccionario que contiene la clave / valor "Enable" => "Default" … o simplemente elimine el plist. Tenga en cuenta que tendrá que ser root para hacer cualquiera de estos ya que están ubicados en la aplicación Xcode.

el comando plutil -p podría ser útil para ti. es decir

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

Esto me dio una de las listas problemáticas que contenía:

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

Buena suerte :]

Esto ya no es un problema en xcode 8.1 (probado Versión 8.1 beta (8T46g)) . Puede eliminar la variable de entorno OS_ACTIVITY_MODE de su esquema.

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

Depuración

• Xcode Debug Console ya no muestra el registro adicional de los marcos del sistema al depurar aplicaciones en el simulador. (26652255, 27331147)

Esta solución ha estado funcionando para mí:

  1. Ejecuta la aplicación en el simulador
  2. Abra el registro del sistema ( + / )

Esto eliminará todos los datos de depuración y también sus NSLogs.

Para filtrar solo sus declaraciones NSLog:

  1. Prefija cada uno con un símbolo, por ejemplo: NSLog(@"^ Test Log")
  2. Filtra los resultados usando el cuadro de búsqueda en la esquina superior derecha, “^” en el caso anterior

Esto es lo que debes obtener:

Captura de pantalla de la consola