新工具开源!一款iOS自动化利器(附地址)

简介: tidevice 是阿里的内部的一个小组用来做 iOS 自动化用的工具,通过逆向iOS通信协议,使用纯Python实现。目前淘宝和其他部分事业部已经全面使用了该技术,进行iOS应用的性能采集,UI自动化。

tidevice 是阿里的内部的一个小组用来做 iOS 自动化用的工具,通过逆向iOS通信协议,使用纯Python实现。目前淘宝和其他部分事业部已经全面使用了该技术,进行iOS应用的性能采集,UI自动化。


注:这里的被测应用无需做任何修改,使用不再局限于Mac上。

开源地址:https://github.com/alibaba/taobao-iphone-device

tidevice可以帮你做什么呢?



  • 应用安装,启动,停止,查看
  • 启动 WDA(WebDriverAgent)(注:该操作不依赖xcodebuild,可跨平台使用)
  • 运行UITests (跨平台使用)
  • 性能采集(类似 PerfDog)
  • 截图、syslog采集 等等


熟悉libimobiledevice工具集的同学可能知道大部分上面提到的功能,为了方便日常的使用tidevice对libimobiledevice中已有的功能也重新实现了一遍(比如 截图,看日志,应用安装),这样有tidevice你就可以完成日常所有相关的操作了。

除了这些众所周知的功能,tidevice还可以完成WDA的启动,iOS设备的性能采集。

可能有人不知道WDA为何物,这里简单的介绍一下。WDA全名WebDriverAgent是facebook推出的可以实现黑盒iOS自动化的项目。该项目作为一个App运行在iOS手机上,被测应用不需要做任何的更改(比如接入sdk),进行无侵入的测试。唯一不方便的是手机必须连接上Mac电脑,并使用Mac上才有的xcodebuild才能将WDA这个App运行起来,这也导致其推广起来比较困难。

文章中会重点介绍一下tidevice 如何完成WDA的启动。原理比较简单:tidevice通过模拟xcodebuild与手机进行通信,向手机发送特定的指令,来启动WDA,从而可以脱离Mac的限制,能够在Linux、Windows上运行起来iOS自动化,而在tidevice出现之前,这些是无法做到的。

安装



因为是Python项目,一条命令即可完成安装  pip3 install -U tidevice安装完成后,先执行几个命令测试一下tidevice version  查看tidevice版本tidevice list 查看已经连接上的iPhone设备

常用命令



安装应用

tidevice install example.ipa通过URL安装应用 (实际使用时网址要改成正确的)tidevice install http://example.org/demo.ipa应用启动tidevice launch com.apple.Preferences截图tidevice screenshot screenshot.jpg查看系统日志tidevice syslog其他常用的命令帮助命令查看,基本上常用的命令都有了tidevice -h


启动WebDriverAgent



目前iOS的黑盒自动化,最流行的方法是通过WDA来实现的。在tidevice出现之前,WDA只能通过xcodebuild来启动,而运行xcodebuild则必须有一台Mac才行。

tidevice没有通过xcodebuild,而是通过usbmuxd直接跟手机上的服务进行直接通信完成手机上WDA的启动。usbmux在不同的平台都有开源的实现,所以tidevice不仅能在Mac上运行,也能在Linux、Windows上运行。

image.png


关于usbmux通信协议这部分,苹果当然不会告诉直接告诉我们。不过因为usbmux本身就是socket套接字,所以我们可以直接截获其中的内容,然后根据开源界已有的成果,其中大部分的内容已经被破解了。先用xcodebuild完成一次WDA的启动,然后找到关键的通信内容,再用python来模拟回放一遍,就可以抛弃xcodebuild不用了。相对于xcodebuild启动,tidevice因为通信内容更精简,所以启动速度更快(2s左右),另外也更稳定。

 



说了一堆理论,我们看一下怎么使用的吧


前提条件

  1. 数据线将 iPhone 手机连接到 PC 上
  2. 手机上已经有WebDriverAgent这个 App 了。这个可以通过 xcode 编译源码安装,也可以用开发者证书重签名的 WebDriverAgent.ipa 安装到手机。
  3. Linux和Windows因为默认没有usbmux这个服务,提前安装一下就可以。可以参考这个issue:
    https://github.com/alibaba/taobao-iphone-device/issues/7

 

前提条件OK了的话,像下图这样执行命令就可以将WDA启动起来了。

image.gifimage.png

 

而验证WDA是否工作最简单的办法就是打开浏览器,网站:http://localhost:8100/status能看到下面的输出说明WDA工作正常了

image.gifimage.png

或者也可以直接使用Appium调度

image.png


运行 UITests



有些用户的开发能力可能比较强,习惯直接用OC或者Swift直接写UI自动化用例。通过tidevice也支持的。网上找了一个OC写的XCTest UITests demo项目https://github.com/FeiHuang93/XCTest-Demo使用xcode编译安装到手机上之后,有两个应用

testXCTestUITests  执行测试的应用 testXCTest 被测应用

使用下面的命令执行即可

tidevice xctest --bundle-id philhuang.testXCTestUITests.xctrunner --target-bundle-id philhuang.testXCTest

image.png

将被测应用和执行测试应用打包成ipa后,就可以在多个的手机上运行了。


总结



现在这个项目在阿里内部目前用的还不错,希望欢迎多多试用反馈。如果好用的话,希望可以留下你的Star
https://github.com/alibaba/taobao-iphone-device


相关文章
|
1月前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
51 3
|
1月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
52 4
|
1月前
|
运维 Linux Apache
Puppet这一强大的自动化运维工具,涵盖其基本概念、安装配置及使用示例
【10月更文挑战第8天】本文介绍了Puppet这一强大的自动化运维工具,涵盖其基本概念、安装配置及使用示例。Puppet通过定义资源状态和关系,确保系统配置始终如一,支持高效管理基础设施。文章详细讲解了Puppet的安装步骤、配置方法及DSL语言示例,帮助读者快速掌握Puppet的使用技巧。
63 2
|
1月前
|
监控 虚拟化 云计算
从物理到云:使用自动化工具简化服务器迁移流程
【10月更文挑战第4天】随着云计算的快速发展,越来越多的企业选择将物理服务器迁移到云环境以提高效率和降低成本。本文详细介绍了使用自动化工具简化从物理到云的服务器迁移流程的技术实现细节,并提供了代码示例。
114 6
|
6天前
|
安全 前端开发 测试技术
如何选择合适的自动化安全测试工具
选择合适的自动化安全测试工具需考虑多个因素,包括项目需求、测试目标、系统类型和技术栈,工具的功能特性、市场评价、成本和许可,以及集成性、误报率、社区支持、易用性和安全性。综合评估这些因素,可确保所选工具满足项目需求和团队能力。
|
7天前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
27 4
|
9天前
|
运维 监控 数据安全/隐私保护
自动化运维工具的设计与实现
【10月更文挑战第34天】在现代IT基础设施管理中,自动化运维工具扮演着至关重要的角色。它们不仅提高了运维效率,还确保了服务的连续性和稳定性。本文将深入探讨如何设计并实现一个自动化运维工具,从需求分析到功能实现,再到最终的测试与部署。我们将通过一个简单的代码示例来展示如何自动执行常见的运维任务,如日志清理和性能监控。文章旨在为读者提供一套完整的方法论,以便他们能够构建自己的自动化运维解决方案。
|
24天前
|
移动开发 网络协议 小程序
基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v9.1版已发布
RainbowChat是一套基于开源IM聊天框架 MobileIMSDK 的产品级移动端IM系统。RainbowChat源于真实运营的产品,解决了大量的屏幕适配、细节优化、机器兼容问题
55 5
|
1月前
|
运维 关系型数据库 MySQL
自动化运维工具Ansible的实战应用
【10月更文挑战第9天】在现代IT运维领域,效率和可靠性是衡量一个系统是否健康的重要指标。自动化运维工具Ansible因其简洁、易用的特性,成为了众多企业和开发者的首选。本文将通过实际案例,展示如何利用Ansible进行日常的运维任务,包括配置管理、软件部署以及批量操作等,帮助读者深入理解Ansible的应用场景及其带来的效益。
|
1月前
|
人工智能 运维 监控
自动化运维:从脚本到工具的演变之路
【10月更文挑战第8天】在数字化时代的浪潮中,运维不再是简单的硬件维护,它已经演变成一场关于效率、稳定性和创新的技术革命。本文将带您领略自动化运维的魅力,从最初的脚本编写到现代复杂的自动化工具,我们将一探究竟,看看这些工具如何帮助运维人员简化日常任务,提升工作效率,并最终推动业务发展。