当我们的项目上线后,想收集用户的崩溃信息主要有两种方式,一种是借第三方平台的统计,还有一种就是自己统计,上传服务器。这里就讲讲自己使用NSException统计崩溃信息。
在main.m中
@try {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
} @catch (NSException *exception) {
NSLog(@"main=====%@", exception);
}
打印结果:
2016-04-25 17:17:41.607 crash统计[2636:2304650] main=====-[__NSArray0 stringByAppendingString:]: unrecognized selector sent to instance 0x7fa948c03630
这个可以捕获所有的崩溃信息,然后将其存在沙盒中,在下次进入APP时上传到服务器,但是在main.m中是在崩溃时捕获,而最好的方式是在崩溃前捕获。
在AppDelegate.m中的
//拦截异常
void handleException(NSException *exception){
NSMutableDictionary * info = [NSMutableDictionary dictionary];
info[@"callStack"] = [exception callStackSymbols];//调用栈信息(错误来源哪个方法)
info[@"name"] = [exception name];//异常名字
info[@"reason"] = [exception reason];//异常描述
// [info writeToFile:<#(nonnull NSString *)#> atomically:<#(BOOL)#>] 写入沙盒
NSLog(@"%@-----%s",exception, __func__);
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//将沙盒中的错误信息传递给服务器
//设置捕捉异常的回调
NSSetUncaughtExceptionHandler(handleException);
return YES;
}
打印结果:
可见在崩溃之前已经捕获到崩溃信息,然后存在沙盒中,在下次进入APP时上传服务器。
对于独立开发者,其实可以调用系统发邮件,将崩溃信息发送到自己的邮箱进行统计。