ExceptionHandle.m 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. //
  2. // ExceptionHandle.m
  3. // Exception_Class
  4. #import "ExceptionHandle.h"
  5. #import <UIKit/UIKit.h>
  6. static NSString *exceptionContent;
  7. @implementation ExceptionHandle
  8. +(void)catchException
  9. {
  10. //指定程序crash时,处理一些内容
  11. NSSetUncaughtExceptionHandler(& UncaughtExceptionHandler);
  12. }
  13. //程序将要crash之前,先执行此方法,此方法执行完毕之后,程序才会崩溃
  14. void UncaughtExceptionHandler(NSException *exception)
  15. {
  16. //异常名称
  17. NSString *name = exception.name;
  18. //异常原因
  19. NSString *reason = exception.reason;
  20. NSArray *array = exception.callStackSymbols;
  21. //当前时间
  22. NSString *timeString = [ExceptionHandle getCurrentTime];
  23. //获取当前设备
  24. NSString *model = [[UIDevice currentDevice] model];
  25. NSString *systemName = [[UIDevice currentDevice] systemName];
  26. NSString *systemVersion = [[UIDevice currentDevice] systemVersion];
  27. //获取应用程序版本号
  28. NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
  29. //获取程序名字
  30. NSString *identifier = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"];
  31. // \n 换行
  32. exceptionContent = [NSString stringWithFormat:@"\n\n\n =======异常信息========\n时间:%@ \n设备名称:%@ \n设备型号:%@%@ \n当前应用程序版本号:%@ \n应用名称:%@驾校版 \n异常名称:%@ \n异常的原因:%@ \nCallStackSymbols:%@",timeString,model,systemName,systemVersion,version,identifier,name,reason,array];
  33. /**把异常崩溃信息发送至开发者邮件
  34. 这里要不要加上网络情况判断 然后在无网络时保存到本地 然后有网在上传?不做了
  35. */
  36. NSMutableString *mailUrl = [NSMutableString string];
  37. [mailUrl appendString:@"mailto:1033556420@qq.com"];
  38. [mailUrl appendFormat:@"?cc="];
  39. [mailUrl appendString:@"&subject=程序异常崩溃,请发送异常给程序猿,谢谢合作!"];
  40. [mailUrl appendFormat:@"&body=<b>%@</b> body!", exceptionContent];
  41. // 打开地址 PS:下面这个方法好像过期
  42. NSString *mailPath = [mailUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  43. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:mailPath]];
  44. }
  45. +(NSString *)getCurrentTime
  46. {
  47. NSDate *date = [NSDate date];
  48. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  49. [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
  50. NSString *dateString = [formatter stringFromDate:date];
  51. return dateString;
  52. }
  53. @end