> ## 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-tw/docs/mobile/local-setup.md)
