iPhone Use 从零开始详细教程:让 Codex 通过 USB 直接操控你的真实 iPhone

Codex 左侧对话面板与右侧 iPhone Use 屏幕面板并排:左边下达任务,右边实时显示 iPhone 17 Pro Max 的桌面
插件在 Codex 里的样子:左边是对话,右边是实时手机屏幕(带机型名和 Live 状态)

一、它到底在解决什么问题

手机上的重复劳动一直是自动化的盲区:电脑能写脚本,手机上的 App 只能靠手指点。安卓有 ADB,iPhone 过去只有两条路——要么越狱,要么装一整套 Appium Server 自己写测试代码。iPhone Use 把这件事压缩成一句话:让 Codex 直接连着数据线操作你的真机。

它同时给了三样东西,缺一不可:

组成部分 作用
本地 MCP 服务 把「点、滑、打字、读页面」这些动作包装成 Codex 能调用的工具
安装 + 使用两套技能 首次配置、签名、构建、启动,以及日常操作,都有现成流程可走
实时屏幕 widget 侧边栏里显示手机画面,带点击 / 拖动光效,看得见它在做什么

底层用的是 WebDriverAgent(WDA)——Appium 生态里那套跑在手机上的自动化执行服务。区别是:你不需要单独启动 Appium Server,也不需要自己啃 WDA 的配置,这些都由插件的安装流程代管。

结果就是这句话能直接执行:「打开备忘录,新建一条草稿,输入下面这段中文,核对文字后保留。」 输入和提交是分开的,工具默认不帮你按发送——这是刻意的设计。

二、动手前,先看清楚门槛

这是全文最该认真读的一节。iPhone Use 的体验很好,但它要求的准备工作比一般小工具多,因为要在一台没有越狱的 iPhone 上跑起自动化服务。

依赖 为什么需要
macOS + Codex 桌面端 / CLI 安装本地插件、运行 MCP 服务与屏幕侧边栏
完整 Xcode(已完成首次启动配置) 编译、签名、部署、运行 WDA。只装 Command Line Tools 不够
可用的 Apple 账号与开发团队 给手机端的 WDA Runner 签名
USB 连接的真实 iPhone 需「信任此 Mac」、开启开发者模式,安装期间保持解锁
Python 3.9+ 运行 MCP 服务(只用标准库)
Node.js 20.19+ / 22.12+ / 24+,npm 10+ USB 转发与屏幕流

三个必须先说清的点:

1. 先在你自己手机上装好 WDA Runner 并让它跑起来——这是运行在手机里的执行服务,没有它后面全免谈。

2. Xcode 要能支持手机当前的 iOS 版本。不用越狱,也不用单独启动 Appium Server;WDA 固定用已验证的 16.14.0 提交版本,下载、依赖、签名、构建都由安装流程管理。

3. 免费 Apple 账号有硬限制:个人团队最多 3 个自装 App、描述文件自签发起 7 天过期,到期要重建重装。

手动装 WDA 的三步(如果你不想让 Codex 代劳)

  1. USB 连上 iPhone,信任这台 Mac,按系统提示开启开发者模式,并在 Xcode 里登录自己的 Apple 账号。
  2. 打开 WDA 源码里的 WebDriverAgent.xcodeproj,选中 WebDriverAgentRunner scheme 和自己的 iPhone;在 Runner target 的 Signing & Capabilities 里选自己的 Team 和可签名的 Bundle Identifier。
  3. 用 Product → Test 构建、安装并运行。运行测试会启动 WDA 服务——注意,安装完成后这个服务仍需处于运行状态。

三、装它:把这段话丢给 Codex 就行

这是这个项目最省事的地方——安装本身也是由 Codex 干的。把下面这段复制到本机 Codex:

请帮我安装和配置 iPhone Use:
https://github.com/zhongerxin/iPhone-use

先读取仓库 README 和安装脚本,检查本机 Codex CLI、Python、Node.js、npm、
完整 Xcode,以及通过 USB 连接的 iPhone。把项目放到合适的本机目录,
运行 sh scripts/install.sh 安装插件。

如果当前聊天还没有加载新工具,明确告诉我重连或新开聊天后继续。
工具可用后读取 iphone-use-setup 技能,检查现有配置,优先复用已有 WDA。
首次配置时发现我的设备,使用我自己的 Apple 开发团队和可签名 bundle ID,
获取固定版本 WDA、配置签名、构建并启动,直到 pua_ready 返回 ready=true,
然后打开手机屏幕。不要照搬作者的设备标识或签名信息。

缺少依赖时说明具体缺项并帮助安装。Apple 账号登录、设备信任、开发者模式
或解锁需要我操作时,告诉我明确步骤,等我完成再继续。

想自己敲命令也行,两条:

git clone https://github.com/zhongerxin/iPhone-use.git
cd iPhone-use
sh scripts/install.sh

安装脚本会验证并暂存源码,通过 Codex CLI 注册本地 marketplace、装好插件与技能,并把服务注册成标准 MCP iphone_use。插件和标准配置共用同一个命名空间,不会重复注册工具。

装完后当前聊天可能不会立刻出现新工具,重连或新开一个聊天即可,流程能在重连后接着走。

四、连手机:把设备配到 READY

新聊天里启用 iPhone Use,然后说一句:

用 iphone-use-setup 帮我配置通过 USB 连接的 iPhone,安装并启动 WDA,验证 READY,然后显示手机屏幕。

接下来 Codex 会依次完成:环境诊断 → 发现设备 → 配置签名 → 获取 WDA → 后台构建 → 安装启动。已经配置过的设备会复用配置和构建,日常任务不需要每次重装。

唯一需要记住的判据是:pua_ready 返回 ready=true 之后,才开始真正的手机任务。以下这些都不算就绪——Runner 图标出现了、构建显示 BUILD SUCCEEDED、端口开放了,都不代表通道可用。

卡住了怎么查

现象 先查 下一步
找不到真机 / device unavailable 数据线是否支持数据、手机是否解锁并信任、Xcode 是否完成配对 重连后重新 discover,确认拿到的是目标真机
Xcode 没完成首次启动 / 缺组件 doctor 返回的 Xcode 版本与首次启动状态 装完整 Xcode 并走完系统提示;单装命令行工具不够
Developer Mode disabled 手机上的开发者模式开关 手动开启并重启后重新 discover
signing requires development team Xcode 里的 Apple 账号与 Team 登录并选自己的 Team 后重新 configure / build
免费描述文件用满 3 个 App Personal Team 已装的开发 App 自己决定是否卸载不用的,不强迫升级开发者计划
profile 过期 / 旧 Runner 起不来 构建日志里的签名有效期 用原配置重新 build / start,再验 READY
构建成功但 HTTP 不可达 Runner 测试是否在运行、USB 转发进程与端口 用 status 分开确认「运行」和「转发」,再 start 恢复
控件树没内容 / 标签定位失败 页面是否自绘、受保护,或树被截断 别换标签反复试,按截图改坐标点击
屏幕预览空白 是否处于认证暂停、是否刚断开换流 预览不可用不等于控制通道失效,别为它反复重启

省时间的一条:手机若开着「iPhone 镜像」(正在从 Mac 使用此 iPhone),会和控制通道抢设备,工具会返回 mirroring_conflict。遇到就先退出镜像、必要时解锁手机,再重新验 READY。

五、17 个工具,覆盖了哪些活

模型实际可用 17 个工具,另有 2 个只给屏幕 widget 用(模型不该调)。按用途分一下:

分类 工具 能做的事
环境与就绪 pua_doctor pua_setup pua_ready 诊断环境、配置设备、后台安装启动、就绪检查
观察 pua_observe pua_find 读控件树、截图、按条件找目标
App pua_apps pua_launch_app 查 App 标识、核对安装证据、启动 App
手势 pua_tap pua_swipe pua_press_button 按控件或坐标点击、滑动拖动、回主屏
输入 pua_type_text pua_wait 一次输入完整 Unicode 中文、有界等待
组合与采集 pua_batch pua_scroll_find pua_collect_list 最多 20 步合成一次调用、有界滚动查找、列表采集去重
预览与统计 pua_screen pua_metrics 开关预览、看耗时与字节数

可以直接抄的三条提示词:

用 iPhone Use 打开备忘录,新建一条草稿,输入下面的中文内容,核对文字后保留。

打开目标 App,搜索这个名称,读取前几项结果并整理给我。

读取这个列表,分段滚动并去重,说明已经覆盖的范围和还未确认的部分。

需要把手机里的图片或文件传回 Mac,可以走 AirDrop 那条参考路径,发送后到下载目录取文件就行。

iPhone Use 的连接链路:Mac 侧 Codex 与 MCP 服务经本地 18100 转发端口,通过 USB 连到手机上的 WebDriverAgent
整条链路:Codex → MCP 服务 → 本地 18100 端口 → USB 转发 → 手机里的 WDA,全程不出本机

六、它比一般自动化好在哪,边界在哪

几处值得说的工程细节

  • 纯本地 USB 通道。Python MCP 服务通过本机 loopback 转发访问 WDA,运行数据和签名构建都留在本机;WDA_URL 默认转发端口 18100,远程地址会被拒绝。
  • 尽量不重复干活。复用 HTTP 连接、WDA session、健康服务和已有构建;首次任务确认 READY,之后沿健康通道继续。
  • 观察更省 token。控件树省略重复字段,只需要截图时不生成 XML;batch、滚动查找、列表采集都能减少工具往返。
  • 安装任务是异步的。下载、构建、启动返回可查询的工作 ID,重复 setup 会优先复用正在进行的工作。
  • 定位失败有兜底。元素找不到时返回截图和处理指引,图像像素乘 image.pixel_to_point 换算成 iPhone 点坐标,再交给 pua_tap。
  • 失败语义很明确。多进程共享操作锁;动作超时或断线可能被标记为「不确定」,这时先读实际状态,不盲目重放点击、输入或提交。
  • 预览不落盘。屏幕流不写文件,锁屏与主动暂停是两种不同状态,解锁后 READY 能恢复锁屏预览。

该有的心理预期

情况 说明
认证一定是你自己来 密码、验证码、Face ID / Touch ID、手机解锁,都由你在手机界面完成,工具不索取凭据,接管期间预览会暂停
默认不会替你发送 工具把输入和提交分开,模型需要自己核对关键页面、接收人、数量和最终结果
速度取决于三件事 具体 App、USB / WDA 状态、模型响应速度。这些优化主要减少重复请求与模型往返,不是让手机变快
有匿名统计 插件默认向独立的 PostHog 项目上报启动、工具调用、连接状态、耗时和错误类别;用随机安装标识,不上传手机画面、输入内容或设备标识。设 IPHONE_USE_ANALYTICS=0 或 DO_NOT_TRACK=1 并重启 MCP 服务即可关闭
运行数据在哪 默认 ~/.local/share/iphone-use/,可用 IPHONE_USE_STATE_DIR 指定;运行目录权限 700、私有配置与图像 600。升级时若新目录不存在会继续用旧配置目录,别为了改名把运行数据删了

日常更新就两步:

git pull --ff-only
sh scripts/install.sh

然后重连聊天,加载更新后的工具、技能和屏幕资源。

最后总结一句:它把「用代码操作 iPhone」这件事的门槛,从「配一套 Appium 环境 + 写 XCUITest」降到了「装完插件,用中文说一句话」。代价是要有一台 Mac、一套完整 Xcode、一根能传数据的数据线,以及第一次配置时耐心跟着流程走完签名和设备信任。

项目仓库(MIT 协议,作者未收集个人信息):github.com/zhongerxin/iPhone-use

站内相关

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像-二楼后座
欢迎您留下宝贵的见解!
提交
头像-二楼后座

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容