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?
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 .
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
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)
}