Codex Phone Lab 是做什么的?
使用此技能将产品提示转换为 React Native/Expo 应用,用户可以通过 Expo Go 在物理手机上打开。优先考虑快速的“提示 → 应用 → 手机”循环,然后再考虑模拟器、原生构建、TestFlight 或应用商店分发。
运行模式
除非用户明确需要原生 iOS/Android 模块,否则优先选择此路径:
- 使用
scripts/doctor.sh检查本地先决条件。 - 如果没有移动端项目,使用
scripts/new-expo-app.sh <app-name>创建一个 Expo 应用。默认使用expo-template-default@sdk-54,以确保在此工作流中使用的当前 Expo Go 版本中打开。 - 快速构建第一个可用的屏幕;不要创建登录页面。
- 使用
scripts/start-phone-preview.sh [lan|tunnel|local]启动手机预览。 - 在编辑时保持开发服务器运行。使用 Metro/Expo 日志修复运行时错误。
- 告诉用户安装 Expo Go,扫描二维码,并保持手机与 LAN 模式在同一个网络中。
- 以小的可见变化迭代:编辑、观察日志、重新加载、修复。
项目检测
在创建新应用之前,检查当前目录:
- 包含
expo依赖的package.json:视为现有 Expo 应用。 - 包含
app.json、app.config.*、app/或expo-router:视为 Expo 应用,即使需要安装依赖。 - 包含
ios/和android/但没有 Expo:仅询问用户是否需要 Expo 迁移;否则保留现有栈。 - 空目录:使用 SDK 54 模板创建一个新的 Expo 应用。
手机预览
对于首次“惊叹”演示,使用 Expo Go,因为它避免了 App Store/TestFlight 的摩擦。
默认使用 SDK 54。当前工作流中的 Expo Go 拒绝 SDK 55 项目,提示“项目与此版本的 Expo Go 不兼容”。仅当已知用户的 Expo Go 支持更新的 SDK 时,才覆盖设置:
CODEX_PHONE_LAB_EXPO_TEMPLATE=expo-template-default@sdk-55 <skill-dir>/scripts/new-expo-app.sh my-app
运行:
<skill-dir>/scripts/start-phone-preview.sh lan
当手机不在同一 Wi-Fi 或 LAN 模式无法连接时,使用 tunnel。隧道模式可能要求 Expo 安装隧道依赖。
用户工作流:
- 在手机上安装 Expo Go。
- 运行预览命令。
- 从 Expo Go 或手机相机扫描二维码。
- 保持终端打开;应用编辑会实时刷新。
应用构建指导
使第一个屏幕感觉像一个真正的应用:
- 使用安全区域和移动端尺寸布局。
- 构建实际交互:表单、列表、导航、开关、计时器、模拟数据或状态。
- 当工作流程暗示时,包含加载、空状态和错误状态。
- 保持排版紧凑以适应移动端。
- 避免网页登录页面模式、过大的英雄区域、嵌套卡片和解释性应用内文字。
- 当模板已包含 Expo Router 时,优先使用它来构建多屏幕应用。
分发决策
选择与用户目标最匹配的最轻量路径:
- 在用户手机上快速原型:Expo Go 二维码。
- 包含自定义原生模块的应用:Expo 开发构建。
- iPhone 上的测试用户:通过 EAS/Apple Developer 账户的 TestFlight。
- 公开发布:App Store / Play Store 提交。
不要暗示 Expo Go 是生产环境分发。它只是实时开发预览。
参考
在决定使用 Expo Go、开发构建、TestFlight 还是应用商店发布时,阅读 references/expo-phone-workflow.md。