iOS 奔溃BUG统计

//
//  MyUncaughtExceptionHandler.h
//  ZhuGuangMaMa_Measure
//
//  Created by yinbo on 2016/10/25.
//  Copyright © 2016年 yinbo. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface MyUncaughtExceptionHandler : NSObject
+ (void)setDefaultHandler;
+ (NSUncaughtExceptionHandler *)getHandler;
+ (void)TakeException:(NSException *) exception;
@end



//
//  MyUncaughtExceptionHandler.m
//  ZhuGuangMaMa_Measure
//
//  Created by yinbo on 2016/10/25.
//  Copyright © 2016年 yinbo. All rights reserved.
//

#import "MyUncaughtExceptionHandler.h"

// 沙盒的地址
NSString * applicationDocumentsDirectory()
{
    return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}
// 崩溃时的回调函数
void UncaughtExceptionHandler(NSException * exception)
{
    NSArray * arr = [exception callStackSymbols];
    NSString * reason = [exception reason]; // // 崩溃的原因  可以有崩溃的原因(数组越界,字典nil,调用未知方法...) 崩溃的控制器以及方法
    NSString * name = [exception name];
    NSString * url = [NSString stringWithFormat:@"reason:\n %@\n callStackSymbols:\n%@",reason,[arr componentsJoinedByString:@"\n"]];
//    NSString * url = [NSString stringWithFormat:@"========异常错误报告========\nname:%@\nreason:\n%@",name,reason];
    [[NSUserDefaults standardUserDefaults]setObject:name forKey:@"ename"];
    NSString * path = [applicationDocumentsDirectory() stringByAppendingPathComponent:@"Exception.txt"];
    // 将一个txt文件写入沙盒
    [url writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
    
}


@implementation MyUncaughtExceptionHandler
// 沙盒地址
-(NSString *)applicationDocumentsDirectory
{
    return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}

+ (void)setDefaultHandler
{
    NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
}

+ (NSUncaughtExceptionHandler *)getHandler
{
    return NSGetUncaughtExceptionHandler();
}

+ (void)TakeException:(NSException *)exception
{
    NSArray * arr = [exception callStackSymbols];
    NSString * reason = [exception reason];
    NSString * name = [exception name];
    NSString * url = [NSString stringWithFormat:@"========异常错误报告========\nname:%@\nreason:\n%@\ncallStackSymbols:\n%@",name,reason,[arr componentsJoinedByString:@"\n"]];
    NSString * path = [applicationDocumentsDirectory() stringByAppendingPathComponent:@"Exception.txt"];
    [url writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
}

@end


 

-(void)DeleaException{
    [MyUncaughtExceptionHandler setDefaultHandler];
    // 发送崩溃日志
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *dataPath = [path stringByAppendingPathComponent:@"Exception.txt"];
    NSData *data = [NSData dataWithContentsOfFile:dataPath];
    if (data != nil) {
        //        [self sendExceptionLogWithData:data];
        NSString *str=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
        //        NSLog(@"异常:%@",str);
        NSMutableDictionary *mdic=[[NSMutableDictionary alloc]initWithCapacity:0];
        [mdic setObject:[[NSUserDefaults standardUserDefaults] valueForKey:@"ename"] forKey:@"ename"];
        [mdic setObject:str forKey:@"details"];
        [mdic setObject:[UIDevice currentDevice].systemVersion forKey:@"osVersion"];
        [mdic setObject:@"iOS" forKey:@"osName"];
        [mdic setObject:@"烛光妈妈" forKey:@"appName"];
        [mdic setObject:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] forKey:@"appVersion"];
        //        NSString *identifierForVendor = [[UIDevice currentDevice].identifierForVendor UUIDString];
        [mdic setObject:MYUUID forKey:@"deviceSn"];
        [mdic setObject:@"apple" forKey:@"deviceName"];
        [mdic setObject:[[UIDevice currentDevice] model] forKey:@"deviceModel"];
        SelfDataModel *selfdata=[SelfDataModel returnModelBySelectFMDB];
        if (selfdata) {
            [mdic setObject:selfdata.idNum forKey:@"uid"];
        }
        
        
        NSLog(@"%@",mdic);
        NSString *url=[[HJInterfaceManager sharedInstance]Logreport];
        [HJHttpManager PostRequestWithUrl:url param:mdic finish:^(NSData *data) {
            NSDictionary *dic=(NSDictionary *)data;
            NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
            NSString *dataPath = [path stringByAppendingPathComponent:@"Exception.txt"];
            [[NSFileManager defaultManager]removeItemAtPath:dataPath error:nil];
            NSLog(@"请求成功");
        } failed:^(NSError *error) {
            NSLog(@"请求失败");
        }];
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值