跳到主要内容

MetricKit 与线上监控

问题

如何在线上监控 App 的性能和崩溃?

答案

MetricKit

iOS 13+ 提供的官方性能数据收集框架,系统自动采集,每天或及时回调:

import MetricKit

class MetricManager: NSObject, MXMetricManagerSubscriber {
func start() {
MXMetricManager.shared.add(self)
}

// 每日汇总(iOS 13+)
func didReceive(_ payloads: [MXMetricPayload]) {
for payload in payloads {
// 启动时间
let launchMetrics = payload.applicationLaunchMetrics
let avgLaunch = launchMetrics?.histogrammedTimeToFirstDraw

// 内存
let memoryMetrics = payload.memoryMetrics
let peakMemory = memoryMetrics?.peakMemoryUsage

// CPU
let cpuMetrics = payload.cpuMetrics
}
}

// 即时诊断(iOS 14+)—— 崩溃、卡出、磁盘写入异常
func didReceive(_ payloads: [MXDiagnosticPayload]) {
for payload in payloads {
// 崩溃报告
if let crashes = payload.crashDiagnostics {
for crash in crashes {
let callStack = crash.callStackTree
// 上报到服务器
}
}
// 卡顿诊断
if let hangDiagnostics = payload.hangDiagnostics {
// 主线程挂起超过一定时间
}
}
}
}

线上监控体系

维度指标工具
崩溃崩溃率、Top CrashMetricKit、Firebase Crashlytics
卡顿卡顿率、ANRMetricKit hangDiagnostics
启动TTFD(首帧耗时)MetricKit、自定义
内存OOM 率、峰值内存MetricKit、自定义
网络成功率、耗时URLSessionTaskMetrics
电量CPU Wakeup、定位MetricKit

Xcode Organizer

Xcode → Window → Organizer → Metrics/Crashes:查看 TestFlight 和 App Store 用户的聚合性能数据。


常见面试问题

Q1: 线上崩溃该怎么收集和分析?

答案

  1. 收集:MetricKit(iOS 14+)或 Firebase Crashlytics / Sentry
  2. 符号化:用 dSYM 文件将内存地址转为代码行号
  3. 分析:按崩溃类型、影响用户数排序,优先修复 Top Crash
  4. 监控:版本发布后观察崩溃率是否异常

相关链接