go-ios项目分析

16

go-ios 是一款用 Go 语言编写的跨平台工具集,用于 iOS 设备自动化。它提供了全面的命令集,可从 Windows、Linux 和 macOS 管理 iOS 设备、应用程序、测试和设备配置。该项目旨在提供一个稳定、可用于生产环境的开源 iOS 自动化解决方案,该方案可以作为命令行工具使用,集成到其他 Go 项目中,或通过 REST API 访问。

支持的命令

Category  分类

Example Commands  示例命令

Description  描述

Device Management  设备管理

listinforeboot

Discover and control iOS devices发现和控制 iOS 设备

App Management  应用管理

installlaunchappsuninstall

Manage applications on devices管理设备上的应用

Testing  测试

runtestrunwdarunxctest

Execute XCUITests and WebDriverAgent执行 XCUITests 和 WebDriverAgent

Image Management  图像管理

image mountimage auto

Handle developer disk images处理开发者磁盘图像

Network  网络

forwardtunnelhttpproxy

Network-related operations网络相关操作

Diagnostics  诊断

syslogcrashpcap

Retrieve diagnostics information获取诊断信息

设备连接和管理

  • 支持usb连接,基于usbmuxd

  • ios17+ 支持RSD网络连接

  • DTX协议,用于特定服务的通信 例如UITest和instruments

设备连接命令

  • ios list

  • ios listen

  • ios pair

  • ios readpair

  • ios tunnel start ios17隧道连接

  • ios tunnel ls 列出当前隧道

  • ios rsd ls 列出iOS 17+设备上可用的远程服务发现(RSD)服务及其端口。

go-ios根据iOS版本使用不同的连接机制:

  • iOS < 17: 通过usbmuxd服务直接连接 connect.go:90-109

  • iOS 17+: 需要先建立隧道连接,然后通过RSD进行服务发现 connect.go:130-148

单个设备的命令

  • ios info - 获取设备详细信息 main.go:101

  • ios devicename - 获取设备名称 main.go:84

  • ios date - 获取设备时间 main.go:82

  • ios batterycheck - 查看电池信息 main.go:77

  • ios batteryregistry - 查看电池注册表统计 main.go:78

  • ios diskspace - 查看磁盘空间信息

  • ios ps - 列出运行中的进程 main.go:120

  • ios sysmontap - 获取系统统计信息(内存、CPU) main.go:133

  • ios syslog - 查看系统日志

应用安装和管理

  • InstallationProxy服务使用plist格式进行通信

  • ProcessControl服务基于DTX (Device Transfer eXchange) 协议实现。

  • ZipConduit服务使用特殊的ZIP流格式传输应用包。是苹果为流式传输定制的格式,包含META-INF元数据和无压缩的文件头。 用于安装应用

ios17以下,使用usbmuxd服务简历连接;

ios17+以上,使用隧道连接和shim服务;

管理命令

  • ios apps - 列出已安装应用 main.go:74

  • ios install - 安装应用 main.go:102

  • ios uninstall - 卸载应用

  • ios launch - 启动应用 main.go:107

  • ios kill - 终止应用进程 main.go:105

  • ios memlimitoff - 取消内存限制 main.go:110

  • ios runtest - 运行XCUITest测试

  • ios runwda - 运行WebDriverAgent main.go:127

  • ios runxctest - 运行 XCTest main.go:128

开发者镜像操作

  • ios17以及以上的版本,系统有专门的挂载镜像流程

对于iOS 17+设备,镜像路径必须指向开发者磁盘镜像内的"Restore"目录。 
1. 加载构建清单:系统首先加载BuildManifest.plist文件。 personalized_image_mounter.go:68-71

2. 获取设备标识符和随机数:查询设备的个性化标识符和随机数,这些用于Apple的签名服务。 personalized_image_mounter.go:73-80

3. Apple TSS签名:向Apple的票据签名服务请求个性化签名。 personalized_image_mounter.go:87-90

4. 上传和挂载:上传DMG文件并使用签名和信任缓存挂载镜像。 personalized_image_mounter.go:120-123

命令行

  • ios image mount --path=<Restore目录路径>

  • ios image auto

性能测试

go-ios中的性能测试主要通过**ios sysmontap命令实现,该命令获取设备的系统统计信息,包括内存和CPU使用情况。 通过ios ps**命令可以获取运行中进程的详细信息,这为性能分析提供了进程级别的数据支持。 **ios memlimitoff**命令可以取消iOS对特定进程的内存限制 性能测试的底层实现基于Instruments服务,通过DTX协议与设备通信获取系统性能数据。