ts4515 - Iniciar sesión en un archivo en el iPhone
olvide mi id de apple y no puedo activar mi iphone (5)
¿Cuál sería la mejor manera de escribir declaraciones de registro en un archivo o base de datos en una aplicación de iPhone?
Idealmente, la salida NSLog () podría redirigirse a un archivo usando freopen (), pero he visto varios informes de que no funciona. ¿Alguien tiene esto en marcha o tiene alguna idea de cómo hacer esto mejor?
¡Gracias!
He utilizado con éxito freopen (...) en el teléfono para redirigir la salida a mi propio archivo.
Si desea utilizar Cocoa, NSString y NSData tienen métodos para leer / escribir en archivos y NSFileManager le ofrece operaciones de archivos. Aquí hay un ejemplo (debería funcionar en iPhone):
NSData *dataToWrite = [[NSString stringWithString:@"String to write"] dataUsingEncoding:NSUTF8StringEncoding];
NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *path = [docsDirectory stringByAppendingPathComponent:@"fileName.txt"];
// Write the file
[dataToWrite writeToFile:path atomically:YES];
// Read the file
NSString *stringFromFile = [[NSString alloc] initWithContentsOfFile:path];
// Check if file exists
NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager fileExistsAtPath:path]; // Returns a BOOL
// Remove the file
[fileManager removeItemAtPath:path error:NULL];
// Cleanup
[stringFromFile release];
[fileManager release];
Este código funciona para mí:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
#if TARGET_IPHONE_SIMULATOR == 0
freopen([@"/tmp/my_logs.txt" fileSystemRepresentation], "w", stderr);
#endif
}
Este código funciona muy bien para mí ...
#if TARGET_IPHONE_SIMULATOR == 0
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"console.log"];
freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
#endif
A continuación, puede obtener el archivo de registro del iPhone utilizando el método descrito aquí http://blog.coriolis.ch/2009/01/09/redirect-nslog-to-a-file-on-the-iphone/#more- 85
Tenga en cuenta que el uso de freopen DETENDERÁ LA CONSOLA EN XCODE funcionando. Sin embargo, por alguna razón, la consola que puede ver en el organizador de xcode sigue funcionando de maravilla.
Considere usar Cocoa Lumberjack . Es una utilidad ligera pero flexible para reemplazar la funcionalidad NSLog. En mi opinión, está en la misma clase que Log4J, lo que permite a los appenders personalizados y similares. Tiene un registrador SQLite, por ejemplo.