> ## Documentation Index
> Fetch the complete documentation index at: https://supastack.dev/llms.txt
> Use this file to discover all available pages before exploring further.
> For the full documentation corpus in one file, fetch: https://supastack.dev/llms-full.txt

# 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 是您自己可安装的应用——当购买或生物识别锁之类的原生模块必须运行时就需要它。

- [Expo](https://expo.dev)
- [Expo Router](https://docs.expo.dev/router/introduction/)
- [React Native](https://reactnative.dev)


## TypeScript

所有应用代码都是 TypeScript，并且该包附带严格的类型检查。无需设备或运行中的后端即可检查每个文件。

- [TypeScript](https://www.typescriptlang.org)


## Better Auth Expo + 安全存储

登录通过 Better Auth Expo 客户端经系统浏览器完成：应用打开后端的认证页面，后端再通过应用的 deep-link scheme 返回，会话令牌保存在 `expo-secure-store`——iOS 的 Keychain 和 Android 的 Keystore——绝不进入普通存储或打包配置。

同一组模块还覆盖通行密钥（passkey）、通过 `expo-local-authentication` 实现的可选生物识别应用锁，以及会清除按工作区隔离的离线缓存的登出。

- [Better Auth](https://better-auth.com)
- [Expo SecureStore](https://docs.expo.dev/versions/latest/sdk/securestore/)


## RevenueCat 购买

`react-native-purchases` 把 StoreKit 和 Play Billing 接入套件的权益同步：应用发起商店购买，后端通过 RevenueCat webhook 验证，由服务器决定该工作区可使用什么。

第一次预览中购买处于关闭状态（`EXPO_PUBLIC_MOBILE_PURCHASES_PROVIDER=off`）。真实的购买与恢复测试需要 EAS 开发构建，因为 Expo Go 无法运行原生购买模块。

- [RevenueCat](https://www.revenuecat.com/docs)


## EAS Build + Submit

`eas.json` 附带三个配置：`development` 为 iOS 模拟器构建 dev client，`preview` 为测试者构建内部 Android APK，`production` 构建商店二进制文件，版本号自动递增并包含 Play 内部轨道提交步骤。

构建在 Expo 云端运行，因此您不需要本地 Xcode 或 Android Studio 来产出二进制文件——只有在您自己的计算机上运行模拟器时才需要。

- [EAS Build](https://docs.expo.dev/eas/)


## 共享包

`@supastack/ui-native` 承载跨平台视图模型——`createEntitlementCard` 把服务器的权益状态转换为统一的卡片契约——`@supastack/design-tokens` 承载主题值。Mobile checkout 中只附带这两个共享包；服务器包随 Web 后端存放。


## 验证工具

确定性的 Vitest 套件覆盖会话存储、deep link、聊天流式传输与取消、权益、购买、离线缓存和通知路由——无需设备即可在您的计算机上运行。应用锁、推送送达和商店购买等仅原生行为则在 EAS 开发构建中验证。

```
corepack pnpm --filter @supastack/mobile test
corepack pnpm --filter @supastack/mobile typecheck
```


## 下一篇

[运行移动应用](https://supastack.dev/zh/docs/mobile/local-setup.md)
