Wrappres' Studio.

奔溃监控

字数统计: 465阅读时长: 1 min
2019/11/03 Share

造成奔溃的原因

  • 数组越界
  • 多线程问题:在子线程更新 UI,多个线程进行读取操作
  • 主线程无响应:主线程超过系统规定的时间无响应,就会被 Watchdog 杀掉
  • 野指针:指针指向一个已经删除的对象访问内存区域,会出现也野指针奔溃

信号可捕获的奔溃日志

在提交时选上 “Upload your app’s symbols to receive symbolicated reports from Apple”,就可以直接在 Xcode 的 Archive中看到符号化后的崩溃日志。

信号捕获不到的奔溃 后台奔溃

后台保活

  • Background Mode:在 app 审核时,会提高要求。通常只有地图,音乐播放器等 app 才能通过审核
  • Background Fetch:唤醒时间不稳定,且用户可以在系统设置中关闭,导致使用场景比较少
  • Silent Push:是推送的一种。可以在后台唤起 app 30秒。会调用application:didReceiveRemoteNotifiacation:fetchCompletionHandler:方法
  • PushKit:后台唤醒 App 30秒。主要用与提高 VoIP 应用的体验
  • Background Task:使用的最多,后台任务

Background Task

系统提供beginBackgroundTaskWithExpirationHandler方法来延长后台执行时间

1
2
3
4
5
- (void)applicationDidEnterBackground:(UIApplication *)application {
self.backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^( void) {
[self yourTask];
}];
}

yourTask 最多执行3分钟,3分钟内执行完毕,app 就会被挂起。3分钟内没完成,系统会强制杀掉进程。

采集信息

  • 进程信息:崩溃进程相关的信息
  • 基本信息:奔溃发生的日期,iOS版本
  • 异常信息:异常类型,异常编码,异常的线程
  • 线程回溯:奔溃时的方法调用栈

常见的异常编码:

  • 0x8badf00d:表示 App 在一定时间内无响应而被 watchdog 杀掉的情况。
  • 0xdeadfa11:表示被用户强制退出。
  • 0xc00010ff:表示 App 因为运行造成设备温度太高而被杀掉。
CATALOG
  1. 1. 造成奔溃的原因
  2. 2. 信号可捕获的奔溃日志
  3. 3. 信号捕获不到的奔溃 后台奔溃
    1. 3.1. 后台保活
      1. 3.1.1. Background Task
    2. 3.2. 采集信息