缘由
APP最近在某些时刻触发了一些特殊的操作,导致APP温度持续增高,这个问题也困扰了我们许久,正好昨天测试的妹子又成功的触发了这个操作。于是便有了这一次的探究。首先我们可以思考APP烫手的原因可能有哪些?比如CPU、内存、定位、网络、音视频、动作传感器(比如陀螺仪)、蓝牙等。当然这就需要结合我们项目具体用了这些罗列的功能中的几种。
内存
内存泄露这一部分应该说我们最好定位的问题。
1.比如利用xcode的静态分析(虽然它不太准)。
2,利用Instruments中Leaks工具没写完一个功能跑一跑代码看看会不会有手残写错的地。如何快速的定位问题
你也许会问这么多问题我得一个一个的去排查吗?有没有更简单的方式,嗯,有。 你需要用到的是:Energy Log这个功能
1,选择
2,选择连接的设备和你们项目的APP(only是我机子的名字,iosproject是我在github上看到的一个开源项目,简直TMD的特别强大) 3,将Time Profiler拖到左边来 4,点击红点进行调试,这时候你就可以看到这个画面 5,点击call tree中的Hide System Lbraries(隐藏掉系统),sperate by thread(根据线程进行分割)6,如果你看不到具体这些函数的调用,你需要去xcode -Build Settings - Debug information Format - 修改DWARF with DSYM File
7,点击weight将耗时最长的线程排列到最前边选中它(也可以观察哪一个线程还在持续增长),到H额AVIE视图StackTrace中查看这个耗时的线程在干什么,双击其中一行的方法.我们就可以看到实际项目中哪一行代码可能存在问题。
8,这样我们就可以很快的定位具体哪个模块影响了我们整个的项目。 当然如果你想对Instruments想有更多的了解,你可以去看我另外一篇分享
当然有人会问了我APP发热的时候可能手机并没有连着xcode,重新跑程序可能它就不复现了?
随时随地记录
如何做到随时随地记录我们认为可能会出现问题或者比较重要的log日志呢? CocoaLumberjack这个开源日志库是我们项目用到的管理我们重要的log日志工具。
1、支持日志打印到Xcode控制台,打印到mac的console程序、打印到文件 2、日志功能支持关闭和打开,支持Error、Warning、Info、Debug、Verbose、All日志等级
3、支持基于DDLogFormatter协议自定义日志格式和继承DDAbstractLogger和协议DDLogger自定义logger
4,结合我们项目的逻辑打包压缩日志文件上传。
这样我们可以检测哪些总是出现异常的用户他们当时在操作APP的哪些地方,又是什么触发了异常。当然这些影响我们APP的异常情况该怎么检测呢。
这个是我阅读了微信读书 iOS 质量保证及性能监控画的一个mindnode图总结了一下微信大概做了这么多事情。
Cover微信读书 iOS 质量保证及性能监控补救只是最后的无奈
1.优化I/O访问
2.缩减网络请求
3.延迟联网
4.图像、动画、视频
5.优化定位和动作(Motion)
6.优化通知
......
这些操作有时间我会再开一篇专门具体如何做的文章。