iOS matrix

技术成长之路

Posted by DM on December 16, 2019

iOS matrix

matrix介绍

Matrix 是一款微信研发并日常使用的应用性能接入框架,支持iOS, macOS和Android。 Matrix 通过接入各种性能监控方案,对性能监控项的异常数据进行采集和分析,输出相应的问题分析、定位与优化建议,从而帮助开发者开发出更高质量的应用。

maxtrix github传送门

maxtrix 码云传送门

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{
    
}