go-ios项目分析
go-ios 是一款用 Go 语言编写的跨平台工具集,用于 iOS 设备自动化。它提供了全面的命令集,可从 Windows、Linux 和 macOS 管理 iOS 设备、应用程序、测试和设备配置。该项目旨在提供一个稳定、可用于生产环境的开源 iOS 自动化解决方案,该方案可以作为命令行工具使用,集成到其他 Go 项目中,或通过 REST API 访问。
支持的命令
设备连接和管理
支持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:101ios devicename- 获取设备名称 main.go:84ios date- 获取设备时间 main.go:82ios batterycheck- 查看电池信息 main.go:77ios batteryregistry- 查看电池注册表统计 main.go:78ios diskspace- 查看磁盘空间信息ios ps- 列出运行中的进程 main.go:120ios sysmontap- 获取系统统计信息(内存、CPU) main.go:133ios syslog- 查看系统日志
应用安装和管理
InstallationProxy服务使用plist格式进行通信
ProcessControl服务基于DTX (Device Transfer eXchange) 协议实现。
ZipConduit服务使用特殊的ZIP流格式传输应用包。是苹果为流式传输定制的格式,包含META-INF元数据和无压缩的文件头。 用于安装应用
ios17以下,使用usbmuxd服务简历连接;
ios17+以上,使用隧道连接和shim服务;
管理命令
ios apps- 列出已安装应用 main.go:74ios install- 安装应用 main.go:102ios uninstall- 卸载应用ios launch- 启动应用 main.go:107ios kill- 终止应用进程 main.go:105ios memlimitoff- 取消内存限制 main.go:110ios runtest- 运行XCUITest测试ios runwda- 运行WebDriverAgent main.go:127ios 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协议与设备通信获取系统性能数据。