iOS matrix
matrix介绍
Matrix 是一款微信研发并日常使用的应用性能接入框架,支持iOS, macOS和Android。 Matrix 通过接入各种性能监控方案,对性能监控项的异常数据进行采集和分析,输出相应的问题分析、定位与优化建议,从而帮助开发者开发出更高质量的应用。
matrix内部实现
当前工具监控范围包括:崩溃、卡顿和爆内存,包含以下两款插件:
1.WCCrashBlockMonitorPlugin: 基于 KSCrash 框架开发,具有业界领先的卡顿堆栈捕获能力,同时兼备崩溃捕获能力。
2.WCMemoryStatPlugin: 一款性能优化到极致的爆内存监控工具,能够全面捕获应用爆内存时的内存分配以及调用堆栈情况。
特性
WCCrashBlockMonitorPlugin
1.接入简单,代码无侵入
2.通过检查 Runloop 运行状态判断应用是否卡顿,同时支持 iOS/macOS 平台
3.增加耗时堆栈提取,卡顿线程快照日志中附加最近时间最耗时的主线程堆栈
WCMemoryStatPlugin
1.在应用运行期间获取对象存活以及相应的堆栈信息,在检测到应用爆内存时进行上报
2.使用平衡二叉树存储存活对象,使用 Hash Table 存储堆栈,将性能优化到极致
matrix安装
1.通过 Cocoapods 安装
- 先安装 CocoaPods;
- 通过 pod repo update 更新 matrix 的 Cocoapods 版本;
- 在 Podfile 对应的 target 中,添加 pod ‘matrix-wechat’,并执行 pod install;
- 在项目中使用 Cocoapods 生成的 .xcworkspace运行工程;
- 在你的代码文件头引入头文件 #import <Matrix/Matrix.h>,就可以接入微信的性能探针工具了!
2.通过静态库安装
- 获取 Matrix 源码;
-
打开命令行,在 matrix/matrix-iOS 代码目录下执行 make 进行编译生成静态库;
编译完成后,iOS 平台的库在 matrix/matrix-iOS/build_ios 目录下,macOS 平台的库在 matrix/matrix-iOS/build_macos 目录下;
⚠️ 在make时如果遇到错误:
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
请用终端工具输入以下内容然后继续即可
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/
-
工程引入静态库:
iOS 平台:使用 matrix/matrix-iOS/build_ios 路径下的 Matrix.framework,将 Matrix.framework 以静态库的方式引入工程;
macOS 平台:使用 matrix/matrix-iOS/build_macos 路径下的 Matrix.framework,将 Matrix.framework 以静态库的方式引入工程。
- 添加头文件 #import <Matrix/Matrix.h>,就可以接入微信的性能探针工具了! ⚠️ 如果导入成功后编译发现报了很多std错误 将项目文件.m 改为.mm 即可。(注:.m是object c语言文件 .mm是object c++语言文件)
matrix使用
- 1.matrix初始化
Matrix *matrix = [Matrix sharedInstance];
MatrixBuilder *curBuilder = [[MatrixBuilder alloc] init];
curBuilder.pluginListener = self; // pluginListener 回调 plugin 的相关事件
WCCrashBlockMonitorPlugin *crashBlockPlugin = [[WCCrashBlockMonitorPlugin alloc] init];
[curBuilder addPlugin:crashBlockPlugin]; // 添加卡顿和崩溃监控
WCMemoryStatPlugin *memoryStatPlugin = [[WCMemoryStatPlugin alloc] init];
[curBuilder addPlugin:memoryStatPlugin]; // 添加内存监控功能
[matrix addMatrixBuilder:curBuilder];
// [crashBlockPlugin start]; // 开启卡顿和崩溃监控
[memoryStatPlugin start];
// 开启内存监控,注意 memoryStatPlugin 开启之后对性能损耗较大,建议按需开启
- 2.遵循MatrixPluginListenerDelegate
- (void)onInit:(id<MatrixPluginProtocol>)plugin{
}
- (void)onStart:(id<MatrixPluginProtocol>)plugin{
}
- (void)onStop:(id<MatrixPluginProtocol>)plugin{
}
- (void)onDestroy:(id<MatrixPluginProtocol>)plugin{
}
/**
* @brief The issue that has been triggered to report
* The listener has to help to report the issue to the right place
*
* @param issue The issue which be triggered to be reported
*/
-(void)onReportIssue:(MatrixIssue *)issue{
}