一般的第三方统计都会有crash统计,来看app的崩溃信息、崩溃原因。如果想要自己实现一个怎么办?没关系,IOS SDK中提供了一个现成的函数 NSSetUncaughtExceptionHandler 用来做异常处理
NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);//在程序启动时收集崩溃信息的调用,里面是一个C语言的函数
//C语言函数的实现,收集到崩溃信息的处理
void GMMLUncaughtExceptionHandler(NSException*exception){
NSArray * callStack = [exception callStackSymbols];
NSString * reason = [exception reason];
NSString * name = [exception name];
NSString * content = [NSString stringWithFormat:@"======异常错误报告======\nname:%@\nreason:\n%@callStackSymbols:\n%@",name,reason,[callStack componentsJoinedByString:@"\n"]];
NSMutableDictionary * muDict = [NSMutableDictionary dictionary];
[muDict setObject:@"event" forKey:@"t"];
[muDict setObject:@"_crash" forKey:@"ea"];
[muDict setObject:@"_crash" forKey:@"ec"];
[muDict setObject:@"_crash" forKey:@"el"];
[muDict setObject:@"20000" forKey:@"caid"];
[[NSUserDefaults standardUserDefaults] setObject:muDict forKey:@"CRASH"];
//手动调用default保存
[[NSUserDefaults standardUserDefaults] synchronize];
}
代码也不需要解释了吧,如果崩溃就会执行这个C语言函数,然后保存到NSUserDefaultsuserdefualt里面。可以在下次程序启动的时候去发送这些信息。
但是功能非常有限,而引起崩溃的大多数原因如:内存访问错误,重复释放等错误就无能为力了,因为这种错误它抛出的是Signal,所以必须要专门做Signal处理。(之后更新···)