tidevice

MIT
Python3
Win,Linux,Mac
codeskyblue · 2021年01月28日 · 20701 次阅读 · 11 条评论

简介

tidevice 是阿里的内部的一个小组用来做 iOS 自动化用的工具。最近终于开源了出来。
所以这篇文章就来介绍一下这款工具。

项目地址 https://github.com/alibaba/taobao-iphone-device,请先点个 Star ⭐ ,然后回来在看。

它有什么功能呢?

  • 截图
  • App 安装,启动,停止,查看
  • 启动 WebDriverAgent
  • 性能采集(类似 PerfDog)不过这块暂时只有 API 可以用。
  • 功能还在不停的扩展中

这个工具是纯 Python 写成的,所以也是跨平台的。也就是可以在能跑起来 Python 的 Windows、Linux、Mac 上运行。

其中网上最难找的应该是这个如何不依赖 xcode 启动 WebDriverAgent,这个工具就可以做到,原理的话可以翻源码。因为不依赖 Xcodebuild,所以就算你只有 Windows 或者 Linux 也能跑起来 iOS 自动化。

截止到发稿日期 2021/01/27,支持 iOS 手机的范围是 9.0-14.0

安装

该工具是用 Python 写的,依赖 Python3.6+
安装方法

pip3 install -U tidevice

截图、App 启动等一些常规操作

# 查看所有连接上的设备
$ tidevice list
List of apple devices attached
1234567892d8372eb752f413280722cdcc200954 iPhoneSE

# 截图
tidevice screenshot screenshot.jpg

# 启动苹果设置
tidevice launch com.apple.Preferences

# 查看已安装的第三方应用
tidevice applist

启动 WebDriverAgent 演示

本来想录个视频的,但是 Windows 电脑还要去借,太麻烦了。就不录视频了。反正你知道 Windows 能跑就行。

第一步用数据线将 iPhone 手机连接到 PC 上,另外还需要手机上已经有WebDriverAgent这个 App 了。这个可以通过 xcode 编译源码安装,也可以用开发者证书重签名的 WebDriverAgent.ipa 安装到手机。

WebDriverAgent.ipa 在项目的 tests/testdata 目录下可以找到我之前打包好的。

启动就是一个命令 tidevice xctest 或者指定执行设备和 bundleId tidevice -u $UDID xctest -B $BUNDLE_ID

需要运行运行自动化的话,可以直接用 facebook-wda

或者用 iproxy 8100 8100 将服务映射出来用 Appium 或其他自动化框架连接也可以。

我觉的这种方式的优点

  1. 启动速度快(基本都在 1s 内)
  2. CPU、Memory 占用率低,可以实现 1 台电脑挂载 10+ iPhone 设备的需求
  3. 不限操作系统。Linux,Windows 也可以。不过还是有条件上 Mac,也就贵一点而已。
  4. 最重要的就是这种方式稳定性高。

其他功能

tidevice applist
tidevice reboot
tidevice screenshot
tidevice info
tidevice install https://.....ipa

更多功能参考
tidevice -h

其他

我怕你忘记点 ⭐,这里再贴一遍 https://github.com/alibaba/taobao-iphone-device

PS: 本小组正在招人,欢迎投递简历并留言。https://testerhome.com/topics/23010

评论列表
Soner 发表于 2022年03月25日

可以过滤掉 network 连接的设备以及 列出模拟器的设备吗?
List of apple devices attached
XXXXX phone5 12.5.3 network
XXXXX iPhone 11 Pro Max(14.4) QA 14.4 network
Traceback (most recent call last):
File "xxxx/venv/bin/tidevice", line 8, in
sys.exit(main())
File "xxxx/venv/lib/python3.7/site-packages/tidevice/main.py", line 813, in main
actionsargs.subparser
File "xxxx/venv/lib/python3.7/site-packages/tidevice/main.py", line 83, in cmd_list
name = _d.name
File "xxxx/venv/lib/python3.7/site-packages/tidevice/_device.py", line 551, in name
return self.get_value("DeviceName", no_session=True)
File "xxxx/venv/lib/python3.7/site-packages/tidevice/_device.py", line 397, in get_value
return ret['Value']
KeyError: 'Value'

发表于 2021年04月12日

请教大佬,执行语句
c=wda.USBClient()
出现报错:
raise RuntimeError("wda xctest launched but check failed")
不知道怎么解决呢?是我 wda 没搭好么?

ttwu 发表于 2021年03月30日

ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
该问题已解决,需要安装 itunes

ttwu 发表于 2021年03月30日

File "c:\users\lidy307\appdata\local\programs\python\python37\lib\site-packages\tidevice_usbmux.py", line 42, in create_connection
return PlistSocket(self.address, self._next_tag())
File "c:\users\lidy307\appdata\local\programs\python\python37\lib\site-packages\tidevice_safe_socket.py", line 92, in __init

super().init(addr)
File "c:\users\lidy307\appdata\local\programs\python\python37\lib\site-packages\tidevice_safe_socket.py", line 48, in init
self._sock.connect(addr)
ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。

tidevice list 报错,怎么解决?

0x88 发表于 2021年03月09日

wda 打出来的 ipa 包会占用开发者帐号 ios 手机数量的限制吗?

tangoliver 发表于 2021年02月27日

争取实现 ip 连接,就跟 adb 一样强大了

tangoliver 发表于 2021年02月27日

好工具,收藏

cmlanche 发表于 2021年02月22日

tidevice 启动 wda 后,有没有发现通过 wda 的接口去启动 app 很慢,有时候需要好几分钟

春风亭老胡 发表于 2021年02月04日

安装时候也遇到一楼的错误了

chip 发表于 2021年01月29日

C:\Users\Administrator>tidevice install D:\test_1111.ipa
Traceback (most recent call last):
File "e:\python36\lib\runpy.py", line 193, in run_module_as_main
"
main", mod_spec)
File "e:\python36\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "E:\python36\Scripts\tidevice.exe__main
.py", line 7, in
File "e:\python36\lib\site-packages\tidevice__main
.py", line 416, in main
actionsargs.subparser
File "e:\python36\lib\site-packages\tidevice__main
_.py", line 120, in cmd_in
stall
bundle_id = d.app_install(args.filepath_or_url)
File "e:\python36\lib\site-packages\tidevice_device.py", line 684, in app_ins
tall
bundle_id = ir.get_bundle_id()
File "e:\python36\lib\site-packages\tidevice_ipautil.py", line 57, in get_bun
dle_id
return self.get_infoplist()['CFBundleIdentifier']
File "e:\python36\lib\site-packages\tidevice_ipautil.py", line 53, in get_inf
oplist
return bplist.load(fp)
File "e:\python36\lib\site-packages\tidevice\plistlib2.py", line 966, in load
fp.seek(0)
io.UnsupportedOperation: seek

这是为什么?

陈恒捷 发表于 2021年01月28日

简介有点太简单了,可以把那个开源分享的帖子内容直接贴过来?