carsh日志捕获和上报

14年记录于有道笔记的老文章,有时间再修改。


崩溃捕获和收集

目的

通过崩溃信息的捕获和收集,可以收集到已发布应用的异常,以便开发人员发现和修改bug,对于提高软件质量有着极大的帮助。

获取系统生成的崩溃日志

  1. iTunes同步
  2. Xcode
  3. iTunes Connect

以上方法中的第一和第二种必须要连接设备,这在我们将App分发到用户设备上之后是不可能实现的,第三种方法如果应用还卖得不多,或者刚上架不久,或者用户关闭了上传日志的选项,iTunes Connect账号上也可能还没有任何崩溃日志。所以显然不能通过收集系统自动生成的崩溃日志来达成我们的目的。

使用第三方统计分析工具

如果是个人开发应用或者没有特殊限制的话,可以直接选择比较知名的第三方统计工具加入到工程中就万事大吉了,其中的错误日志功能完全能够满足需求,而且不需要额外准备接收服务器。

自定义崩溃收集系统的原理及实现【SFReportSDK】

启动方式及相关配置

1
2
3
SFReportManager * sfReportManager = [SFReportManager sharedSFReportManager];
[sfReportManager configureWithIdentifier:@"com.sf.demo" delegate:self];
[sfReportManager startManager];
1
2
3
4
5
6
7
8
9
10
#define SFREPORT_VERSION @"0.1"
#define SFREPORT_BUILD @"1"
#ifndef SFREPORT_CRASH_REPORTER
# define SFREPORT_CRASH_REPORTER 1
#endif
#ifndef SFREPORT_EVENT_REPORTER
# define SFREPORT_EVENT_REPORTER 1
#endif

捕捉崩溃信息

系统错误时会抛出一个错误信号,在我们的app启动时我们可以通过设定一个回调函数来接受并处理异常。

  • 开启异常捕获监听,用来处理程序崩溃时的回调动作

    NSSetUncaughtExceptionHandler(&uncaught_exception_handler);
    
  • 实现自己的处理函数
static void uncaught_exception_handler (NSException *exception){
        //todo
}

记录和保存崩溃信息

记录日志通常会牵扯到隐私问题,要谨慎考虑哪些信息是不该被记录进日志的,例如用户的用户名和密码或者是信用卡号和密码等。以下是暂时拟出的需要记录的字段及说明。

字段 说明
Incident Identifier 崩溃日志唯一标识符,是一个UUID
CrashReporter Key 是与设备标识相对应的唯一键值。虽然它不是真正的设备标识符,但也是一个非常有用的情报:如果你看到100个崩溃日志的CrashReporter Key值都是相同的,或者只有少数几个不同的CrashReport值,说明这不是一个普遍的问题,只发生在一个或少数几个设备上
Hardware Model 设备类型
Identifier 应用标识符,即bundle identifier
Version 前面是build code,后面是发布版本号。
Code Type ARM (Native)
User ID 用户ID
Date/Time 奔溃时间
Launch Time 应用启动时间
OS Version 操作系统版本
Report Version 105
Exception Type 异常类型
exceptionName 异常类型
exceprionReason 异常原因
CallStackSymbols 堆栈信息

路径:
/Library/Caches/com.sf.report.data/Crash/448525886.txt

上传崩溃信息

*压缩

ZipArchive

*加密

AES

RSA

*上传

crash

坚持原创技术分享,您的支持将鼓励我继续创作!