program español developer apple ios xcode logging xcode8 ios10

ios - español - apple developer login



Ocultar extraños registros Xcode no deseados (12)

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

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


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 los plists e imprime información de depuración si los plists especifican que deberían 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.

A partir de ahí, modifique el plist para eliminar la clave / valor de depuración [Nivel], que es un diccionario que contiene el valor / clave "Enable" => "Default" ... 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.

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


En Xcode 10, la variable OS_ACTIVITY_MODE con valor de disable (o default ) también desactiva el NSLog sin importar qué.

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

Pero mejor echa un vistazo a la nueva API os_log here .


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:


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


Esto ya no es un problema en xcode 8.1 (versión 8.1 beta probada (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 registros adicionales de los marcos del sistema al depurar aplicaciones en el simulador. (26652255, 27331147)


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

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


OS_ACTIVITY_MODE no funcionó para mí ( puede haber sido porque escribí disable como disabled , pero ¿no es eso 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); }

Por lo tanto, establecer OS_ACTIVITY_DT_MODE en "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 que NSLog sea ​​el vertedero de mensajes del sistema, 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 problemas después de revisar todo API de registro.

APÉNDICE

De todos modos, NSLog es 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.

Ahora solo tiene sentido 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 NSLog eliminado]

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


Por favor encuentre los pasos a continuación.

  1. Seleccione Producto => Esquema => Editar esquema o utilice el acceso directo: CMD + <
  2. Seleccione la opción Run desde el 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.


Prueba esto:

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

2- En las Variables de entorno, establece OS_ACTIVITY_MODE = disable


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

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


Un tweet tenía la respuesta para mí: tweet

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ó.


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 a continuación se encuentra una solución alternativa ...

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