Question

Quand je fais du développement web, j'utiliser un enregistreur sur mesure qui attire des erreurs fatales et une trace ajoute un fichier et affiche un message à l'utilisateur. Je peux de temps en temps coup d'oeil pour voir si le fichier a été modifié, ce qui signifie, certains utilisateurs a rencontré une erreur et je peux creuser pour voir ce qu'ils ont trouvé.

Je voudrais quelque chose de similaire sur l'iPhone, avec quelques mises en garde:

  • Lors du développement, il devrait être trivial pour réinitialiser la liste des erreurs ou désactiver la notification.
  • Lors du développement, les messages d'erreur devraient également apparaître dans un endroit évident, comme à l'écran dans la console
  • Une fois déployés, les erreurs doivent être envoyées poliment au ravitailleur pour l'analyse (pour une correction de bug dans la prochaine mise à jour)
  • Activer l'enregistrement Trace / Info en essayant de traquer un problème au cours du développement
  • Désactiver la journalisation de la console pour « libérer » pour accélérer les choses pour l'utilisateur
  • Si après lui-même de nettoyage de manière à être un bon citoyen au téléphone

Quelques liens connexes

Il semble comme il y aurait une boîte à outils commune pour le faire - comment voulez-vous gérer cela

[Mise à jour octobre 2011] Il y a eu des développements, de maturité variant ...

Était-ce utile?

La solution

Voici ce que nous faisons:

  • Laissez l'iPhone gérer son propre vidages par le App existante magasin mécanismes . Mise à jour : avoir trouvé iTunes Connect peu fiables à fournir des rapports de plantage, je recommande d'utiliser Tissu / Crashlytics , ou un concurrent comme Crittercism ou Arceaux.
  • Notre produit n'a publié aucune trace dans, cela semble être conforme à ce que la plupart des autres applications de l'iPhone font.
  • Si un bug est signalé alors que nous reproduisons à l'aide d'une construction tracée.

De façon plus détaillée:

  • Nous définissons les macros de trace NSLog à de nombreux différents niveaux de granularité.
  • Utilisez Xcode construire des paramètres pour modifier le niveau de trace, qui contrôle la quantité de trace est compilée dans le produit, par exemple il y a des rejets et de débogage des configurations de construction.
  • Si aucun niveau de trace est défini, nous montrons la trace complète dans le simulateur, et aucune trace lors de l'exécution sur un périphérique réel.

J'ai inclus un exemple de code ci-dessous montre comment nous avons écrit cela, et ce que la sortie ressemble.

Nous définissons des traces multiples différents afin que les développeurs peuvent identifier les lignes de trace sont importantes, et peuvent filtrer les détails de niveau inférieur si elles veulent.

Exemple code:

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

Exemple sortie de trace:

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

Nos définitions de traces:

#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

Paramètres Xcode:

Dans Xcode paramètres de construction, choisissez « Ajouter un paramètre défini par l'utilisateur » (en cliquant sur le petit COG en bas à gauche de l'écran de configuration de construction), puis définir un nouveau paramètre appelé GCC_PREPROCESSOR_DEFINITIONS et lui donner la valeur TRC_LEVEL=0.

La seule subtilité est que Xcode ne sait pas faire une construction propre si vous modifiez ce paramètre, alors n'oubliez pas de le faire manuellement un Clean si vous le changez.

Autres conseils

Apple recueille automatiquement des journaux d'incidents des utilisateurs pour vous, et vous pouvez les télécharger à partir d'iTunes se connecter.

Si cela ne suffit pas pour vous, je ne suis pas au courant d'une boîte à outils, mais je ne voudrais pas rouler quelque chose sur moi-même, personnellement. Il semble que trop d'efforts pour développer quelque chose solide, pourrait soulever des problèmes de la vie privée, et à la fin, avec 100,000K applications dans l'App Store, combien d'utilisateurs utiliseraient à nouveau votre demande après avoir découvert qu'il était bogué?

Savez-vous que CrashReporter pour iPhone existe?

Il y a un dépôt sur GitHub qui démos code.

Il a quelques fonctionnalités intéressantes comme Maping la trace de la pile à votre code et gère certaines choses spécifiques git comme hash version.

Je recommande fortement CocoaLumberJack de Robbie Hanson: https://github.com/robbiehanson/CocoaLumberjack

Il est très flexible et puissant peut-être même un peu excessif en cas d'abus. Prise en charge des différents niveaux de l'exploitation forestière. La connexion aux fichiers peut être activée avec quelques lignes de code et même être envoyé sur le réseau.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top