Mejores Prácticas para el Registro de Errores y/o de presentación de informes para el iPhone
-
13-09-2019 - |
Pregunta
Cuando me dedico al desarrollo web, yo uso un encargo del registrador de que las capturas de los errores fatales y agrega un seguimiento a un archivo y muestra un mensaje al usuario.Yo de vez en cuando puede vistazo para ver si el archivo ha cambiado, lo que significa que, algún usuario ha encontrado un error y me puede cavar en ver lo que encontraron.
Me gustaría algo similar en el iphone, con algunas salvedades:
- Durante el desarrollo, debe ser trivial para restablecer la lista de errores o desactivar la notificación.
- Durante el desarrollo, los mensajes de error también debe mostrar en un lugar visible, como en la pantalla en la consola
- Una vez desplegado, errores cortésmente debe ser enviado a la nave nodriza para el análisis (para corregir un error en la próxima actualización)
- Activar la Traza/Información de registro cuando se trata de localizar un problema durante el desarrollo
- Desactivar el registro de la consola para 'Liberar' a acelerar las cosas para el usuario
- Debe limpiar después de sí mismo para ser un buen ciudadano en el teléfono
Algunos Enlaces Relacionados
- El uso de GSLog para que en lugar de NSLog
- el registro a un archivo en el iphone
- En el Mac, dice la gente de Apple bitácora del Sistema y GTM Registrador son el camino a seguir objective-c el registro de las mejores prácticas
- Jeff Un Blog de inscripción en el registro de
Parecer habría un común kit de herramientas para hacer esto - ¿cómo se puede manejar esto?
[Actualización Oct 2011] Ha habido algunos avances, de la variación de la madurez...
- PLCrashReporter.
- Quincy se encuentra en la parte superior del PLC.
- Bugsense comercial crash reporter.
- Crittercism crash y los informes de errores (algunos gratis paquetes, algunos de pago).
- Vuelo de prueba ahora tiene un SDK que las capturas se bloquea (pero no todavía para aplicaciones de la app store, acaba de dev apps).
- Como El Vuelo De Prueba, Hockey tiene como objetivo combinar la distribución ad hoc con la denuncia de accidentes.
Solución
Esto es lo que hacemos:
- Que el iPhone manejar su propio archivos de volcado a través del existente App Store mecanismos . Actualizar : habiendo encontrado iTunes Connect ser poco fiables a proporcionar informes de fallos, le recomiendo usar Tela / Crashlytics , o un competidor como Crittercism o Rollbar .
- Nuestro producto liberado tiene ningún rastro en, esto parece ser coherente con lo que la mayoría de las otras aplicaciones para el iPhone hacen.
- Si un error se informa a continuación reproducimos usando una acumulación trazado.
De forma más detallada:
- Se define macros a NSLog huella en numerosos niveles diferentes de granularidad.
- Uso Xcode construir configuración para cambiar el nivel de seguimiento, que controla la cantidad de traza se compila en el producto, por ejemplo, existen lanzamiento y depuración construir configuraciones.
- Si no hay ningún nivel de seguimiento se define a continuación mostramos traza completa en el simulador, y ningún rastro cuando se ejecuta en un dispositivo real.
He incluido código de ejemplo siguiente muestra cómo hemos escrito esto, y lo que la salida se parece.
Definimos múltiples diferentes niveles de trazas que los desarrolladores puedan identificar qué líneas de traza son importantes y pueden filtrar el menor nivel de detalle si quieren.
código de ejemplo:
- (void)myMethod:(NSObject *)xiObj
{
TRC_ENTRY;
TRC_DBG(@"Boring low level stuff");
TRC_NRM(@"Higher level trace for more important info");
TRC_ALT(@"Really important trace, something bad is happening");
TRC_ERR(@"Error, this indicates a coding bug or unexpected condition");
TRC_EXIT;
}
Ejemplo salida de rastreo:
2009-09-11 14:22:48.051 MyApp[3122:207] ENTRY:+[MyClass myMethod:]
2009-09-11 14:22:48.063 MyApp[3122:207] DEBUG:+[MyClass myMethod:]:Boring low level stuff
2009-09-11 14:22:48.063 MyApp[3122:207] NORMAL:+[MyClass myMethod:]:Higher level trace for more important info
2009-09-11 14:22:48.063 MyApp[3122:207] ALERT:+[MyClass myMethod:]:Really important trace, something bad is happening
2009-09-11 14:22:48.063 MyApp[3122:207] ERROR:+[MyClass myMethod:]:Error, this indicates a coding bug or unexpected condition
2009-09-11 14:22:48.073 MyApp[3122:207] EXIT:+[MyClass myMethod:]
Nuestras definiciones de trazas:
#ifndef TRC_LEVEL
#if TARGET_IPHONE_SIMULATOR != 0
#define TRC_LEVEL 0
#else
#define TRC_LEVEL 5
#endif
#endif
/*****************************************************************************/
/* Entry/exit trace macros */
/*****************************************************************************/
#if TRC_LEVEL == 0
#define TRC_ENTRY NSLog(@"ENTRY: %s:%d:", __PRETTY_FUNCTION__,__LINE__);
#define TRC_EXIT NSLog(@"EXIT: %s:%d:", __PRETTY_FUNCTION__,__LINE__);
#else
#define TRC_ENTRY
#define TRC_EXIT
#endif
/*****************************************************************************/
/* Debug trace macros */
/*****************************************************************************/
#if (TRC_LEVEL <= 1)
#define TRC_DBG(A, ...) NSLog(@"DEBUG: %s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_DBG(A, ...)
#endif
#if (TRC_LEVEL <= 2)
#define TRC_NRM(A, ...) NSLog(@"NORMAL:%s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_NRM(A, ...)
#endif
#if (TRC_LEVEL <= 3)
#define TRC_ALT(A, ...) NSLog(@"ALERT: %s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_ALT(A, ...)
#endif
#if (TRC_LEVEL <= 4)
#define TRC_ERR(A, ...) NSLog(@"ERROR: %s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_ERR(A, ...)
#endif
Configuración de Xcode:
En Xcode construir configuración, seleccione "Añadir configuración definida por el usuario" (haciendo clic en el pequeño engranaje en la parte inferior izquierda de la pantalla de configuración de generación), a continuación, definir un nuevo ajuste llamado GCC_PREPROCESSOR_DEFINITIONS
y darle la TRC_LEVEL=0
valor.
La única sutileza es que Xcode no sabe que hacer una generación limpia si cambia esta configuración, así que recuerde que hacer manualmente una limpia si lo cambia.
Otros consejos
Apple recoge automáticamente los registros de errores de los usuarios para ti, y se puede descargar desde iTunes Connect.
Si eso no es suficiente para ti, no estoy al tanto de un conjunto de herramientas, pero no me gustaría rodar algo por mi cuenta, en lo personal. Parece demasiado esfuerzo para desarrollar algo robusta, podría plantear problemas de privacidad, y al final, con 100,000K aplicaciones en la tienda de aplicaciones, el número de usuarios utilicen sus aplicaciones de nuevo después de descubrir que era cochecito?
¿Sabe usted que CrashReporter para iPhone existe?
Hay una repositorio en github, que demos ese código.
Tiene algunas características interesantes como maping el seguimiento de la pila a su código y gestiona algunas cosas específicas git como hashes de versión.
Le recomiendo CocoaLumberJack de Robbie Hanson: https://github.com/robbiehanson/CocoaLumberjack
Es muy flexible y potente tal vez incluso un poco excesivo si se abusa. Soporta diferentes niveles de registro. El registro en los archivos se puede activar con un par de líneas de código, e incluso se envía a través de la red.