干货|一款实用iOS云真机的技术架构是如何搭建的?

简介: 对移动开发者来说,无论是开发、调试、测试、还是上线前后检验效果,都离不开测试机,甚至是产品、运营和客服,也时不时需要使用真机进行产品体验、产品运营。传统渠道上,开发者只能通过采购设备满足各部门测试需求。然而随着业务的发展,这种方式的缺陷越来越凸显:稀缺机型抢手、设备数量不足、费用高企、资源利用率不高等。

目前,市场上有很多App支持iOS9、iOS10,一旦在这些低版本的机器出现兼容性问题时,想找一台手机来debug就是一件非常难的事,而且iOS系统的分辨率也越来越多,无论是自动化还是日常的兼容性,都需要有更全面的机型去做兼容性测试。

对移动开发者来说,无论是开发、调试、测试、还是上线前后检验效果,都离不开测试机,甚至是产品、运营和客服,也时不时需要使用真机进行产品体验、产品运营。传统渠道上,开发者只能通过采购设备满足各部门测试需求。然而随着业务的发展,这种方式的缺陷越来越凸显:稀缺机型抢手、设备数量不足、费用高企、资源利用率不高等。

我们在调研了业界的诸多云真机解决方案后,发现大家尤其是对iOS端支持得不好,并且收费也相对较高。历经数个版本的迭代后,友盟+推出了搭载在U-APM应用性能监控平台上的云真机服务,为移动开发者提供了灵活地测试操作界面,支持ADB调试、WEB远程调试、扫码、抓包、虚拟定位等测试功能,并提供了测试报告供开发者后续查看。尤其是在iOS支持上做的非常细致和用心。

1.png

在屏幕画面方面,友盟+云真机高端机能有15帧左右的比较流畅的高画质屏幕传输,并且是秒开、超级省流量。

在用户体验方面,一系列快捷设置如安装ipa、键盘输入、从电脑直接粘贴内容到手机、一键web调试等急速使用

在Mac主机方面,一台i5 的mac mini能支持同时接入20台手机

云真机背后的技术架构揭秘

基本和openSTF类似,mini作为provider,provider去管理手机和处理与云端服务器之间的消息,连接到云端服务器,云端服务器能够支持N个provider接入,并且自身能很容易地去做扩展,而云端服务器则负责分发消息,与做一些websocket服务的代理转发,前端则直接对接云端服务器。

2.png

云真机核心驱动

这部分基于阿里巴巴强大的技术能力完全自研,不基于WDA,也不基于开源产品,现在市面上很多iOS云真机都会基于WDA或者其他的开源自动化测试框架去做的,可是这些框架的设计初衷并不是做云真机,会引入了很多开发不需要的功能模块。我们希望云真机核心驱动部分,能尽量轻量,而且稳定。整个核心驱动部分,最主要分为屏幕捕获、模拟控制、辅助功能接口。

屏幕捕获

苦于苹果的限制,这一点是最难突破,我们也有尝试过很多方案。 例如:idevicescreenshot,帧率太低了,而且通过逆向发现iOS系统中的ScreenShorter 不接受任何宽高、图片质量、图片格式的参数,这个方法在iPhoneX之类的高分辨率的机器,截图会更慢,只有1-2帧。

而比较流行的iOS-minicap方案,这个方案虽然能非常非常高效地实时获取到屏幕内容,但这个方案最大的缺点就是1个mac只能提供到1台iPhone的实时屏幕流,成本实在太高,我们也有尝试过破解Mac中CoreMediaIO。

framework的iOSScreenCapture协议 (iOS-minicap就是调用了系统提供的iPhone录屏接口,由AVFoundation与CoreMediaIO提供的),我们还有尝试过把整个Mac虚拟化去做隔离,让同一个物理机使用多个iOS-minicap,但这些种种方案,最终都以失败告终。

最终方案是,在XCUITest中是使用私有API去截图,这个私有API能最高能达到15帧左右,基本能满足我们的需求了,再把每一帧编码成视频流,从而节省流量。 可以感受一下jpg截图与视频流的流量大小对比:

以XS Max为例,每一帧都平均在90K左右,每一帧的数据传输截图:

3.png

与图片对比,肉眼可见的同等画质下的,当编码成视频流后,一样的机型,用相同的操作和相同的画面去对比,视频流所需的带宽非常小。

4.png

最重要的是,视频流能节省的不仅仅是服务器出口的流量,还能减轻usbmuxd的cpu资源占用。usbmuxd 当前是单进程的,只能使用单个cpu的核心,很容易到达瓶颈,对此我们还有一个改造就是把usbmuxd改成能充分使用cpu的每一个核心,提高整个mac的硬件使用率,这部分,我们以后在单独写文章介绍。

模拟控制

相对于屏幕获取,点击事件倒是简单很多,可以参考WDA,直接使用XCUITest的私有API触发就可以。 而消息格式则是沿用回openSTF的格式,provider收到之后直接转发给XCUITest。这里的重点是使用长连接去与provider做数据交互,而不是HTTP,从而提高整个链路的响应速度。

5.png

开发者应用场景

错误排查:复现用户错误进行排查修复,测试报告涵盖错误捕获信息

网络抓包:对手机的网络行为进行监控测试,排查网络、安全相关等问题

页面调试:一键调试,操作体验可以与Chrome Devtools相媲美

虚拟定位:支持全球高精度虚拟定位,实时模拟设备地理位置验证问题

ADB远程:连接ADB,使用IDE或者命令行的方式进行Android远程调试

更多请点击链接,[点击免费使用友盟+云真机服务
](链接地址https://www.umeng.com/push?&utm_source=w_umeng_aly_pc_0608)
扫一扫加入友盟+技术社群

6.png

相关文章
|
设计模式 测试技术 iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(1)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(1)
278 0
|
设计模式 搜索推荐 iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(7)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(7)
541 1
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(7)
|
8天前
|
Android开发 Swift iOS开发
深入探索iOS与Android操作系统的架构差异及其对应用开发的影响
在当今数字化时代,移动设备已经成为我们日常生活和工作不可或缺的一部分。其中,iOS和Android作为全球最流行的两大移动操作系统,各自拥有独特的系统架构和设计理念。本文将深入探讨iOS与Android的系统架构差异,并分析这些差异如何影响应用开发者的开发策略和用户体验设计。通过对两者的比较,我们可以更好地理解它们各自的优势和局限性,从而为开发者提供有价值的见解,帮助他们在这两个平台上开发出更高效、更符合用户需求的应用。
|
2月前
|
IDE Android开发 iOS开发
深入解析Android与iOS的系统架构及开发环境差异
本文旨在探讨Android和iOS两大主流移动操作系统在系统架构、开发环境和用户体验方面的显著差异。通过对比分析,我们将揭示这两种系统在设计理念、技术实现以及市场策略上的不同路径,帮助开发者更好地理解其特点,从而做出更合适的开发决策。
164 2
|
9天前
|
安全 Android开发 iOS开发
深入探讨Android与iOS的系统架构差异
本文旨在通过对比分析Android和iOS两大移动操作系统的系统架构,揭示它们在设计理念、安全性、应用生态及开发环境等方面的显著差异。我们将从底层架构出发,逐步剖析至用户界面层面,为开发者和科技爱好者提供一份详尽的技术参考。
19 1
|
17天前
|
安全 搜索推荐 Android开发
深入探索Android与iOS的系统架构差异
【10月更文挑战第29天】 在当今的智能手机市场中,Android和iOS无疑是两大主流操作系统。本文旨在深入探讨这两个系统的架构差异,从底层的操作系统设计到用户界面的呈现,以及它们如何影响了开发者和用户的体验。通过对比分析,我们可以更清晰地理解这两种平台的优势与局限,为开发者在选择开发平台时提供有价值的参考,同时也为用户选择设备提供一定的指导。
38 2
|
1月前
|
安全 Android开发 iOS开发
深入解析:安卓与iOS的系统架构及其对应用开发的影响
本文旨在探讨安卓与iOS两大主流操作系统的架构差异,并分析这些差异如何影响应用开发的策略和实践。通过对比两者的设计哲学、安全机制、开发环境及性能优化等方面,本文揭示了各自的特点和优势,为开发者在选择平台和制定开发计划时提供参考依据。
53 4
|
2月前
|
监控 Android开发 iOS开发
深入探索安卓与iOS的系统架构差异:理解两大移动平台的技术根基在移动技术日新月异的今天,安卓和iOS作为市场上最为流行的两个操作系统,各自拥有独特的技术特性和庞大的用户基础。本文将深入探讨这两个平台的系统架构差异,揭示它们如何支撑起各自的生态系统,并影响着全球数亿用户的使用体验。
本文通过对比分析安卓和iOS的系统架构,揭示了这两个平台在设计理念、安全性、用户体验和技术生态上的根本区别。不同于常规的技术综述,本文以深入浅出的方式,带领读者理解这些差异是如何影响应用开发、用户选择和市场趋势的。通过梳理历史脉络和未来展望,本文旨在为开发者、用户以及行业分析师提供有价值的见解,帮助大家更好地把握移动技术发展的脉络。
93 6
|
2月前
|
搜索推荐 Linux Android开发
深入解析安卓与iOS系统架构设计差异
本文旨在探讨Android和iOS两大主流操作系统在架构设计上的根本差异。通过分析两种系统的设计理念、核心组件以及实际应用表现,揭示它们如何反映不同的开发哲学和用户体验策略。我们将从系统层级结构、内存管理机制、用户界面设计三个方面入手,逐一对比Android的开放性和灵活性如何与其对手iOS的封闭性和一致性相互辉映。
|
设计模式 API iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(3)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(3)
453 0
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(3)
下一篇
无影云桌面