Ocultar extraños registros Xcode no deseados

695

Cuando se utiliza Xcode 8+ y se crea un nuevo proyecto en blanco, aparecen los siguientes registros al ejecutar 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

¿Quizás alguien ya encontró una configuración para manejar esto?

Hans Knöchel
fuente
1
Parece ser solo información de registro de depuración que queda del desarrollo. Investigando ...
JAL
¿Desactivó el uso de la API del enlazador dinámico en xcode?
Teja Nandamuri
Parece que no funciona para mí en Xcode 8, esta solución funciona solo para Xcode 8 beta.
Badal Shah
Tuve este problema con Xcode 8.2.1 en El Capitan. La actualización a macOS Sierra solucionó el problema.
hwaxxer
Todavía veo el problema en Xcode 9.3, he enviado Apple Bug # 34767176 (Xcode 9 muestra las declaraciones de impresión de depuración del marco del sistema), que es un duplicado del error abierto # 32256894 Envíe un duplicado del error a Apple: bugreport.apple.com/web
Paul Solt

Respuestas:

1507

Prueba esto:

1- Desde el menú Xcode abierto: Producto> Esquema> Editar esquema

2- En su conjunto de variables de entorno OS_ACTIVITY_MODE=disable

Captura de pantalla

iDevzilla
fuente
25
También funciona en la versión Xcode 8.0, así que sugiero que sea la solución.
nadein
27
Para cualquiera que se pregunte cómo llegar a esa pantalla, debe ir a Producto> Esquema> Editar esquema o Cmd + <
chrishale
46
@ iDevzilla, hay algún problema con esta solución, elimina algunas cosas importantes del registro cuando se usa un dispositivo real, como los datos de registro automático. Vuelva a verlo de nuevo, no estoy seguro de que sea la solución más ideal.
Itai Spector
104
Desafortunadamente, esta opción oculta todo NSLogde un dispositivo real para mí ...
Dmitry Isaev
8
El problema solo resiste en Simulator. Personalmente, no creo que sea una buena idea agregar la variable de entorno, ya que también oculta registros importantes como problemas con restricciones de diseño y, entre otros, el ejemplo que dio @ AirXygène. En el simulador también puede presionar "CMD + /" para abrir la consola, le dará los registros antiguos. Sin embargo, es de esperar que Apple solucione este problema en Xcode, hay mucho interés en mirar el número de votos a favor;)
Bocaxica
360

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í:

ingrese la descripción de la imagen aquí

  1. Vaya a la configuración de compilació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 "Any iOS Simulator". Luego establezca su valor en "deshabilitar" para que se vea así:

ingrese la descripción de la imagen aquí

cduhn
fuente
66
@NSNoob asegúrese de no tener un espacio en la variable env.
sbarow
77
Lástima que esta no sea la respuesta aceptada y una lástima que esta respuesta esté perdiendo el recuento de votos. Mucho mejor responda en mi humilde opinión, ya que solo deshabilitó OS_ACTIVITY_MODE para las compilaciones DEBUG en el simulador.
Swany
18
Esto no funcionó para mí, y tampoco la respuesta mejor votada. Usando Xcode 8.2.1 en OS X 10.11.6 El Capitan. Pero lo que funcionó fue una combinación de esta respuesta y la de BaseZen, usando OS_ACTIVITY_DT_MODE en lugar de OS_ACTIVITY_MODE. (E inesperadamente para mí, al menos tanto "NO" como "deshabilitar" desactivaron el registro desenfrenado).
RenniePet
1
@ RenniePet, eso es exactamente lo que hizo por mí. ¡Gracias!
Misha
8
Esta solución ocultará todos los NSLog comenzando con Xcode 9. Para mantener NSLog, reemplace disablecon default.
Cœur
88

OS_ACTIVITY_MODE no funcionó para mí ( puede haber sido porque escribí disablecomodisabled , pero ¿no es más natural?!?), O al menos no evitó una gran cantidad de mensajes. Así que aquí está el trato real 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 configurando OS_ACTIVITY_DT_MODE "NO" en las variables de entorno (método GUI explicado en la captura de pantalla de esquemas en la respuesta principal) hace que funcione para mí.

En cuanto a NSLogser el vertedero de mensajes del sistema, errores y su propia depuración: probablemente se requiera 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 inconvenientes después de revisar todo API de registro.

APÉNDICE

De todos modos, NSLoges solo una cuña:

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

NSLog / CFLog

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

Solo tiene sentido ahora citar la fuente para la otra variable env. Un lugar bastante diferente, esta vez de las partes internas de Apple. No estoy seguro de por qué se superponen. [Comentario incorrecto sobre NSLogeliminado]

[Editado el 22 de septiembre]: Me pregunto qué hacen "liberar" y "transmitir" de manera diferente a "depurar". 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;
    }
}
BaseZen
fuente
11
Siempre es bueno ver una respuesta que proporcione razones y antecedentes en lugar de solo la solución rápida.
jscs
Trabajó esta respuesta usando OS_ACTIVITY_DT_MODE = NO
Almas Adilbek
1
¿Produce esto un comportamiento diferente que OS_ACTIVITY_MODE = deshabilitar? ¿Hay alguna razón para preferir esta solución?
n8gray
1
No es asi. Lo esconde todo.
durazno
2
@Frizlab Sí, menciono ambos en mi publicación. Vea el "O" ... Me refiero os_loginformalmente como el nuevo Kool Aid.
BaseZen
64

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

Para evitar que el Simulador Xcode 8 iOS se registre como loco, configure una variable de entorno OS_ACTIVITY_MODE = deshabilitar en su esquema de depuración.

Funcionó.

Peter Smith
fuente
66
Como ya se dijo: OS_ACTIVITY_MODE = disable desactiva todos los demás registros con un NSLog.
dzensik
55
Esta solución ocultará todos los NSLog comenzando con Xcode 9. Para mantener NSLog, reemplace disablecon default.
Cœur
34

Por favor encuentre los pasos a continuación.

  1. Seleccione Producto => Esquema => Editar esquema o utilice el acceso directo: CMD + <
  2. Seleccione la Runopción del lado izquierdo.
  3. En la sección Variables de entorno, agregue la variable OS_ACTIVITY_MODE = deshabilitar

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

Editar esquema

Ramkrishna Sharma
fuente
3
Espera ... En la segunda carrera funcionó. Felicitaciones por el video GIF. ¡Las mejores respuestas siempre están en la parte inferior!
eonista
2
Esta solución ocultará todos los NSLog comenzando con Xcode 9. Para mantener NSLog, reemplace disablecon default.
Cœur
33

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

** EDITAR 8/1/16: Esto se ha reconocido en las notas de la versión de Xcode 8 Beta 4 (8S188o) como un problema que aún persiste .

Problemas conocidos en Xcode 8 beta 4 - IDE

Depuración

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

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

Similar a 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.)

  • Luego, use el cuadro de búsqueda en la parte inferior derecha del panel de la consola para filtrar los registros de mi consola ingresando mi carácter especial elegido para que la consola muestre mis registros de impresión según lo previsto

consola

Pez
fuente
1
@SimplyLearning encontrarás esta información en Twitter. Pero puede visitar este sitio web oficial de apple: developer.apple.com/news o su suministro de noticias para obtener actualizaciones cuando las publiquen: developer.apple.com/news/rss/news.rss Por cierto: esto todavía parece ser un problema en Xcode Beta 3.
benrudhart
50
Acabo de recibir Xcode 8 GM, y el problema aún persiste. ¡¡Muy molesto!!
AdamM
8
Acabo de descargar Xcode versión 8.0 (8A218a) de la App Store. El problema sigue ahí.
Statik
44
Simplemente ridículo Todavía allí en la versión MAS final.
Shai Mishali
1
Utilizamos un prefijo de etiqueta para el filtrado. Algunos problemas son: varias líneas solo mostrarán la primera. Cuando use lldb para depurar, debe alternar el filtrado. Realmente muy triste que a partir de hoy, la consola es extremadamente limitada. Tenemos una aplicación para un filtrado decente, pero necesitamos copiar / pegar desde la consola. Qué triste.
bauerMusic
23

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

ingrese la descripción de la imagen aquí

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

ingrese la descripción de la imagen aquí

mrahmiao
fuente
14

Bien. Parece que hay mucha conmoción sobre este, así que les daré una forma de persistir sin usar ese truco de esquema. Me referiré específicamente al Simulador de iOS, pero también es posible que esto también deba aplicarse para el Simulador de TV, que se encuentra en un directorio diferente.

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

Las listas se encuentran aquí:

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

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

Verá numerosas listas en este directorio. Ahora, compila 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 a esto que representa la lista problemática correspondiente.

ingrese la descripción de la imagen aquí

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

el plutil -pcomando también podría serle útil. 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 :]

El cometa de Sozin
fuente
Comprimí, luego eliminé en caso de que necesite restaurar.
dandan78
1
Descubrí que esto no podía silenciar mucho código de red, probablemente porque carece de un nombre de subsistema:2016-09-23 15:09:21.354686 ProductName[8823:191206][] tcp_connection_start 3 starting
BaseZen
@BaseZen Desafortunadamente, solo abordé la pregunta de OP que no contenía ningún problema de registro de tcp. Puede crear una nueva publicación SO si necesita ayuda para solucionar este problema.
El cometa de Sozin el
13

Esto está relacionado con un problema conocido con el registro que se encuentra en las Notas de lanzamiento de Xcode 8 Beta (también se le preguntó a un ingeniero de 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 una solución disponible, debe esperar una nueva versión de Xcode.

EDITAR 5/7/16: Esto supuestamente se soluciona a partir de Xcode 8 Beta 2:

Resuelto en Xcode 8 beta 2 - IDE

Depuración

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

Notas de la versión de Xcode 8 Beta 2

JAL
fuente
Pensé eso también, pero no estoy usando una aplicación watchOS ni un simulador watchOS. Pero aún podría pasarle a otros Sims también. Poner en espera por ahora y ver si un determinado Xcode 8 Beta lo solucionará en las próximas semanas / meses.
Hans Knöchel
@HansKnoechel tampoco, pero puedo confirmar que este problema ocurre con cualquier aplicación. Ninguna palabra "oficial" de Apple además de las notas de lanzamiento y algunas discusiones en WWDC.
JAL
gracias, lo mismo aquí! Deberíamos hablar de eso mañana durante la WWDC, jeje :-)
Hans Knöchel
También sucede para mi iPhone 5s Simulator, probablemente todos los simuladores.
SimplGy
No pude acceder al enlace en esta respuesta, a pesar de haber iniciado
sesión
7

Esto ya no es un problema en xcode 8.1 (versión 8.1 beta probada (8T46g)) . Puede eliminar la OS_ACTIVITY_MODEvariable de entorno de su esquema.

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

Depuración

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

mriddle89
fuente
20
Todavía estoy recibiendo muchos registros espurios en 8.1. Principalmente cosas de conexión de socket y tcp extrañas. ¿Alguien más o solo yo?
Jordan Smith
3
Acabo de descargar Xcode 8.1 hoy (31/10/2016) y todavía veo algunos registros de depuración como este [MC] Reading from private effective user settings.de un nuevo proyecto ficticio en blanco Archivo> Nuevo> Proyecto.
Zhang
4

En Xcode 10, la OS_ACTIVITY_MODEvariable con disable(o default) valor también desactiva el NSLogno importa qué.

Entonces, si desea deshacerse del ruido de la consola pero no de sus propios registros, puede probar el viejo en printf("")lugar del NSLog ya que no se ve afectado por el OS_ACTIVITY_MODE=disable .

Pero mejor echa un vistazo a la nueva os_logAPI aquí .

Jakub Truhlář
fuente
1

Esta solución me ha funcionado:

  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. Prefije cada uno con un símbolo, por ejemplo: NSLog(@"^ Test Log")
  2. Filtre los resultados usando el cuadro de búsqueda en la parte superior derecha, "^" en el caso de arriba

Esto es lo que debes obtener:

Captura de pantalla de la consola

psobko
fuente