[iOS]App崩溃解析(二):如何获取.crash文件

前言

每当App发生崩溃的时候, 都会生成一份崩溃日志并存储在设备上。这个崩溃日志会记录下当前进程中的所有执行线程的堆栈, 以及崩溃原因描述, 以便于我们快速定位到发生崩溃的原因。
获取崩溃日志的方法很多, 主要得结合当下状况来看哪个方便点。

  • 获取崩溃日志的方法

一、从Xcode获取

Xcode登录开发者账号后, 打开Xcode->Window->Organizer, 打开如图界面
[图片上传中...(00293dkxzy7xBVX3jom6a.jpeg-dfc789-1585719356323-0)]


00293dkxzy7xBAAgiFn4d.jpeg

这种方式很官方, 嗯。官方提供的线上包崩溃日志的查看方法, 但是存在72小时的延迟可能, 并且需要用户配合开启"与应用开发者共享"才能获取得到。
用户开启"与应用程序开发者共享"方法如下:


00293dkxzy7xBALioV3d1.jpeg

打开"设置"->隐私->诊断与用量(以iOS8.x为例)

  • 勾选"自动发送"开关;
  • 开启"与应用程序开发者共享"开关;
    这个开关默认是关闭的, 所以通过这种很官方的途径一般很难拿到针对某个崩溃的日志。所幸的是, iOS13上针对应用崩溃, (终于)能像安卓那样弹个崩溃弹窗, 来提醒用户打开并反馈崩溃。

二、从设备控制台获取

  • 打开Xcode, 点击Window->Device(快捷键: cmd+shift+2), 然后点击如下图按钮"View Device Logs":


    00293dkxzy7xBBKbxgB31.jpeg

    这种方法适合开发者能把崩溃设备拿到手的情况, 又或者能根据用户反馈复现的情况。通过这种方法来获取到的崩溃日志, 系统方法还会自动给你"符号化"出来。

三、从手机上获取

打开"设置"->隐私->诊断与用量->诊断与用量数据;


00293dkxzy7xBVX3jom6a.jpeg

这种方法最粗暴简单, 适合所有用户操作。根据"进程名+时间"的命名格式寻找到崩溃日志, 然后通过"分享"功能导出即可。但在iOS9及以下系统中却没有分享按钮, 只能通过拷贝到别的文本里再分享来解决...

四、从第三方助手软件获取

如果是越狱手机的话, 通过使用助手软件可以直接从手机里的以下路径中找出来


00293dkxzy7xBXcuo2j1f.jpeg

控制台上打印的日志存放路径
这里以同步助手作为样例:


00293dkxzy7xBXSCHku32.jpeg
  • 进入以下路径:(iOS8.x系统)
  • iPhone上的文件>var>mobile>Library>Logs>CrashReporter
    1. 按照"进程名+日期"把崩溃日志(.ips/.beta/*.synced)筛选出来, 右键->导出;
    1. 添加后缀.crash即可;
      此方法目前在iOS 8.x、9.x完美越狱设备上有效, 而iOS10.x非完美越狱设备&非越狱则无法获取(因为根目录下还未出现var这个文件夹)

五、集成友盟、bugly等收集崩溃信息的第三方库

这些第三方库主要都是通过重写UncaughtExceptionHandler()方法来收集崩溃信息, 网上太多这方面的文章, 这里就简单带过了。

结语

其实还有一些方法比如: 旧版iTunes Connect->App分析、iTunes同步备份设备等等一些过期方法, 这里就不再展开说了。​如果上面还有没写到的方法, 欢迎大虾指出~

附:[iOS]App崩溃解析(三):匹配.crash和.dSYM

作者邮件:[email protected], 有问题联系。

你可能感兴趣的:([iOS]App崩溃解析(二):如何获取.crash文件)