该文章摘自笔者撰写的一本 iOS 技术书籍iOS 监控编程。
这是一本介绍 iOS 监控编程的书籍,内容涉及日志监控,监控崩溃,监控网络,监控卡顿,监控硬件,内存泄漏监控等方面。所有的功能都是通过自行编程实现,而不是通过使用第三方工具。每个章节记录了功能的实现细节,以及笔者一路探索过来的心路历程。当然,笔者后续依旧会寻求与探索新的监控方向,一旦有所得都会更新到本书的章节中。
这本书是笔者的开源工具GodEye的产出物, GodEye 能全自动,零代码入侵,一行代码接入来监控应用的日志,卡顿,崩溃,网络,内存泄漏, CPU 以及内存使用率,帧率等信息。
什么是GodEye?这个问题可以让 GodEye 自己告诉我们。
打开 GodEye 后,我们可以看到第一个 tab 页有一个 Terminal 的入口,这个功能是用来输入接入方自己预置的指令的,当然 GodEye 有一个默认的指令help
可以输出一小段 GodEye 的自我介绍以及接入方自己已经预置的指令列表:
由于在我们截图的 demo 里并没有配置预置指令,因此这里的 Commands 没有输出任何一个指令,当然这不是重点,重点是 GodEye 的自我介绍,我们可以看到这样一句话:
Automaticly disply Log,Crash,Network,ANR,Leak,CPU,RAM,FPS,NetFlow,Folder and etc with one line of code. Just like God opened his eyes
翻译过来就是 GodEye 是一个可以通过一行代码来自动展示日志,崩溃,网络,卡顿,内存泄漏以及 CPU , RAM,FPS,网络流量,文件目录等硬件信息的工具,就像上帝睁开了他的眼睛。
在任何界面下三个手指上滑,或者点击 GodEye 的 AssistiveButton 即可
功能丰富,一行代码接入,零代码入侵
线上包可完全不打入代码
GodEye 目前可以通过 CocoaPods 来安装,只需要将下面的代码加入到你的 Podfile 中即可:
pod 'GodEye'
然后,在我们的application:didFinishLaunchingWithOptions
方法中通过一行代码即可接入:
GodEye.makeEye(with: self.window!)
当然,一行代码接入是一种默认配置的接入,读者也可以通过传入自己的Configuration
来精细化配置各个细节,这里就不展开说了,感兴趣的可以看一下 Configuration 注释就好。
上一节我们简单的介绍了下 GodEye ,可见 GodEye 提供的功能很多,这一节我们以 GodEye 的界面为基础,简单介绍下 GodEye 能提供给我们什么样的功能
打开 GodEye 后我们可以看到第一个 Tab 页的名字是 Console ,是的,这个 tab 下都是一些输出的控制台,和一个 Terminal 的输入控制台:
###Log 第一个子模块就是 Log ,也就是日志,点击进入后可以看到如下日志列表:
Log 模块可以自动记录 ASL ( Apple System Log )以及 Log4G 的日志,并按照顺序自动展示在该列表中,关于 ASL 以及 Log4G 的详细信息可以参看第一章节--日志监控
第二个子模块就是 Crash ,也就是崩溃模块,该模块可以全自动监控 App 中的Uncatched Exception
崩溃以及底层 Signal 崩溃。
由图可见,我们不但可以看到崩溃的原因,还能看到崩溃的堆栈,极大的方便了我们 debug 。当然,这些信息只能在你崩溃后重新打开才能查看哦。
###Network 第三个子模块就是 Network ,也就是网络请求和网络响应的监控,这个模块可以监控我们发出的网络请求各个字段以及对应的网络响应的各个字段。当然这些字段非常多,因此默认我们是折叠显示的:
折叠状态下,我们只能看到请求的 URL 。点击一下这个 cell ,我们就能展开这个 cell ,展开后我们可以看到各个有值的字段:
第四个子模块就是 ANR,Application Not Responsed ,也就是应用不响应,平时我们叫它--卡顿。在我们日常使用中,经常会出现卡顿的现象,卡顿很难追踪,因为其偶然性以及原因复杂性都相对比较大。卡顿监控模块可以在发生卡顿时,记录所有的堆栈,方便追踪:
当然上图只是折叠显示,折叠显示下只会展示卡顿时候的主线程堆栈,当然,一般卡顿的原因也都发生在主线程。当然,点击这个 cell 也能看到所有线程的堆栈:
第五个子模块是 Leak 模块,可以记录发生内存泄漏的对象,当出现内存泄漏的时候会将对象记录在这里。
最后一个子模块就是终端模块,用户可以自定义指令,在 App 运行的任何地方任何时候都能输入你的指令,获得你想要的数据。当然,如果你忘了你配置过哪些指令,你也可以输入help
指令,它会告诉你所有配置的指令:
第二个 tab 页是 monitor ,就是各种硬件实时指标的监控器:
在这里我们可以实时监控系统的 CPU ,自身应用的 CPU ,应用的内存使用,系统的内存使用率,帧率 FPS,应用的网络流量,系统的网络流量。后续版本迭代还会加入图表的功能,到时点击一个指标的监控数据,就可以看到历史心跳图,或者饼状图,应该会比较酷炫。
第三个 tab 是 File,在这里我们可以查看我们 App 的沙盒文件,以及.app 的内部包文件,还有就是整个手机的根目录文件:
选择一个目录后就会拉起我们的文件夹浏览器,可以查看文件夹下所有的文件以及文件夹:
##Setting 最后一个 tab 是 Setting ,当前版本可以配置我们的一些开关,后续版本迭代我们还会加入很多新的实时配置的东西,比如各种监控的阈值:
GodEye 是一个 APM ,一个帮助解决开发和调试时候步骤多,成本大,不方便的工具集合,因此 GodEye 能解决的痛点比较多,也比较散。
上一节我们谈了 GodEye 的功能,这一节我们就来说说这些功能都解决了啥痛点。
##痛点
我们平时查看日志输出的时候,必须将我们的手机连接到 Mac 电脑,用 Xcode 来查看。而 GodEye 的日志监控功能,就可以实现直接在 App 内查看,方便省时,还可以对日志做类别区分。
日常开发中 Crash 难免,谁都不能保证自己开发的 App 一个 Crash 的问题都没有。若是在我们日常写代码 Debug 的阶段 Crash 的话还好,可以直接在 Xcode 的 console 里看到堆栈;麻烦的是在测试人员测试的时候遇到的问题,如果能够复现还好,我们可以按部就班将操作日志再次展现在我们的 Xcode 控制台上,而要是难以复现的 bug ,我们就需要将测试人员的手机拿过来,然后找到对应的.dSYM
文件将一堆内存地址符号化成代码。
是不是非常复杂, GodEye 的 Crash 监控模块就能解决这个问题,我们可以直接在手机上查看 Crash 堆栈,实时方便,珍爱生命。
Charles 可以很方便的帮我们查看网络请求。如果读者对 Charles 不熟悉,可以看看巧神的<iOS 开发进阶>。当然,使用 Charles 也有不方便的时候,需要身边有一台电脑,需要设置代理。 GodEye 的网络监控模块就可以省去这个烦恼,直接在 App 内部查看网络请求和网络响应,非常方便。后续还会加入数据 mock ,以及实时修改数据等功能。
众所周知,在移动设备上开发应用,性能是每一个 developer 关心的问题。作为 developer 我们可以通过提高自身技术,提高代码质量来优化我们应用的性能。当然我们不一定能及时发现代码存在的性能问题,这时就需要有一个能够监控并及时告知我们应用中那些耗费性能导致应用卡顿的“ Bug ”。 GodEye 的卡顿监控模块就是为此而开发。
不容置疑, Instruments 的功能非常全面也非常强大, Leak 和 Allcation 模块也非常实用。但是 Instruments 我们并不是经常会去使用,而且 Instruments 也有很多不便,首先你得打开 Allocations ,然后,你得一个个场景去重复的操作,我们无法及时得知泄漏,得专门做一遍上述操作,十分繁琐。 GodEye 的内存泄漏模块可以实时反馈给你内存泄漏的对象,非常方便。
如果我们在脱离我们的 Xcode 的时候想像连着 Xcode 那样来 po 一个对象或者数据的话基本是不可能的, GodEye 提供了一个输入控制台,使用者可以自定义好对应的指令,运行的时候随时输入即可得到对应的数据,当然这些指令没有 Xcode 那么强大,但是已经够用了。
大家是否遇到过一些疑难杂症,比如应用出现一些很奇怪的现象,经过艰苦卓绝的 Debug 原来是因为内存爆了,好多 ViewController 收到了内存警告。要是我们能对我们的硬件做监控就好了,我们能实时的知道我们的 iPhone 系统的 CPU 使用率,内存的使用率,要是能知道我们自己的 app 使用了多少 CPU ,多少内存就更好了。对, GodEye 的硬件监控模块就能告诉你这些硬件信息。
我们平时做一些 I/O 操作的时候其实对我们是很不直观的,我们可能加了个文件,也可能改了个文件,我们通过代码能知道是否成功,但是我们不能亲眼看到,他就放在那里。或者我们想看一下我们的图片是否放入了我们的 bundle ,都很不方便。 GodEye 的文件模块就能很好的解决这个问题,不但能看整个沙盒的内容,还能看.app
内部的内容,当然,也能看整个手机的根目录。
##One More Thing 以上 8 个痛点,无一不是步骤多,成本大,不方便。而 GodEye 提供的功能就是为了解决这 8 个痛点。后续也会将已有的功能做的更加晚上,探索发现一些新的功能。
能看到这里,说明你也将整本书看完了,再次感谢你的耐心,希望这本书能对你有所帮助。也希望你会喜欢 GodEye 。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.