iOS OC应用异常捕获,崩溃退出前返回信息给后台

第三方的了,有友盟,腾讯的bugly

 

查了一下网上类似的代码很多,在借鉴前辈的代码后,组合了一下: 

1、捕获异常信息

2、获得当前日期,版本,系统

3、获得出bug的视图控制器转为字符串

4、将前3条信息,同步上传反馈给后台---应用out了

 

代码如下:

//在 APPDelegate?️
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ///捕获异常消息捕获函数 //注册消息处理函数的处理方法 NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler); } #pragma mark 收集异常,上传 void UncaughtExceptionHandler(NSException *exception) { //异常信息 NSArray *callStack = [exception callStackSymbols]; NSString *reason = [exception reason]; NSString *name = [exception name]; //日期 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"]; NSString * dateStr = [formatter stringFromDate:[NSDate date]]; //获取崩溃界面 UIViewController * viewNow = [self topViewControllerWithRootViewController:[UIApplication sharedApplication].keyWindow.rootViewController]; //class 转字符串 NSString * nowview = NSStringFromClass([viewNow class]); // 用户信息 NSDictionary * diceuserport= [[NSUserDefaults standardUserDefaults]objectForKey:@"useruidport" ]; //app版本 NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; NSString *appCurVersion = [infoDictionary objectForKey:@"CFBundleShortVersionString"]; //iOS系统 NSString * devicetext = [NSString stringWithFormat:@"%f",[[[UIDevice currentDevice] systemVersion] floatValue]]; //综合信息 NSString *content = [NSString stringWithFormat:@"\n日期:%@ \nuid:%@ \n端口:%@ \nAPP版本:%@ \n系统版本:%@ \n错误:%@ \n视图控制器:%@ \n错误原因:%@ \n崩溃所在:%@ ",dateStr,diceuserport[@"uid"],diceuserport[@"port"],appCurVersion,devicetext,name,nowview,reason,[callStack componentsJoinedByString:@"\n"]]; //同步方法上传服务器 (试了试异步了,还没上传就崩了) // 创建URL对象 NSURL *url =[NSURL URLWithString:YJFKPresentUrlStr]; NSMutableURLRequest *resuest =[NSMutableURLRequest requestWithURL:url]; [resuest setHTTPMethod:@"post"]; [resuest setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; [resuest setValue:@"application/json" forHTTPHeaderField:@"Accept"]; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:@{@"uid":diceuserport[@"uid"],@"type":@"应用崩溃",@"content":content,@"contact_way":@"App-反馈"} options:NSJSONWritingPrettyPrinted error:nil]; NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData]; resuest.HTTPBody = tempJsonData; //4 创建响应对象 NSURLResponse *response = nil; //5 创建连接对象 NSError *error; NSData *data = [NSURLConnection sendSynchronousRequest:resuest returningResponse:&response error:&error]; NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error]; //反馈结果 NSLog(@"%@",dict); }


 
  

-(UIViewController*)topViewControllerWithRootViewController:(UIViewController*)rootViewController

 
  

{

 
  

    if ([rootViewController isKindOfClass:[UITabBarController class]]) {

 
  

        UITabBarController *tabBarController = (UITabBarController *)rootViewController;

 
  

        return [self topViewControllerWithRootViewController:tabBarController.selectedViewController];

 
  

    } else if ([rootViewController isKindOfClass:[UINavigationController class]]) {

 
  

        UINavigationController* navigationController = (UINavigationController*)rootViewController;

 
  

        return [self topViewControllerWithRootViewController:navigationController.visibleViewController];

 
  

    } else if (rootViewController.presentedViewController) {

 
  

        UIViewController* presentedViewController = rootViewController.presentedViewController;

 
  

        return [self topViewControllerWithRootViewController: presentedViewController];

 
  

    } else {

 
  

        return rootViewController;

 
  

    }

 
  

}



 

转载于:https://www.cnblogs.com/xujiahui/p/7597932.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值