iOS-Crash捕获以及生成日志上传

iOS在Release环境下运行,遇到Exception导致的Crash时,可以进行捕获。

首先编写异常处理逻辑:

void UncaughtExceptionHandler(NSException *exception) {
    // 异常的堆栈信息
    NSArray *stackArray = [exception callStackSymbols];

    // 出现异常的原因
    NSString *reason = [exception reason];

    // 异常名称
    NSString *name = [exception name];
    NSString *exceptionInfo = [NSString stringWithFormat:@"Exception reason:%@\nException name:%@\nException stack:%@",name, reason, stackArray];
    NSLog(@"%@", exceptionInfo);

    // 把异常崩溃信息保存到本地文件,下次启动时,后台上传到服务端
    [exceptionInfo writeToFile:[NSString stringWithFormat:@"%@/Documents/error.log",NSHomeDirectory()]  atomically:YES encoding:NSUTF8StringEncoding error:nil];

}

其次,在AppDelegate中设置:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
    return YES;
}

制造一个异常:

- (void)viewDidLoad {
    [super viewDidLoad];
    NSArray *arr = [NSArray new];
    arr[-1];
}

可以看到运行后,在Doc目录下生成了log文件:

CrashLog