移动端快速开始
本地跑起 01MVP Expo 应用并连接 Web/API 服务
移动端要连 01MVP 的 Web/API 服务,所以本地开发的顺序是:先启动 Web,再启动 Expo。你可以先用模拟器看界面,等登录、RevenueCat、Deep Link、推送这些原生能力开始出现,再切到 development build 和真机。
开始前确认
这篇只负责把移动端本地跑起来。账号、设备、Apple Developer、Google Play、RevenueCat 和商店资料清单放在 移动应用 入口页,这里不重复。
你会跑起什么
Web/API 服务
vpr @01mvp/web#dev,默认在 http://localhost:7001 提供页面和 /api。
Expo 开发服务器
vpr @01mvp/mobile#dev,负责把 JS bundle 发给模拟器、真机或 web preview。
可安装 App
Development 或 preview build,用来验证 Expo Go 覆盖不了的原生能力。
安装依赖
在仓库根目录执行:
vp install准备移动端环境变量
复制模板文件,再按你的本地地址改值:
cp products/01mvp/apps/mobile/.env.example products/01mvp/apps/mobile/.env.local常用配置:
| 变量 | 默认值 | 用途 |
|---|---|---|
EXPO_PUBLIC_WEB_URL | http://localhost:7001 | Web 站点地址,用于打开网页价格页或登录跳转 |
EXPO_PUBLIC_SERVER_URL | http://localhost:7001/api | App 调用 API、auth、oRPC 的基础地址 |
EXPO_PUBLIC_APP_SCHEME | 01mvp | App deep link scheme |
EXPO_PUBLIC_AUTH_COOKIE_PREFIX | 01mvp-session | Better Auth cookie 前缀 |
EXPO_PUBLIC_REVENUECAT_IOS_API_KEY | 空 | RevenueCat iOS 公钥 |
EXPO_PUBLIC_REVENUECAT_ANDROID_API_KEY | 空 | RevenueCat Android 公钥 |
EXPO_PUBLIC_REVENUECAT_ENTITLEMENT_ID | pro | RevenueCat entitlement 标识 |
EXPO_PUBLIC_* 会打进 App 包。别把数据库密码、支付密钥之类的服务端秘密放这里。
如果你暂时不用内购,RevenueCat key 可以留空。模板会保留付费状态入口,但不会因为没有 key 就崩溃。
启动 Web/API
vpr @01mvp/web#dev默认监听 http://localhost:7001,API 地址是 http://localhost:7001/api。
启动 Expo
另开一个终端:
vpr @01mvp/mobile#dev在 Expo 控制台里选择目标:
i:iOS Simulatora:Android Emulatorw:Web 预览
如果只想确认页面和 API 调用,先用模拟器或 Web 预览就够。等你要验证登录回跳、RevenueCat、图标、启动页、推送、相册或文件选择,再做 development build。
Expo Go 和 development build
Expo Go 适合早期预览页面,但它不是你的真实 App。它不能完整验证所有原生模块,也不能验证你自己的 App 图标、启动页、Bundle ID、部分深链和推送能力。
Development build 可以理解成「你自己的开发版 App」。它安装在手机或模拟器上,原生层属于你的项目,JS 层仍然可以通过 Expo 开发服务器热更新。
| 场景 | 先用什么 |
|---|---|
| 看页面、调普通 API、改文案 | Expo Go / simulator / web preview |
验证 app.json 里的图标、启动页、scheme | Development build |
| 接 RevenueCat、推送、相机、文件、Widget | Development build |
| 给团队或早期用户试用 | Preview build |
| 准备上架商店 | Production build |
真机调试
真机不能访问你电脑上的 localhost。换成设备能访问到的地址:
- 同一局域网内的 Mac IP,例如
http://192.168.1.20:7001/api - Android Emulator 可以用
http://10.0.2.2:7001/api - HTTPS tunnel,例如
https://your-dev-domain.ngrok-free.app/api
改完 .env.local 后重启 Expo 才生效。
如果你用 OAuth 或 magic link,优先用 HTTPS tunnel。很多登录回调、cookie 和浏览器安全策略在纯局域网 HTTP 下表现会和线上不同。
第一次安装开发版 App
当 Expo Go 不够用时,先生成 development build:
vpr @01mvp/mobile#eas:build:development这个脚本等价于在移动端包里执行 eas build --profile development --platform all。首次运行会让你登录 Expo,并按平台准备签名。iOS 真机通常需要付费 Apple Developer 账号;Android 模拟器和设备门槛低一些。
构建完成后,你可以从 EAS 控制台或命令行提示里的链接下载安装。安装后再启动开发服务器:
vpr @01mvp/mobile#dev然后用开发版 App 打开 Expo 里的项目。以后只改 JS、样式、页面文案时,不需要每次重做原生构建;新增原生依赖、修改插件、权限、scheme、图标、启动页时才需要重新 build。
给别人下载试用
团队内测或给少量朋友试用,用 preview build:
vpr @01mvp/mobile#eas:build:previewpreview profile 是 internal distribution。Android 会生成可直接安装的 APK;iOS 走 Ad Hoc 或企业分发,通常要把测试设备登记进 Apple Developer 账号。构建完成后,EAS 会提供下载链接或二维码。
不要把 preview build 当成正式上架。它适合收集反馈,production build 才进入商店提交路径。
验证
先跑类型检查:
vpr @01mvp/mobile#type-check再跑 web bundle 构建烟测:
vpr @01mvp/mobile#build这只是 Web bundle 烟测,不等于 iOS / Android 原生包验证。准备给人下载前,至少再跑一次 preview build,并在真机走完登录、受保护 API、会员状态和核心页面。
卡住时先看这几处
| 问题 | 先检查 |
|---|---|
| App 请求不到 API | EXPO_PUBLIC_SERVER_URL 是否能从当前设备访问 |
| 登录回跳失败 | EXPO_PUBLIC_APP_SCHEME 是否和 app.json 的 expo.scheme 一致 |
| 登录后状态丢失 | EXPO_PUBLIC_AUTH_COOKIE_PREFIX 是否和服务端 cookie prefix 对齐 |
| 付费状态为空 | RevenueCat public key 和 entitlement 是否已配置 |
| 真机能打开但模拟器不行 | URL、平台 profile 和 development build 类型是否混用 |
官方参考
这篇文档有问题?