web-dev-qa-db-fra.com

Envoyer un journal à Crashlytics sans un crash d'application

Comment faire en sorte que Crashlytics reçoive un journal sans que mon application ne se bloque? J'ai le code suivant:

if(!context.managedObjectContext save:&error) {
    CLS_LOG(@"%@",error.description)
}

En cas d'erreur, je souhaite que le serveur Crashlytics reçoive l'erreur, mais l'application doit continuer à s'exécuter.

Je n'ai pas besoin du journal tout de suite. Je serais heureux d’obtenir le journal au prochain redémarrage. Je ne veux tout simplement pas avoir à déclencher un blocage de mon application pour recevoir le journal.

Est-ce possible?

42
jack

Avec la nouvelle mise à jour de crashlytics, vous pouvez maintenant utiliser: 

[[Crashlytics sharedInstance] recordError:error];

Et à Swift:

Crashlytics.sharedInstance().recordError(error)

Vous pouvez consulter la documentation ici .

44
Tiago Almeida

Kinda old question, mais vous pouvez maintenant utiliser Answers qui fait partie de la poursuite Fabric (Crashlytics fait également partie de Fabric):

 enter image description here

Tissu peut être trouvé ici. Et documentation supplémentaire ici .

13
Rui Peres

J'ai essayé les lignes ci-dessous et cela fonctionne comme un charme. Dans le bloc try-catch, utilisez les lignes ci-dessous dans votre bloc catch

@try {
// line of code here
}
@catch (NSException *exception) {
NSUncaughtExceptionHandler *handler = NSGetUncaughtExceptionHandler();
handler(exception);
}

comme expliqué à http://support.crashlytics.com/knowledgebase/articles/222764-can-i-use-a-custom-exception-handler

[METTRE À JOUR]

Désormais, dans le crash de fabric, nous pouvons utiliser la simple fonction [Crashlytics recordCustomExceptionName:reason:frameArray:] pour envoyer des exceptions gérées

@try {
// line of code here
}
@catch (NSException *exception) {
    NSArray *stack = [exception callStackReturnAddresses];
    [[Crashlytics sharedInstance] recordCustomExceptionName: exception.name
                                                 reason: exception.reason
                                             frameArray: stack];
}

tel qu'expliqué à https://twittercommunity.com/t/crashlytics-ios-how-to-send-non-fatal-exceptions-without-app-crash/34592/32

7
Aanabidden

Pour moi, la méthode .recordError() n'a pas aidé, car elle n'enregistre pas les informations utilisateur. Ou je n'ai tout simplement pas trouvé où regarder. Utiliser recordCustomExceptionName me convient. Voici un exemple de mise en œuvre des deux manières:

func logMessage(_ message: String) {
    let userInfo = ["message" : message]
    let error = NSError(domain: "AppErrorDomain", code: 1, userInfo: userInfo)
    Crashlytics.sharedInstance().recordCustomExceptionName("API Error", reason: message, frameArray: [])
    Crashlytics.sharedInstance().recordError(error, withAdditionalUserInfo: userInfo)
}
0
Nik Kov