移动端性能监控探索:iOS RUM SDK 技术架构与实践

本文涉及的产品
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
简介: 阿里云 RUM SDK 作为一款性能体验监控采集工具,可以作为辅助 App 运维的强有力助手,提升您的问题排查效率。

作者:元泊


前言


作为移动端的研发同学,你是否也曾陷入这样的困境:用户在应用商店留下了一星差评,抱怨“App 用起来很卡”或者“支付时闪退了”,但无论你在测试环境如何操作,都无法复现问题?面对着从海量日志中捞出的、可能毫无关联的信息,以及一个孤立的、缺少上下文的崩溃堆栈,排查问题就像在浓雾中“盲人摸象”,耗费了数天时间,最终却只能提交一个基于猜测的修复。

为了提升这种低效的排查模式,我们进行了 iOS 数据采集与关联方向的探索,并进行了产品化的实践。它可以站在每一位真实用户的视角,把应用的性能指标、错误日志和用户行为等数据串联起来,提升您的问题排查效率。


iOS 数据采集简介


为了能够把应用性能指标、错误日志、用户行为等串联起来,SDK 需要具备体系化的数据采集与分析能力。SDK 的核心数据采集能力覆盖以下几个方面:


  • 用户会话轨迹:SDK 会记录用户的完整的操作轨迹,并与相关的事件进行关联。当问题发生时,通过会话轨迹可以回溯用户的操作路径、API 调用和资源加载情况。
  • 性能指标:对影响用户体验的关键链路进行监控测量,包括:应用启动耗时、页面加载耗时、网络请求耗时、网络请求成功率、页面卡顿率等。
  • 异常与稳定性监控:能够自动捕获应用触发的各类异常,包含:Mach 内核异常,Objective-C 异常,Swift 异常,C/C++ 异常等。
  • 自定义数据上报:除了标准的性能和异常数据外,还支持业务根据自身需求上报自定义事件与日志,将用户行为与业务指标相结合,赋能更深层次的产品分析与角色。

数据采集架构和实现


为了有效应对以上挑战,SDK 通过一个轻量化、模块化的架构,对应用的不同阶段进行 hook 和监听,以实现应用性能和稳定性的监控。

1760943544570_D7CC386D-60F5-4e25-97FC-3CD256F5FF2A.png

  • 公共接口层:提供对外公开的 API,用户通过 API 与 SDK 进行交互。
  • SDK 管理层:管理 SDK 的各个模块,SDK 的启停等。
  • 数据采集等:管理各个数据采集模块,实现数据采集细节,各个数据模块实现隔离。
  • 基础核心层:支撑整个 SDK 的运行,提供时间同步,数据处理,配置管理等能力。

在基础核心层,SDK 为了统一各个端的实现,以及性能的考虑,使用 C 实现了独立的跨平台数据处理和跨平台配置管理模块,使多端保持一致的数据持久化、数据发送、数据序列化、配置拉取和管理等逻辑。

在数据采集层,为了高效、精准、无侵入地采集各类事件,SDK 基于 Method Swizzling 技术和 iOS 系统平台特性与框架能力,构建了多样化的采集方案。并针对不同的场景和数据类型,分别采用合适的技术手段,主要包含:


  • 基于 Method Swizzling 的网络等数据采集。
  • 基于系统特性与框架能力的数据采集。
  • 崩溃异常数据的采集。


基于 Method Swizzling 的数据采集

iOS 开发的主要语言是 Objective-C 和 Swift,提到 Method Swizzling 技术离不开 iOS 的 ObjC 运行时。ObjC 是一门动态语言,在运行时间会对变量的数据类型检查,同时根据函数名查找要调用的函数。这种特性使得 ObjC 变得比较灵活,SDK 可以在程序运行时动态修改一个方法的实现,从而达到数据采集和埋点插桩的目的。

Method Swizzling 被称为动态方法交换技术,用于改变一个已经存在的 selector 实现。基于此技术,SDK 可以在程序运行时,通过改变 selector 所在 Class 的 method list 的映射,从而改变方法的调用,本质上是交换两个方法的 IMP。

1760943621883_EA42F710-FBD1-41d2-AC3A-D8865CE32559.png

通过以上方式,SDK 支持:


  • 网络请求数据采集:支持性能数据,状态码,错误原因,端到端链路打通等数据的采集。通过 Method Swizzling,SDK 对实现了对 URLSession 和 URLConnection 等网络库的无侵入数据采集。
  • 页面数据采集:支持页面加载耗时,页面状态变化等数据的采集。
  • Action 数据采集:支持 UITableView、UITableView 等控件的点击事件采集。
  • WebView 数据采集:结合 web 探针,支持了应用内置 H5 页面数据的采集,包含:网络资源请求,页面和路由切换,js 异常等。


基于系统特性与框架能力的数据采集

除了 Method Swizzling 之外,SDK 还利用系统特性和框架的标准 API 来采集应用在运行时的关键事件。


如上图所示,是 iOS 应用从启动到终止过程(包含前后台切换),系统通过事件通知中心对外暴露的事件状态变化。SDK 通过注册这些事件完成应用状态事件的采集。


为了准确采集应用的状态变化,SDK 按照不同的场景,分别对不同的事件进行处理:


  • 应用进入到前台事件:SDK 会对 willEnterForeground 和 didBecomeActive 事件处理。
  • 应用进入到后台事件:SDK 会对 willResignActive 和 didEnterBackground 事件处理。

为了统一的监控这些事件,SDK 提供了 AppLifeCycle 类对这些事件进行管理,简化事件处理的同时也能保证调用时序。除此之外,SDK 还对 RunLoop 进行了监听,通过检查 RunLoop 运行状态,实现卡顿监控事件的采集等。

通过以上方式,SDK 支持:


  • 应用启动耗时采集:支持应用冷启动、热启动耗时指标采集。
  • 卡顿事件采集:支持卡顿事件的采集,同时支持耗时堆栈的提取。
  • 网络状态的采集:支持网络类型的采集。


崩溃异常数据的采集

SDK 崩溃数据的采集能力基于业界知名的 KSCrash 框架开发。KSCRash 是一款强大的 iOS 崩溃报告库,其核心优点是“崩溃安全”,确保处理过程自身稳定可靠。它能全面捕获 Mach、C++、OC 等多种致命错误,生成包含所有线程堆栈和丰富上下文的详尽报告,极大提升开发者定位问题的效率。KSCrash 的工作流程主要分为下面五个部分:


  • 核心功能模块:协调各个模块工作,实现异常捕获的核心逻辑。
  • 监控系统:管理和协调各类异常监视器,全面捕获不同类型的异常。
  • 报告系统:生成详细的崩溃报告,进行本地存储和数据过滤。
  • 配置系统:按需配置框架的行为。
  • 安装系统:处理框架的安装流程,崩溃报告的发送工作。

1760943667080_16546AE0-3249-4768-B99C-6A401E617D17.png

基于 KSCrash,SDK 支持:


  • Mach、C++、OC、Signal 等类型的崩溃捕获。
  • 基于 KSCrash 的堆栈捕获能力,支持卡顿耗时堆栈的读取。


结语


阿里云 RUM SDK 作为一款性能体验监控采集工具,可以作为辅助 App 运维的强有力助手,提升您的问题排查效率。您可以参考接入文档https://help.aliyun.com/zh/arms/user-experience-monitoring/monitor-ios-apps体验接入 iOS SDK。相关问题可以加入“RUM 用户体验监控支持群”(钉钉群号: 67370002064)进行咨询。

您也可以参考以下文档体验接入 Android、Harmony SDK:

Android:https://help.aliyun.com/zh/arms/user-experience-monitoring/monitor-android-apps

HarmonyOS:https://help.aliyun.com/zh/arms/user-experience-monitoring/monitor-harmonyos-apps


点击此处,查看接入文档。

相关实践学习
通过轻量消息队列(原MNS)主题HTTP订阅+ARMS实现自定义数据多渠道告警
本场景将自定义告警信息同时分发至多个通知渠道的需求,例如短信、电子邮件及钉钉群组等。通过采用轻量消息队列(原 MNS)的主题模型的HTTP订阅方式,并结合应用实时监控服务提供的自定义集成能力,使得您能够以简便的配置方式实现上述多渠道同步通知的功能。
相关文章
|
2月前
|
存储 运维 分布式计算
零售数据湖的进化之路:滔搏从Lambda架构到阿里云Flink+Paimon统一架构的实战实践
在数字化浪潮席卷全球的今天,传统零售企业面临着前所未有的技术挑战和转型压力。本文整理自 Flink Forward Asia 2025 城市巡回上海站,滔搏技术负责人分享了滔搏从传统 Lambda 架构向阿里云实时计算 Flink 版+Paimon 统一架构转型的完整实战历程。这不仅是一次技术架构的重大升级,更是中国零售企业拥抱实时数据湖仓一体化的典型案例。
195 0
|
3月前
|
数据采集 运维 数据可视化
AR 运维系统与 MES、EMA、IoT 系统的融合架构与实践
AR运维系统融合IoT、EMA、MES数据,构建“感知-分析-决策-执行”闭环。通过AR终端实现设备数据可视化,实时呈现温度、工单等信息,提升运维效率与生产可靠性。(238字)
|
3月前
|
数据采集 存储 运维
MyEMS:技术架构深度剖析与用户实践支持体系
MyEMS 是一款开源能源管理系统,采用分层架构设计,涵盖数据采集、传输、处理与应用全流程,支持多协议设备接入与多样化能源场景。系统具备高扩展性与易用性,结合完善的文档、社区、培训与定制服务,助力不同技术背景用户高效实现能源数字化管理,降低使用门槛与运维成本,广泛适用于工业、商业及公共机构等场景。
150 0
|
2月前
|
存储 SQL 消息中间件
从 ClickHouse 到 StarRocks 存算分离: 携程 UBT 架构升级实践
查询性能实现从秒级到毫秒级的跨越式提升
|
3月前
|
数据采集 监控 JavaScript
移动端性能监控探索:鸿蒙 NEXT 探针架构与技术实现
阿里云 ARMS 团队倾力打造的鸿蒙 NEXT SDK,为鸿蒙应用提供了业界领先的全链路监控解决方案。这不仅仅是一个 SDK,更是您洞察用户体验、优化应用性能的智能伙伴。
585 29
|
3月前
|
消息中间件 缓存 监控
中间件架构设计与实践:构建高性能分布式系统的核心基石
摘要 本文系统探讨了中间件技术及其在分布式系统中的核心价值。作者首先定义了中间件作为连接系统组件的"神经网络",强调其在数据传输、系统稳定性和扩展性中的关键作用。随后详细分类了中间件体系,包括通信中间件(如RabbitMQ/Kafka)、数据中间件(如Redis/MyCAT)等类型。文章重点剖析了消息中间件的实现机制,通过Spring Boot代码示例展示了消息生产者的完整实现,涵盖消息ID生成、持久化、批量发送及重试机制等关键技术点。最后,作者指出中间件架构设计对系统性能的决定性影响,
|
3月前
|
前端开发 Java 开发者
MVC 架构模式技术详解与实践
本文档旨在全面解析软件工程中经典且至关重要的 MVC(Model-View-Controller) 架构模式。内容将深入探讨 MVC 的核心思想、三大组件的职责与交互关系、其优势与劣势,并重点分析其在现代 Web 开发中的具体实现,特别是以 Spring MVC 框架为例,详解其请求处理流程、核心组件及基本开发实践。通过本文档,读者将能够深刻理解 MVC 的设计哲学,并掌握基于该模式进行 Web 应用开发的能力。
550 1
|
4月前
|
存储 自然语言处理 前端开发
百亿级知识库解决方案:从零带你构建高并发RAG架构(附实践代码)
本文详解构建高效RAG系统的关键技术,涵盖基础架构、高级查询转换、智能路由、索引优化、噪声控制与端到端评估,助你打造稳定、精准的检索增强生成系统。
825 2
|
边缘计算 Kubernetes 物联网
Kubernetes 赋能边缘计算:架构解析、挑战突破与实践方案
在物联网和工业互联网快速发展的背景下,边缘计算凭借就近处理数据的优势,成为解决云计算延迟高、带宽成本高的关键技术。而 Kubernetes 凭借统一管理、容器化适配和强大生态扩展性,正逐步成为边缘计算的核心编排平台。本文系统解析 Kubernetes 适配边缘环境的架构分层、核心挑战与新兴解决方案,为企业落地边缘项目提供实践参考。
329 0
|
4月前
|
机器学习/深度学习 人工智能 算法

热门文章

最新文章