iOS获取.ips文件并通过Xcode自带的symbolicatecrash解析

news/2024/11/19 11:39:16/文章来源:https://www.cnblogs.com/jersycoder/p/18198072

文章讲述如下问题:

1. 如何获取.ips文件

2.如何获取symbolicatecrash

3.解析前的准备工作

4.如何将.ips转为.crash文件

5.如何使用symbolicatecrash解析.crash文件

6.异常错误处理


1.如何获取.ips文件?

在 iOS 中,你可以通过几种方式找到应用程序的 .ips 文件,具体取决于你是在开发过程中还是从用户设备上获取崩溃日志。

在开发过程中

  1. 在 Xcode 中查看:如果你在 Xcode 中运行应用程序时发生崩溃,可以在 Xcode 的导航器中查看和导出崩溃日志。在 Navigator 面板中展开 "Devices and Simulators",选择连接的设备,点击“Open Recent Logs”,此时会进入 "Device Logs" ,找到项目相关的崩溃日志。

  2. 在设备的 Console App 中查看:在 macOS 的 Console 应用程序中,你可以连接设备并查看设备的系统日志,包括应用程序的崩溃日志。

从用户设备上获取

  1. 使用设备的崩溃日志:如果用户在应用程序崩溃时选择了“发送报告”或“不发送”选项,你可能会收到一个带有 .ips 扩展的崩溃日志文件。用户通常可以通过设备设置中的“隐私”->“分析与改进”->“分析数据”找到,一般app的崩溃日志名为“项目名xxx-发生时间.ips

  2. 从 iTunes 或 Finder 备份中提取:如果用户同步设备或使用 iCloud 进行备份,你可能会在 iTunes 或 Finder 备份中找到崩溃日志文件。

找到日志文件后,在电脑上新建文件夹以存放.ips崩溃日志(为理解后续操作,假设此文件夹名称为“A”)

 

2.如何获取symbolicatecrash?

 1).打开终端,输入如下指令

find /Applications/Xcode.app -name symbolicatecrash -type f

终端会输出symbolicatecrash所在路径,如图所示

 2). 复制地址进入到Resources文件夹下

cd /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources

3).打开文件夹,然后找到并找到symbolicatecrash

open .

效果和终端指令如下图所示:

 4).将symbolicatecrash复制到步骤1新建的A文件夹下(注:为了方便操作,最好将symbolicatecrash放到新文件夹下,后续在此文件夹还会放入.ips文件和dsyms中的xxx.app.dSYM

 

3.解析前的准备工作

步骤1和2新建的文件夹A,目前已存放了.ips崩溃日志和symbolicatecrash。需要解析日志,还需要重要的dSYM,也就是符号表。

那么如何获取“项目名xxx.app.dSYM”呢?

废话不多说,直接上干货~

打开Xcode,导航栏选择“Window” -> “Organizer”,在“Archives”中找到崩溃的app版本,鼠标右击,选择“Show in Finder”,选择"xxx.xcarchive",鼠标右击,选择“显示包内容”,打开“dSYMS”,找到"项目名xxx.app.dSYM"文件,复制此文件至步骤1新建的文件夹A。

/////////////////////////////到此所有准备工作已完成!/////////////////////////////

 

4.如何将.ips转为.crash文件

因为苹果在Xcode13.3已经废弃了.crash文件,而symbolicatecrash只能解析.crash,所以需要利用"AppleCrashScripts"将.ips转换为.crash。

1). 下载AppleCrashScripts; https://github.com/tomieq/AppleCrashScripts

2). 进入下载的AppleCrashScripts-master文件夹,执行如下代码

进入文件夹  cd AppleCrashScripts-master 
swift convertFromJSON.swift -i xxx.ips -o xxx.crash

注:xxx.ips为步骤1获取的.ips文件,xxx.crash为你转换后的.crash文件

 

5.如何使用symbolicatecrash解析.crash文件

通过终端进入到新建的文件夹A目录下,执行如下代码

./symbolicatecrash /xxx/xxx.crash /xxx.app.dSYM > crash.log

代码解释: 

"/xxx/xxx.crash"为步骤4转换后的.crash文件的绝对路径
"/xxx.app.dSYM" 为步骤3获取的符号表文件路径
"crash.log"为解析后的崩溃日志名(文件名和后缀可以自定义.log,.txt都行)

此时如果没有报错的话,crash.log就可以看到带崩溃的具体函数和崩溃在哪一行了
如果报错请继续往下看

6.异常错误处理
错误1:
Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.

解决方案:

export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"

再次执行:

./symbolicatecrash /xxx/xxx.crash /xxx.app.dSYM > crash.log
错误2:
No crash report version in /xxx.crash at ./symbolicatecrash line 1365.

 

这是因为直接用symbolicatecrash解析.ips文件,而非使用转换后的.crash文件解析导致。针对此问题请执行步骤4
 

好记性不如烂笔头,网上也有很多类似的资料可以借鉴。
本人也是借鉴了很多博主的资料,然后结合自己实际尽可能详细的解释每行代码的作用,如有不解或者疑问,请留言~
到此文章已结束,特别感谢这两位博主提供的参考文章,链接如下:
https://www.cnblogs.com/china-fanny/p/7610487.html
https://cloud.tencent.com/developer/article/2345755

另外:书写不易,如果本文解决了您的问题,还望不要吝啬star鼓励一下~
感谢您的阅读!!!
谢谢!!!
🙏🙏🙏


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/707828.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用达梦客户端工具对存储过程调试

找到存储过程,右键》调试》在新的调试编辑器调试打开界面如下:下面有个初始变量,输入所需要的参数 也可以直接在存储过程写入参数P_DEMO(1001)这种参数输入好之后,点右上角绿色三角箭头开始调试选择下面的进入按钮对存储过程内部进行调试进入之后,界面如下,这样就可以选择…

AD导入DXF画板框结构

一、安装导入DXF插件 1. 确定当前软件是否支持导入DXF a. 在PCB编辑窗口下,依次选择 file > import…b. 在import file窗口下查看文件后缀名下拉菜单是否有DXF,我这里是有的。如果没有需要下载DXF插件; 二、导入DXF结构文件至此DXF文件已成功导入PCB。三、根据DXF画板框 …

Activiti 7 BPMN文件中的assignee 失效

问题描述 最近正在学习springboot 集成 activiti7,看网上好多帖子都推荐的流程设计器是Camunda Modeler,所以也下载了一个,并且流程部署、启动、完成等步骤都正常。 可当我准备开始指派任务时,却发现数据表act_ru_task中的ASSIGNEE_字段始终为空。解决方案 本质:activiti …

.net Swagger

一、swagger使用 1.打开Nuget,搜索安装Swashbuckle.AspNetCore。 2.生成api文档 3.Program.cs 添加如下代码 FreightForwarderApi.xml 替换成你的。var basePath = AppContext.BaseDirectory;builder.Services.AddSwaggerGen(c => {c.SwaggerDoc("v1", new Open…

基于java处理一些有规律的字符串

根据相同的符号进行分割的字符串转为list数组String reviewerOaGroup = "张三,李四,王五";//使用三元运算符如果reviewerOaGroup包含某个字符则根据该字符进行分割然后把每一项放入list中,如果不含有该字符则直接把该字符串放入listList<String> reviewerOaGr…

VSCode添加自定义的Vue3.2标准模板

详细步骤参考:VSCode添加自定义的Vue3.2标准模板VueJs.json 在Vscode 中的模版{"生成vue模版" :{"prefix": "vue","body": ["vm = new Vue({"," el: #,"," /* 数据对象:数据赋值声明 */","…

SpringCloud解决feign调用token丢失问题

背景讨论 feign请求 在微服务环境中,完成一个http请求,经常需要调用其他好几个服务才可以完成其功能,这种情况非常普遍,无法避免。那么就需要服务之间的通过feignClient发起请求,获取需要的 资源。 认证和鉴权 一般而言,微服务项目部署环境中,各个微服务都是运行在内网环…

揭秘Linux find命令:高效查找文件的终极指南,让你秒变文件搜索达人!

Linux中find命令的详细使用指南:高效查找文件的秘诀Linux中find命令的详细使用指南:高效查找文件的秘诀 在Linux系统中,find命令是一个强大的工具,它允许你在文件系统中搜索特定的文件或目录。无论你是系统管理员还是普通用户,掌握find命令都能极大地提升你在Linux环境下的…

PVE导入VMware虚拟机

1、在VMware中导出需要迁移的虚拟机,导出为 OVF 2、将导出的虚拟机上传到PVE中,共三个文件 3、命令导入到PVE虚拟机中,等待导入完成qm importovf 103 Ubuntu Server 20.04.ovf disk1 --format qcow2 #103为新建的虚拟机id,不要和现有的重复,disk1为PVE中的磁盘路…

我开源了一款高颜值云端一体的项目。欢迎体验!!!

项目介绍 旅拍路书:旅行爱好者的专属记录伙伴,基于uniCloud + vue3的全栈项目,包括用户登录,更新个人信息,富文本编辑,分类管理以及AI助手等功能的高颜值项目。 预览 h5端扫码预览: 小程序扫码预览: 微信小程序提交审核未通过(你的小程序涉及用户自行生成内容(文字、…

如何快速找出文件夹里的全部带有符号纯符号的文件

参考之前发的文章:《如何快速找出文件夹里的全部带有中文&纯中文的文件》 只需要根据自己的需求,把下面相关的设置调整好即可

PVE学生自用记录

PVE记录 这篇博客主要记录自己大二阶段配置和使用PVE的过程。 什么是PVE 说到PVE,大家可能会想到Playsers Vs Environment,但是这里肯定不是指的游戏中的模式了,而是一个操作系统。它的全称为:Proxmox VE,是一个运行虚拟机和容器的平台。基于 Debian Linux 完全开源。最大…