SuperAPI AI 工具集

mobile-eas-dev

部署与运维

查看项目

更新于 10-30 16:30

技能介绍

用途:在 Linux 云沙箱中运行、启动、打开和展示 apps/mobile 应用,使用 EAS 云端 iOS 模拟器,不需要本地 Xcode 或模拟器。由于云沙箱没有 xcrun、simctl,统一通过 apps/mobile/scripts/eas-dev.sh 一条命令启动真实的 dev-client 应用,并连接当前沙箱的 Metro 与 API。

主要能力:脚本会复用当前检出的运行会话;若没有,则安装原生指纹与当前检出匹配的现成模拟器构建并启动会话(约两分钟)。只有不存在匹配构建时(首次或原生改动后)才执行构建(约十五分钟)。支持 --reload 重新从 Metro 加载应用而不启动新内容;支持 --new 停止当前会话并启动全新会话,避免手动使用 eas simulator 切换。脚本会为会话打上 workspace id 标签,桌面 Mobile 面板可据此列出并观看模拟器;同时输出可在浏览器打开的 expo.dev/simulator-preview/... URL。

使用方式:运行 apps/mobile/scripts/eas-dev.sh;使用 --reload 重新加载,使用 --new 切换会话。当脚本自行启动 Metro 时,每次重新启动隧道会等待 Metro 向应用提供 bundle,否则以非零状态退出并给出 Metro 与 egress 日志路径。dev-client URL 带有 disableAutoLaunch=1&disableFab=1,启动时不弹出开发菜单、不显示遮挡工具栏的齿轮按钮;每次会话为全新安装,因此每次加载都会带上这些参数。日志与 PID 文件位于检出目录的 .tmp/eas-dev/,不同检出之间互不干扰。

驱动模拟器:加载会话后从 apps/mobile 目录执行 agent-device 命令,例如 snapshot -i 查看屏幕与 @refs、press 按标签操作并等待、fill 填写、screenshot 截图。agent-device 按工作目录保持单一会话,因此应始终在 apps/mobile 中运行。命令需要 agent-device 已全局安装(npm install -g agent-device)。通过 eas simulator:exec npx agent-device 执行每条命令约需 25 秒。全新安装时开发菜单会遮挡首屏,需依次点击 Continue 和 Close。脚本启动的会话已关闭 iOS 的滑行输入键盘引导。SwiftUI 菜单项(@expo/ui Menu)不会出现在 agent-device snapshot 中,需打开菜单后截图并按坐标点击(agent-device press <x> <y>)。源码修改通过 fast refresh 约两秒到达应用。

限制与前提:脚本会转发 relay 和 realtime 端口,但不启动这两个服务,因此主机与工作区在线状态显示为不可达,对认证与界面检查没有影响。会话空闲 15 分钟后自动停止(MOBILE_EAS_IDLE_MINUTES),也可在 apps/mobile 中执行 eas simulator:stop 提前停止。Expo 账户同时最多运行两个构建,构建可能排在其他团队之后。需要 EXPO_TOKEN 以及本仓库的 .env(.superset/setup.sh 或 .superset/setup.cloud.sh)。当 bun --version 与 .bun-version 不一致时,指纹查找会拒绝运行,因为 bun install 产生的依赖指纹没有任何构建与之匹配,会触发约十五分钟且最终失败的 EAS 构建;在版本锁定变更前创建的云工作区需要新建。