Frage

Wenn ich Web-Entwicklung zu tun, verwende ich ein Maß Logger, die fatalen Fehler fängt und fügt eine Spur in eine Datei und zeigt eine Meldung an den Benutzer. Ich kann Blick gelegentlich zu sehen, ob die Datei geändert, das heißt, einige Benutzer einen Fehler aufgetreten ist, und ich kann graben, um zu sehen, was sie anzutreffen.

ich etwas ähnliches auf dem iPhone möge, mit einigen Einschränkungen:

  • Bei der Entwicklung, soll es trivial sein, um die Liste der Fehler zurückgesetzt oder Benachrichtigung deaktivieren.
  • Bei der Entwicklung, die Fehlermeldungen sollten auch in einigen offensichtlichen Ort zeigen, wie auf dem Bildschirm auf der Konsole
  • Nach der Bereitstellung Fehler höflich zum Mutterschiff zur Analyse geschickt werden soll (für ein Bug-Fix im nächsten Update)
  • Schalten Sie Trace / Info-Protokollierung, wenn ein Problem bei der Entwicklung auf die Spur zu versuchen
  • Schalten Sie die Konsolenprotokollierung für ‚Release‘ Dinge für den Benutzer zu beschleunigen
  • Sollte nach selbst reinigen-up, um ein guter Bürger am Telefon
  • zu sein

Einige Verwandte Links

Es scheint, als gäbe es ein gemeinsames Toolkit wäre, dies zu tun - wie Sie dies tun behandeln

[Update Oktober 2011] Es wurden zwar einige Entwicklungen, unterschiedlicher Reife ...

  • PLCrashReporter .
  • Quincy auf der SPS sitzt.
  • BugSense kommerzielle Crash Reporter.
  • Crittercism Absturz und Fehlerberichterstattung (einige freie Pakete, einige bezahlt).
  • Testflug jetzt ein SDK hat die Abstürze fängt (aber noch nicht für App-Store-Anwendungen, nur Entwickler Apps).
  • Wie Testflug, Hockey zielt darauf ab, Ad-hoc-Verteilung mit Crash-Reporting zu kombinieren.
War es hilfreich?

Lösung

Hier ist, was wir tun:

  • Lassen Sie das iPhone seiner eigenen Crash-Dumps behandelt durch die bestehende App Store Mechanismen . Aktualisieren : iTunes Connect auf die Bereitstellung von Absturzberichten als unzuverlässig gefunden zu haben, empfehle ich Stoff / Crashlytics oder ein Wettbewerber wie Crittercism oder Rollbar .
  • hat unser freigegebenes Produkt keine Spur in, scheint dies bei gleichbleibender zu sein, was den meisten anderen iPhone-Anwendungen zu tun.
  • Wenn ein Fehler gemeldet wird, dann reproduzieren wir es zurückverfolgt Build verwenden.

Im Detail:

  • Wir definieren Makros NSLog Spur auf zahlreichen verschiedenen Ebenen der Granularität.
  • Verwenden Sie Xcode bauen Einstellungen den Trace-Level zu ändern, die steuert, wie viel Spur wird in das Produkt zusammengestellt, z.B. gibt es zum Release und Debug-Build-Konfigurationen.
  • Wenn keine Spur Ebene definiert wird dann zeigen wir die volle Spur in den Simulator, und keine Spur, wenn sie auf einem echten Gerät ausgeführt wird.

Ich habe unten zeigt Beispielcode enthält, wie wir dies geschrieben haben, und wie die Ausgabe aussieht.

Wir definieren mehrere verschiedene Spuren, so dass Entwickler identifizieren können, welche Linien der Spur sind wichtig, und kann niedriger Ebene Detail herausfiltern, wenn sie wollen.

Beispielcode:

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

Beispiel Trace-Ausgabe:

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

Unsere Spurendefinitionen:

#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

Xcode Einstellungen:

In Xcode bauen Einstellungen, wählen Sie „Add Benutzerdefinierte Einstellung“ (durch am unteren linken Rand des Build-Konfiguration-Bildschirm auf dem Rädchen klicken), dann eine neue Einstellung namens GCC_PREPROCESSOR_DEFINITIONS definieren und den Wert TRC_LEVEL=0 geben.

Die einzige Subtilität ist, dass Xcode nicht weiß, einen bereinigter Build zu tun, wenn Sie diese Einstellung ändern, so denken Sie daran manuell reinigen tun, wenn Sie es ändern.

Andere Tipps

Apple-sammelt automatisch Absturzprotokolle von den Benutzern für Sie, und Sie können sie von iTunes verbinden herunterladen.

Wenn das nicht genug für Sie ist, bin ich eines Toolkits nicht bewusst, aber ich würde nicht wollen, etwas auf eigene Faust rollen, persönlich. Es scheint, wie zu viel Aufwand etwas robuster zu entwickeln, könnten Bedenken hinsichtlich der Privatsphäre erhöhen, und am Ende mit 100.000 T-Apps im App Store, wie viele Nutzer Ihre Anwendung wieder verwenden würde nach der Entdeckung, es war Buggy?

Wissen Sie, dass Crashreporter für iPhone existiert?

Es ist ein Repository auf Github, die diesen Code Demos.

Es hat einige coole Features wie Maping den Stack-Trace, um Ihren Code und verwaltet einige git bestimmte Dinge wie Version Hashes.

Ich empfehle Robbie Hanson CocoaLumberJack hoch: https://github.com/robbiehanson/CocoaLumberjack

Es ist sehr flexibel und leistungsstark vielleicht sogar ein bisschen übertrieben, wenn missbraucht. Unterstützt verschiedene Ebenen der Protokollierung. Anmelden, um Dateien mit ein paar Zeilen Code eingeschaltet und auch gesendet werden, über das Netzwerk werden kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top