EAS Simulator 是 Expo 提供的托管式远程模拟器服务,在 EAS 基础设施上启动远程 iOS 模拟器或 Android 模拟器,由用户从本机通过命令行、AI 智能体(agent-device)以及浏览器预览进行操控。它不是本地模拟器方案,也不用于应用商店构建、签名或真机调试。
【用途】
- 在无法运行本地模拟器的环境(如 Linux 主机、云/后台智能体、Cursor Cloud 等沙箱)中运行用户应用。
- 让 AI 智能体在远程模拟器/仿真器上实际验证改动,而不仅是对代码进行推理。
- 需要云端、远程或可共享模拟器时使用。若主机本身能运行所需模拟器,通常优先选择本地模拟器(expo run:ios、Xcode、Android Studio);非 macOS 主机仍可能支持本地 Android 仿真器。
【前置条件】
- 所有 eas 命令通过 npx --yes eas-cli@latest 执行,需较新的 eas-cli(撰写时 ≥ 20.3.0);simulator:* 命令为实验性且隐藏,具体参数以对应子命令的 --help 输出为准。
- 需已认证:交互式机器用 npx --yes eas-cli@latest login;云沙箱/CI/无头智能体无浏览器登录,需设置 EXPO_TOKEN 环境变量。可用 npx --yes eas-cli@latest whoami 验证。
- 需在 Expo 项目目录中运行;新应用需一次性初始化(eas init 创建/关联项目,并在配置中设置 ios.bundleIdentifier)。
- 需要驱动设备的控制器,技能默认使用 agent-device(开源,MIT),通过 npx agent-device@latest 按需运行,无需全局安装;Appium 和 argent 是替代自动化接口,仅浏览器预览模式没有自动化接口。
- .env.eas-simulator 由 eas-cli 写入和管理,包含会话 ID、守护进程 URL/令牌,应加入 gitignore。
- 命令示例假设 POSIX shell(bash/zsh),Windows 下需在 WSL 或 Git Bash 中运行。
【使用方式(核心流程)】
- 检查可用性:npx --yes eas-cli@latest simulator:availability --json,返回 available 为 true 才继续;不可用则不要启动会话,应回退到本地模拟器、EAS Build 等常规路径。
- 启动会话:npx --yes eas-cli@latest simulator:start --platform ios --type agent-device --non-interactive --name "<描述>",会启动远程模拟器与 agent-device 守护进程并写入 .env.eas-simulator,打印预览与任务运行 URL。每次启动必须传入 --name,用 3–6 个词说明会话用途,便于在会话列表中辨认。
- 通过 exec 驱动设备:npx --yes eas-cli@latest simulator:exec npx agent-device@latest open <app-or-url> --platform ios;snapshot -i 获取可交互 UI 树(@e1、@e2 引用);press @e2 点击(注意是 press 而非 tap);screenshot ./shot.png 截图。
- 停止会话:npx --yes eas-cli@latest simulator:stop,并重置 .env.eas-simulator。
【其他命令】 simulator:get 查看会话状态与连接信息;simulator:list 列出并分页项目会话(可按状态、类型、平台、名称前缀、标签过滤);simulator:events 查看活动事件(--follow 持续监视);simulator:stop 幂等停止会话。
【会话生命周期】 --max-duration-minutes N 为硬性自动停止时限;--max-idle-time-minutes N 为空闲超时,省略表示无空闲超时。仅 agent-device 和 argent 报告的活动会重置空闲计时,Appium 命令与浏览器预览活动不会重置,因此这两类场景应以最大时长而非空闲时间约束会话。
【运行应用的模式】 远程模拟器初始为空,需先安装构建再驱动,且构建类型须匹配目标:
- 模式 A:本地 Release 构建,agent-device 安装;适合有 Mac 工具链、想快速在云设备运行当前代码的用户;无实时编辑,改动需重新构建。
- 模式 B:EAS 构建,仅在被明确要求时使用(用户指定现有/EAS 构建,或需要静态 EAS 产物用于 CI/共享);无实时编辑。
- 模式 C:本地开发构建 + 隧道,Dev(Debug)构建配合 EXPO_UNSTABLE_TUNNEL_V2=1 expo start --tunnel,将开发客户端连接 Metro,支持 Fast Refresh 实时编辑;默认推荐此模式。 静态构建在构建时冻结 JS,无法热重载,不能用于实时迭代;复用旧构建前需确认其与当前源码指纹匹配。
【浏览器预览】 启动时会打印 webPreviewUrl,可交给用户在本地浏览器打开(如 Cursor/VS Code 的 Simple Browser),用于实时观看。该 URL 可能敏感,不应在模拟设备上打开(否则会出现浏览器套浏览器)。无头智能体无显示时,直接返回该 URL 作为交付物。
【限制】
- EAS Simulator 为受限访问功能,仍在逐步开放,并非所有账户可用;不可用时不要调用 simulator:start。
- 使用会计费,受账户定价与限制约束,详见 Expo 定价页。
- simulator:* 为实验性命令,标志和动词可能变化。
- 不适用于本地模拟、商店构建/签名(属于 EAS Build)或物理设备。
- 空闲计时器仅由 agent-device 和 argent 活动重置。
【适用场景】 在 Linux 或云沙箱中运行并调试 Expo 应用;让 AI 智能体在远程模拟器上执行界面操作和截图验证;为无法本地启动模拟器的开发者提供云端可共享的模拟环境。