Ça peut être pratique d’être informé quand votre application crash sur un mobile. Mais le mieux ça serait d’avoir la pile d’appels non ? Pour le débug y a pas mieux.
Mais comment le savoir et avoir ces infos ?
Des erreurs tout le monde en fait, des bugs il y en a toujours, mais c’est notre devoir de les éradiquer. L’idée est de se pointer au carrefour où tous les bugs passent et de les attraper au vol.
Du coup, on va donc se déclarer apte à recevoir des exceptions, la passer dans un script de traitement / mise en forme d’erreur et envoyer le rapport (par mail ou par requête http asynchrone peu importe).
Je vous passe les détails sur le script de traitement de comment il marche en interne, pour me focaliser sur “Comment mettre ça en place ?”.
On se déclare apte à prendre les bugs
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { // Je prends les bugs, et je les passe à une méthode du script
NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler); // Je dis au script, attrape ce que tu peux (SIGABRT, SIGQUIT etc)
SetupUncaughtSignals(); // Là c'est notre code pour envoyer les erreurs ! [self sendBugsIfPresent];
On regarde si un rapport d’erreur est dispo, on envoie
Ici, on a fait le choix de proposer à l’utilisateur de l’envoyer par mail, du coup dans un premier temps, on lui affiche une UIAlertView, puis en fonction de son choix, on prépare un mail.
Veuillez noter l’utilisation d’une variable “globale” GBug qui contiendra dans une chaine toute le rapport d’erreur. C’est le script de traitement qui déclare cette variable.
UIAlertView *alert =[[UIAlertView alloc] initWithTitle:@"Unexpected exception"
message:@"An unexpected exception was caught the last time this program ran. Send the developer a bug report by e-mail?"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Send Report",nil]; [alert show]; }
-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { if(buttonIndex ==1){ /*
* Send an e-mail with the specified title.
*/
Bien sûr tout le code suivant est à mettre dans un fichier “notif.c” ou autre, puis il faut l’inclure dans AppDelegate.m. C’est lui s’occupe de tout.
Notez que le script va mettre dans un fichier de l’application “bug.txt” le dernier rapport. Il y a donc un risque d’écrasement si plusieurs rapports non générés, mais non envoyés tout de suite.Il y a donc un petit chantier de développement pour rendre ce système moins couillon.
Sauvegarde en bdd local ? Fichier indexé par la date ? C’est à vous de voir !
No comments yet.