iOS设备截图工具Skill ios-device-screenshot

iOS设备截图工具是一个使用pymobiledevice3库从物理iPhone或iPad(通过USB连接)捕获高质量屏幕截图的技能。它支持iOS 17及以上版本(需使用DVT开发者工具命令),适用于移动应用开发调试、设备测试、自动化截图和UI/UX验证等场景。关键词:iOS截图,物理设备截图,pymobiledevice3,USB连接,开发者工具,移动开发调试。

移动开发 0 次安装 0 次浏览 更新于 2/23/2026

name: ios-device-screenshot description: 使用 pymobiledevice3 从通过 USB 连接的物理 iOS 设备上截取屏幕截图。适用于从真实 iPhone/iPad(非模拟器)捕获截图、在设备上调试或需要高保真设备捕获的场景。触发条件包括物理 iOS 设备截图、pymobiledevice3 使用或 USB 连接设备捕获任务。

iOS 设备截图

使用 pymobiledevice3 从通过 USB 连接的物理 iOS 设备上截取屏幕截图。

安装

# 使用 uv 安装 pymobiledevice3(推荐)
uv tool install pymobiledevice3

# 或使用 pipx
pipx install pymobiledevice3

前提条件

  1. 物理 iOS 设备 通过 USB 连接
  2. 在设备上启用开发者模式(设置 > 隐私与安全性 > 开发者模式)
  3. 信任设备 - 在设备上批准“信任此电脑”提示

使用方法

适用于 iOS 17+(包括 iOS 26+)

iOS 17+ 需要以 root 权限运行 tunneld 守护进程:

# 终端 1:启动 tunneld(需要 sudo,持续运行)
sudo pymobiledevice3 remote tunneld

# 终端 2:通过 DVT(开发者工具)截取屏幕截图
pymobiledevice3 developer dvt screenshot --tunnel "" /path/to/screenshot.png

--tunnel "" 标志告诉它使用 tunneld 进行设备通信。

适用于 iOS 16 及更早版本

pymobiledevice3 developer screenshot /path/to/screenshot.png

快速参考

# 列出已连接的设备
xcrun devicectl list devices

# 检查 iOS 版本
ideviceinfo -k ProductVersion

# 检查开发者镜像是否已挂载
ideviceimagemounter list

# 如果需要,自动挂载开发者镜像
pymobiledevice3 mounter auto-mount --tunnel ""

# 截取屏幕截图(iOS 17+)- 单设备
pymobiledevice3 developer dvt screenshot --tunnel "" ~/Desktop/screenshot.png

# 使用特定设备 UDID 截取屏幕截图(多设备时必须)
# 首先从以下命令获取 UDID:xcrun devicectl list devices
# 将 UDID 直接传递给 --tunnel(不是 --udid 标志,该标志与 tunneld 不兼容)
pymobiledevice3 developer dvt screenshot --tunnel "00008101-001E05A41144001E" ~/Desktop/screenshot.png

重要提示: 当连接多个设备时,将 UDID 直接传递给 --tunnel(而不是 --udid)。--tunnel "" 语法会提示交互式选择,这在非交互式 shell 中会失败。

故障排除

“InvalidServiceError” 或 “Failed to start service”

  1. 确保 tunneld 正在运行:ps aux | grep tunneld
  2. 如果未运行:sudo pymobiledevice3 remote tunneld
  3. 使用 DVT 命令而不是常规截图命令:developer dvt screenshot 而不是 developer screenshot

“DeveloperDiskImage not mounted”

pymobiledevice3 mounter auto-mount --tunnel ""

连接了多个设备

使用 --udid 指定目标设备:

# 首先列出设备
xcrun devicectl list devices

# 使用特定 UDID
pymobiledevice3 developer dvt screenshot --tunnel "" --udid "40182233-00C8-51ED-8C68-174E14E4B4C9" /tmp/screenshot.png

关键发现

对于 iOS 17+,常规的 pymobiledevice3 developer screenshot 命令即使 tunneld 正在运行也经常失败。解决方案是使用 DVT(开发者工具)变体:

# 这在 iOS 17+ 上会失败:
pymobiledevice3 developer screenshot --tunnel "" /tmp/screenshot.png

# 这在 iOS 17+ 上有效:
pymobiledevice3 developer dvt screenshot --tunnel "" /tmp/screenshot.png

集成示例

#!/bin/bash
# 截取 iOS 设备屏幕截图并打开它

OUTPUT="/tmp/ios-screenshot-$(date +%Y%m%d-%H%M%S).png"

# 检查 tunneld 是否在运行,如果没有则启动
if ! pgrep -f "pymobiledevice3 remote tunneld" > /dev/null; then
    echo "正在启动 tunneld(需要 sudo)..."
    sudo pymobiledevice3 remote tunneld &
    sleep 3
fi

# 截取屏幕截图
pymobiledevice3 developer dvt screenshot --tunnel "" "$OUTPUT"

if [ -f "$OUTPUT" ]; then
    echo "屏幕截图已保存至:$OUTPUT"
    open "$OUTPUT"  # macOS:在预览中打开
else
    echo "截取屏幕截图失败"
    exit 1
fi