最近项目开发想要把崩溃信息收集起来,发送到自己的邮箱。在网上 查找了相关资料。只需要一个方法 就可以如下。
我们需要在 appdelegate中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {} 这个方法中添加下面这句话来在我们的程序崩溃的时候调用这个UncaughtExceptionHandler。UncaughtExceptionHandler 的实现在下面。
//崩溃日志获取
NSSetUncaughtExceptionHandler (&UncaughtExceptionHandler);
UncaughtExceptionHandler 的实现:
void UncaughtExceptionHandler(NSException *exception) {
NSArray *arr = [exception callStackSymbols];//得到当前调用栈信息
NSString *reason = [exception reason];//崩溃的原因
NSString *name = [exception name];//异常类型
NSLog(@"exception type : %@ \n crash reason : %@ \n call stack info : %@", name, reason, arr);
//向自己发送崩溃信息邮件。
NSString *crashLogInfo = [NSString stringWithFormat:@"exception type : %@ \n crash reason : %@ \n call stack info : %@", name, reason, arr];
NSString *urlStr = [NSString stringWithFormat:@"mailto://myemail@hihooray.com?subject=程序已崩溃&body=感谢您的配合!错误详情:%@",crashLogInfo];
NSURL *url = [NSURL URLWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:url];
}
三方库也是使用这个原理收集崩溃信息,崩溃信息被提前拦截,导致我的捕获不能进行。问题终于解决了,我愉快的删掉了我的代码,使用起了三方库。