Il existe de nombreuses bibliothèques de rapports d'accident dans iOS, notamment TestFlight y HockeyApp . Si vous ne voulez pas dépendre des services, vous pouvez toujours utiliser des bibliothèques telles que PLCrashReporter . Lier ces bibliothèques est assez trivial car leur API publique consiste généralement en quelques classes avec plusieurs méthodes d'initialisation.
Cependant, lorsque nous avons essayé d'utiliser TestFlight, et plus tard HockeyApp dans notre application, notre application a commencé à se planter de manière aléatoire. Il s'avère que, ce est un problème connu signalé plusieurs temps Mais Xamarin ne le signale pas, il est relativement obscur et nous l'avons découvert à nos dépens.
Nous avons appris que tous les rapports de crash d'iOS empêchent Mono d'attraper les exceptions de référence nulle :
try {
object o = null;
o.GetHashCode ();
} catch {
// Catch block isn't called with crash reporting enabled.
// Instead, the app will crash.
}
Pourquoi cela se produit-il ? Citation de Rolf, un développeur Xamarin,
Une exception de référence nulle est en fait un signal SIGSEGV au départ. Habituellement, le runtime mono gère cela et le traduit en une exception de référence nulle, permettant à l'exécution de continuer. Le problème est que les signaux SIGSEGV sont une très mauvaise chose dans les applications ObjC (une exception de référence nulle est une exception de référence nulle). très mauvaise chose dans les applications ObjC (et lorsqu'ils se produisent en dehors du code géré), donc toute solution de reporting de crash le signalera comme un crash (et tuera l'application). cela se produit avant que MonoTouch ait la possibilité de gérer le SIGSEGV, donc il n'y a MonoTouch ne peut rien y faire.
Je suis sûr que beaucoup utilisent TestFlight dans les applications MonoTouch sans savoir qu'il provoque des plantages.
N'est-ce pas ironique ?
Comment faire des bibliothèques de rapports d'accidents no des applications MonoTouch en panne ?
1 votes
Si quelqu'un est curieux, ce sont nos Liaisons HockeyApp pour MonoTouch . HockeyApp n'est pas gratuit mais leur support est vraiment bon (ce qui est quelque chose que je ne peux pas dire de TestFlight) et généralement nous avons été satisfaits d'eux. J'ai ajouté ce correctif à l'exemple de projet. (Disclaimer : Nous ne sommes pas affiliés de quelque manière que ce soit).
1 votes
Cofondateur de Crittercism, nous avons publié ici un plugin pour Xamarin officiellement supporté qui fonctionne bien avec Mono. Par exemple, il n'empêche pas Mono de capter les signaux SIGSEGV. Nous laissons le runtime Mono les gérer et les envoyons ensuite à Crittercism. Vous pouvez le télécharger ici : composants.xamarin.com/view/crittercism