2009-01-09 22 views
13

Estoy registrando un montón de datos con NSLog(). ¿Hay alguna forma de capturar los datos de registro cuando mi iPhone no está conectado a mi máquina de desarrollo y se ejecuta bajo un depurador?¿Hay alguna manera de capturar la salida de NSLog en un iPhone cuando no está conectado a un depurador?

Por ejemplo, ¿puedo redirigirlo a un archivo y luego volver a leer el archivo de registro a través de Xcode en un momento posterior? Necesito hacer esto para probar mi aplicación cuando el WiFi es pobre, lo que requiere que vaya lejos de mi escritorio.

Respuesta

17

Estoy bastante seguro de que las llamadas NSLog() se escribirán en el registro de la consola del sistema, así que si conecta su iPhone a su computadora después de estar desconectado, debería poder ver el registro de la consola en XCode Organizer. La única advertencia es que el registro de la consola tiene un tamaño limitado, por lo que las entradas más antiguas pueden ser eliminadas si realiza una gran cantidad de registros.

+0

Buena llamada: soy nuevo en el desarrollo de iPhone, y la única forma en que sabía cómo ver el resultado de NSLog() era en la consola del depurador. –

28

El siguiente método creará un nombre de archivo "console.log" en la carpeta Documentos de su aplicación para que pueda leerlo más tarde.

llamar a este método al comienzo de su programa:

- (void) redirectConsoleLogToDocumentFolder 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"console.log"]; 
    freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr); 
} 

nunca se borra el registro, a fin de utilizar con precaución.

Una vez que haya probado su aplicación en el campo, vuelva a conectar su teléfono a su Mac, en Xcode, abra el Organizador. En el panel de Resumen, tiene la lista de todas las aplicaciones en su teléfono. Expanda el que está depurando y verá un paquete llamado "Datos de la aplicación".

Haga clic en la flecha a la derecha de su nombre y guárdela. Finalizará con una carpeta con un nombre de su identificador de paquete seguido de una fecha.

Dentro de esta carpeta encontrará su carpeta de documentos, que debe contener la console.log

+0

Un pequeño pequeño cambio, si le preocupa el tamaño del registro, es cambiar "a +" por "w" en freopen(). Pero eso crea la otra advertencia, asegúrese de obtener este archivo entre ejecuciones del programa, ya que se volverá a crear desde cero cada vez que se ejecute el programa (esto puede ser un obstáculo tan grande como un archivo "demasiado grande") – KevinDTimm

+0

Gracias :) Es posible grabar de log to file y mostrar el NSLog en la consola xcode al mismo tiempo? –

2

Marc Novakowski es correcto. La salida de la consola se conecta al teléfono y cuando conecta su Mac a su teléfono, la salida de la consola está disponible en la ventana del organizador.

Simplemente seleccione su teléfono en el panel de dispositivos, y seleccione la pestaña de la consola. La salida de la consola reciente estará ahí. Muy genial.

Acabo de descubrir esto. Eso será muy útil en situaciones como describir dónde necesita estar lejos de su computadora.

Por cierto, tengo una solución a su necesidad de probar señales WiFi débiles. Simplemente envuelva su teléfono en papel de aluminio, con el cable USB sobresaliendo de la envoltura de aluminio. Si está ejecutando con él atado, puede pasar por el código en el depurador. No puede manipular la interfaz de usuario, pero puede degradar/eliminar señales de radio como 3D, WiFi y GPS. Si desea degradar la intensidad de la señal pero no cancelarla por completo, deberá experimentar cubriendo parcialmente el teléfono con papel de aluminio, colocando pequeños agujeros en la cubierta, etc.

Una advertencia: no deje el teléfono envuelto en papel de aluminio por más de unos minutos a la vez. Es probable que se sobrecaliente.

5

También hay una aplicación Console en la App Store, pero solo funciona para iOS 6 y versiones anteriores.

Cuando salió iOS 7, it effectively stopped working. (Ahora solo puede leer sus propios registros de la Consola, no los de todo el sistema.)

+1

Dada la antigüedad de esta pregunta, la duración de su respuesta y el hecho de que la aplicación en cuestión fue desarrollada por un "Chris", quizás deba revelar que la aplicación probablemente fue hecha por usted mismo. :) –

+2

En realidad no soy el autor de este software, aunque tienes razón, tenemos el mismo nombre. –

+3

¡Mis más sinceras disculpas en ese caso! –

Cuestiones relacionadas