iOS 10 no imprime NSLogs
xcode xcode8 (9)
Nada imprime desde
NSLog
en Xcode 8.0 beta (8S128d).
printf
ha cambiado
Aquí está mi código:
NSLog(@"hello from NSLog");
printf("hello from printf");
Aquí está la salida en iOS 9 Simulator:
2016-06-17 09:49:10.887 calmapp-dev[28517:567025] hello from NSLog
hello from printf
Aquí está la salida en iOS 10 Simulator:
hello from printf
Además, asegúrese de que la consola esté realmente visible en Xcode (es decir, asegúrese de que el icono del lado derecho esté resaltado en azul, como se muestra en la imagen a continuación).
Después de actualizar Xcode, ocultó la consola y me mostró solo la vista Variables.
Esto hizo que pareciera que
NSLog()
no funcionaba correctamente, mientras que de hecho funcionaba correctamente, simplemente no podía ver la salida.
Estoy usando Xcode 8, por lo que también encontré el mismo problema.
Y resolví este problema agregando
value = disable
en el simulador, pero en una máquina real no agrego valor.
Hmmm ... parece que la propiedad "OS_ACTIVITY_MODE": "deshabilitar" IMPIDE que NSlog aparezca en el registro de Xcode 9.
Desmarcar este valor en mi esquema restauró mis registros.
Para cualquiera que se encuentre con esto en el futuro. La razón por la que NSLog no se imprime en syslog en iOS 10 e iOS 11 se debe a que Apple cambió a Registro unificado.
Puede ver la charla de WWDC sobre esto aquí: https://developer.apple.com/videos/play/wwdc2016/721/
Documentación aquí: https://developer.apple.com/documentation/os/logging
A partir del 10 deberías usar os_log en lugar de NSLog.
Cómo encontrar los registros en el disco: https://www.blackbagtech.com/blog/2017/09/22/accessing-unified-logs-image/
Para resumir, los registros se encuentran en
/var/db/diagnostics
que se pueden encontrar para una VM en
/Users/USERNAME/Library/Developer/CoreSimulator/Devices/SIMULATOR-GUID/data/var/db/
Copie todos los elementos dentro de los
diagnostics
y
uuidtext
en una sola carpeta (no incluya los diagnósticos de las carpetas o uuidtext solo lo que está dentro).
Cambie el nombre de esa carpeta
foldername.xarchive
.
Ábralo en Console.app o use el
log
utilidades de OSX:
log show <path to archive> --info --predicate <options>
Puede ser que haya agregado la propiedad "OS_ACTIVITY_MODE": "deshabilitar" en las variables de entorno de Scheme (para ocultar la salida del sistema operativo del simulador) y se haya olvidado, y ahora se está ejecutando en un dispositivo real.
En Xcode 8:
Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables
Solo agregue
OS_ACTIVITY_MODE
y
OS_ACTIVITY_MODE
(No agregue un valor)
Resumen: Este es un error de Xcode 8 + iOS10, podemos resolverlo de esta manera:
-
Cuando use el simulador, agregue el Nombre "OS_ACTIVITY_MODE" y el Valor "deshabilitar" y verifíquelo.
-
Cuando esté en un dispositivo real, solo agregue "OS_ACTIVITY_MODE" y verifíquelo (No agregue el Valor). Verá el NSLog en la consola Xcode8.
Si revisa las notas de la versión beta de Xcode 8 , encontrará que dice:
Al depurar una aplicación que se ejecuta en Simulator, es posible que los registros no estén visibles en la consola. Solución alternativa: use el comando + / en Simulator.app para abrir el registro del sistema en la aplicación Consola para ver NSLogs. (26457535)
Tampoco puedo ver la salida NSLog en un dispositivo iOS 10 real. Si está utilizando dispositivos reales, puede abrir la ventana Dispositivos desde Xcode (Shift + Command + 2) y ver los registros de dispositivos allí, pero es difícil ver los registros de su aplicación porque la consola muestra registros del sistema y todas las aplicaciones.
(Estoy usando Xcode 7, por lo que puede que no sea un problema de Xcode sino un problema de iOS 10)
el NSlog o print en realidad se ejecuta pero está oculto entre muchas otras salidas de depuración de la consola para resolver este problema. Abra Xcode8:
Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables
agregue "OS_ACTIVITY_MODE" y establezca el Valor en "deshabilitar" y verifíquelo.
haga clic en cerrar
xcode9
agregue "OS_ACTIVITY_MODE" y establezca el Valor en "predeterminado" y verifíquelo.
NSLog
mensajes
NSLog
ya no se muestran cuando actualicé a Xcode 9.1 + iOS 11.1.
Inicialmente, la
respuesta aceptada
me dio una manera de solucionar esto usando la aplicación Consola y habilitando el Simulador (
ver la respuesta de Lucas
).
En la aplicación Consola en
Action
, intenté seleccionar
Include Debug Messages
y anular la selección de
Include Info Messages
(para que la consola no esté inundada de mensajes del sistema).
NSLog
mensajes
NSLog
aparecieron en la ventana Consola en Xcode pero no en la aplicación Consola.
Me di cuenta de que tenía que haber una forma más directa de
disable
o habilitar (es decir, por
default
)
NSLogs
gracias al comentario de Coeur en respuesta a
esta respuesta.
En mi opinión, es la mejor respuesta porque establecer
OS_ACTIVITY_MODE
en
disable
o
default
tendrá más sentido para los principiantes.