For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /zh/docs/mobile/tech-stack.md (or send Accept: text/markdown).
Mobile 技术栈
Expo 应用内部的技术以及各自的角色。
开始之前
Mobile 应用是一个精简的原生端:下面列出的每个库都已在 apps/mobile/package.json 中锁定,本页内容均不需要单独安装。本页解释每个部分的作用,便于理解后面的指南。
后端在 Web 存储库中保留自己的技术栈——Next.js、Postgres 和各提供商适配器。应用通过 EXPO_PUBLIC_API_URL 访问后端,而不是内嵌其中任何部分,这正是仅含 Mobile 的 checkout 保持精简的原因。
Expo + React Native
Expo 是运行、打包和构建应用的工具链;React Native 渲染真正的原生界面元素,而不是 webview。Expo Router 提供基于文件的路由:apps/mobile/app/ 下的每个文件都会变成一个界面,已登录的界面栈集中在 app/(app)/ 下。
Expo Go 在您的手机上打开共享的开发预览,而 development build 是您自己可安装的应用——当购买或生物识别锁之类的原生模块必须运行时就需要它。
TypeScript
所有应用代码都是 TypeScript,并且该包附带严格的类型检查。无需设备或运行中的后端即可检查每个文件。
Better Auth Expo + 安全存储
登录通过 Better Auth Expo 客户端经系统浏览器完成:应用打开后端的认证页面,后端再通过应用的 deep-link scheme 返回,会话令牌保存在 expo-secure-store——iOS 的 Keychain 和 Android 的 Keystore——绝不进入普通存储或打包配置。
同一组模块还覆盖通行密钥(passkey)、通过 expo-local-authentication 实现的可选生物识别应用锁,以及会清除按工作区隔离的离线缓存的登出。
RevenueCat 购买
react-native-purchases 把 StoreKit 和 Play Billing 接入套件的权益同步:应用发起商店购买,后端通过 RevenueCat webhook 验证,由服务器决定该工作区可使用什么。
第一次预览中购买处于关闭状态(EXPO_PUBLIC_MOBILE_PURCHASES_PROVIDER=off)。真实的购买与恢复测试需要 EAS 开发构建,因为 Expo Go 无法运行原生购买模块。
EAS Build + Submit
eas.json 附带三个配置:development 为 iOS 模拟器构建 dev client,preview 为测试者构建内部 Android APK,production 构建商店二进制文件,版本号自动递增并包含 Play 内部轨道提交步骤。
构建在 Expo 云端运行,因此您不需要本地 Xcode 或 Android Studio 来产出二进制文件——只有在您自己的计算机上运行模拟器时才需要。
验证工具
确定性的 Vitest 套件覆盖会话存储、deep link、聊天流式传输与取消、权益、购买、离线缓存和通知路由——无需设备即可在您的计算机上运行。应用锁、推送送达和商店购买等仅原生行为则在 EAS 开发构建中验证。
corepack pnpm --filter @supastack/mobile test
corepack pnpm --filter @supastack/mobile typecheck