- 博客(15)
- 资源 (2)
- 收藏
- 关注
原创 iOS使用 Metrickit 收集崩溃日志
iOS使用 Metrickit 收集崩溃日志Metrickit 是什么MetricKit 是 苹果在 iOS13系统开始引入的用来汇总和分析有关异常和崩溃诊断以及电源和性能指标的每个设备的报告。为什么要用 MetricKit 收集崩溃日志当前市面上的开源框架,如 KSCrash,PLCrashReport 等框架都有一些崩溃不能抓取;比如PLCrashReport 不能抓取栈溢出的崩溃,不能抓取SIGKILL, SIGQUIT等信号量的崩溃。KSCrash 对SIGKILL的崩溃抓取也只能抓取一部
2022-04-16 17:29:58
3489
原创 iOS SIGKILL初探
特别提示本文是苹果关于SIGKILL文献的的简单翻译和简单处理,不代表本人观点什么是 CRASH (SIGKILL)当崩溃日志中有 SIGKILL 或者EXC_CRASH (SIGKILL) 时,表示操作系统从上层杀死了我们的进程。通常来说,崩溃日志里面通常都会包含有具体的原因以及一个表示该原因的错误代码。如下,这个崩溃的错误代码就是0xdead10ccException Type: EXC_CRASH (SIGKILL)Exception Codes: 0x00000000000000
2022-04-02 21:27:59
986
原创 iOS15之后苹果崩溃日志解析方法
iOS15之后苹果崩溃日志解析方法背景iOS 15之后,iPhone 崩溃日志崩溃之后,崩溃日志的组织格式有变化了,不再是之前的行式表示,而是JSON格式记录。示例如下。获取解析脚本苹果在Xcode13的工具里提供了新的脚本,解析iOS15之后的崩溃日志,脚本名字为CrashSymbolicator.py,可以在目录/Applications/Xcode.app/Contents/SharedFrameworks/CoreSymbolicationDT.framework/Versions/A/Re
2021-10-29 16:40:07
4685
原创 iOS崩溃解析&原理
1. 为什么崩溃日志需要解析如图所示是崩溃日志线程回溯信息,其中的调用堆栈都是二进制地址,而不是可读的函数名称因此需要对崩溃日志进行解析,解析成可以理解的函数调用堆栈。2.生成dSYM符号文件crashlog 解析需要调试符号表文件 dSYM(debugging symbols), dSYM 文件实际上是从Mach-O 文件抽取调试信息得到的文件目录。在编译工程时, debug 模式会默认选中生成dSYM文件, 该配置可在 Build Setting|Build Option 中更改。 dSYM文件
2021-03-09 19:51:09
796
原创 iOS崩溃日志分析入门
iOS崩溃日志分析入门怎么获取崩溃日志见获取日志的N+1中方式常见crash格式通常来说,iOS崩溃之后从系统导出的崩溃文件一般是以ips为后缀的,其实就是正常的文字格式,后缀是可以随意改的Crash的基本信息Incident Identifier: crashlog 文件唯一标识符,类似于苹果设备的 udid。Hardware Model: 标识硬件设备类型,如果有许多崩溃日志该字段相同,那么有可能是某种特定机型的问题Process: 发生崩溃的进程名称和对应的 processID。P
2021-03-04 15:49:07
1343
1
原创 Xcode 多条件xcconfig文件配置指南
什么是xcconfig文件简单来说,xcconfig是苹果在xcode文件中用来使同一套代码能够在不同的条件下编译,运行的一个配置文件怎么生成和配置一个配置文件1.在工程中添加一个新文件,如图所示,选中配置文件模板,并且命名2.在工程配置中配置刚刚添加的文件,你可以配置1-n个环境的xcconfig文件3.现在你可以愉快的使用各种配置开发了xcconfig文件语法介绍xcconfig的语法比较简单,就是简单的键值配对语法,如下BUILD_SETTING_NAME =
2021-01-31 22:49:05
730
原创 信号量崩溃原因初探
信号量崩溃原因初探1.SIGSEGV1.什么是段错误(segmentation fault)wiki上的是这么说的A segmentation fault (often shortened to SIGSEGV) is a particular error condition that can occur during the operation of computer software. A segmentation fault occurs when a program attempts to
2021-01-24 23:01:43
3350
2
原创 iOS 代码瘦身(一):静态扫描无用的类
为什么要优化安装包的体积下载时耗费多余的流量,占用更大的手机内存空间超过一定限制会被禁止安装4G网络不支持下载超过200MB的APP !(最初Apple要求的是150M)静态扫描的原理在iOS编译的产物 Mach-o文件中 __DATA __objc_classrefs 段记录了引用类的地址,__DATA __objc_classlist段记录了所有类的地址,取差集可以得到未使用的类的地址,然后进行符号化,就可以得到未被引用的类信息。 (PS:静态类获取的类会有误差,需要人工确认才可删除!)
2021-01-16 21:18:15
992
原创 swift 内存管理之类的引用计数
swift使用自动引用计数(ARC)来管理内存默认情况下swift的类初始化的时候,引用计数默认就设置为1;我们可以使用函数public func CFGetRetainCount(_ cf: CFTypeRef!) -> CFIndex来打印类的实例对象的引用计数,但需要注意的是,使用CFGetRetainCount的时候会把要打印对象的引用计数先加1,也就是说,打印出来的引用计数会多1;见如下代码class JFTest{ var age:Int? var name:Strin
2021-01-09 22:16:14
544
原创 Mac下nm命令详解
简介从Xcode8开始,苹果在mac上nm工具使用的就是llvm-nm工具(llvm-nm工具用来列出llvm字节码文件,目标文件以及归档文件中的目标中的符号名称)。对大部分nm工具的命令选项来说,他们都有相同的可选项;但-f,-s和-L这几个选项差别较大。本文主要介绍了nm工具的各种常使用的选项的含义。nm主要用于展示符号文件中的各种符号的名称列表。某些情况下,如果一个文件使用了strip功能也就是-T剖离了符号,这种情况下,使用nm和dyld结果会不太一样,这种情况需要使用dyldinfo来查看文件
2020-12-19 22:05:02
1176
1
原创 iOS上获取崩溃日志的N+1种方法
# iOS上获取崩溃日志的N+1种方法正常情况下,程序崩溃之后都会有崩溃日志保存在我们的手机里面,当崩溃的时候,我们可以通过如下几种方式找到我们的崩溃日志。方法一:从本机隐私设置里面的里面导出来 当本机发生崩溃的时候,你可以从系统设置->隐私->分析与改进里面找到你当时的崩溃日志,通常,你的崩溃日志格式包含程序包名,时间以及后缀ips或者beta.点击进去,右上角点击分享可以各种方式分享出去方法二:使用Xcode导出崩溃日志1.电脑连...
2020-12-12 16:35:27
1530
原创 Swift中如何安全的创建一个单例
Talk is cheap. Show me the code.class TestShareInstance{ var age:Int static let shareInstane:TestShareInstance = TestShareInstance(age: 3); private init(age:Int){ self.age = age; };}说说原理1. swift在类中,类变量是能够保证线程安全,swift底层,...
2020-12-12 10:44:07
544
1
原创 为什么我找不到我的崩溃日志
为什么我找不到我的崩溃日志? 当我正在努力工作(划水)的时候,总有同事上来就滴我一下:同学,我打开首页的时候崩溃了,你帮我看下为什么手机上没有崩溃日志了?这时,我总想来一句WTF?当然,说归说,闹归闹,该说的我还是得说,对于找不到崩溃日志的情形,且听我慢慢道来怎么拿到我的崩溃日志?通常情况下,我们能够在系统设置->隐私->分析->分析与数据(各个iOS系统会有名称差异)里面找到与我们APP二进制文件名字匹配的,如下图所示当微信发生崩溃的时候,其对应的崩溃日志文件名称如...
2020-12-06 22:19:05
780
原创 iOS上栈溢出崩溃详解
简介 本文介绍了如下内容 1.栈的概念 2.为什么会发生栈溢出 3.栈溢出的几种栗子 4.怎么预防和发现栈溢出。1 什么是栈?1. 从数据结构来说:栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。2...
2020-12-06 22:16:36
845
转载 iOS程序main函数之前发生了什么
文章转载自 http://blog.sunnyxx.com/2014/08/30/objc-pre-main/,侵权必删除前言一个iOS app的main()函数位于main.m中,这是我们熟知的程序入口。但对objc了解更多之后发现,程序在进入我们的main函数前已经执行了很多代码,比如熟知的+ load方法等。本文将跟随程序执行顺序,刨根问底,从dyld到runtime,看看m
2018-01-15 12:02:23
215
Objective-c NSTask的使用示例
2014-08-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人