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-tw/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