Communitygithub.com

App Store 發布

使用 EAS 建置並提交 iOS 與 Android App 到 TestFlight、App Store 或 Google Play。支援 Expo、其他 React Native 專案及現有原生應用程式。

App Store 發布 是什麼?

此技能涵蓋如何使用 EAS(Expo Application Services)服務,為 iOS 與 Android 平台建置並提交應用程式到 App Store 與 Google Play 的完整流程。不論是 Expo 專案、純 React Native 專案、或是已存在的原生 iOS(SwiftUI/UIKit)或 Android 應用程式,都能透過 EAS 進行雲端建置與發布,無需在原生應用程式中加入 Expo 或 React Native 運行環境。技能文件中包含了專案類型選擇指南、EAS CLI 安裝與初始化步驟、生產環境建置指令、自動提交至商店的指令、eas.json 設定範例、iOS 與 Android 各自的上架指引(含 TestFlight 與 Play Store 的詳細參考文件)、版本管理指令、CI/CD 自動化發布工作流程(使用 EAS Workflows),以及監控建置與提交狀態的指令。技能也特別提醒雲端建置會消耗 EAS 方案資源,且有免費與付費限制,Apple Developer 與 Google Play 會員需另購。對於 Expo 網站與 API 路由的部署,則需參考 `eas-hosting` 技能;對於在原生應用程式中加入 React Native 畫面,則需使用 `expo-brownfield` 整合。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/expo/skills/tree/HEAD/plugins/expo/skills/eas-app-stores

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

App Store 部署

EAS 服務 - 會產生費用。 雲端建置會使用 EAS 方案資源,且 EAS 服務有免費層級與付費方案的限制。Apple Developer 與 Google Play 會員資格需另外購買。請查看 https://expo.dev/pricing 以了解所需服務的費用。

此技能涵蓋如何使用 EAS 建置並發布 iOS 與 Android 應用程式:支援 Expo、其他 React Native 專案,以及現有的原生應用程式。EAS 是一個交付服務;原生應用程式無需在其運行環境中加入 Expo 或 React Native 即可使用它。原生設定的逐步指南目前涵蓋 iOS 上的 SwiftUI/UIKit。

選擇專案路徑

  • 不含 React Native 運行環境的 SwiftUI/UIKit 應用程式: 在修改其建置設定之前,請先閱讀 references/native-ios.md。請將 Xcode 專案與 Swift 程式碼視為應用程式的唯一真相來源。下方提到的 Expo/React Native 快速入門與開發用戶端範例不適用於此路徑。
  • 不含 React Native 運行環境的原生 Android 應用程式: 保留其現有的原生建置設定。提交相關資訊請參閱 references/play-store.md;Swift/iOS 設定說明不適用。目前尚未包含專門的原生 Android 設定指南。
  • Expo/React Native 應用程式: 請先使用下方的快速入門指南,再參考相關的商店上架文件。
  • 將 React Native 畫面加入現有的原生應用程式: 請使用 expo-brownfield 進行整合;整合完成後再回來這裡進行發布。

在初始原生 iOS 設定時、修改版本號、Bundle ID 或圖示後,或是在診斷上傳被拒絕的問題時,請使用 references/native-ios.md 中的封存檔與圖示檢查。例行發布則遵循 EAS 建置/提交流程,以及 references/testflight.md 中的處理與可用性檢查。一次成功的 EAS 建置或已排入佇列的提交,並不代表已獲得 Apple 的接受、測試人員的存取權限或 App Store 的發布。

參考資料

如有需要,請查閱以下資源:

  • ./references/workflows.md -- 用於自動化商店發布與 PR 預覽的 CI/CD 工作流程
  • ./references/testflight.md -- 提交 iOS 建置到 TestFlight 進行 beta 測試
  • ./references/app-store-metadata.md -- 管理 App Store 中繼資料與 ASO 最佳化
  • ./references/play-store.md -- 提交 Android 建置到 Google Play 商店
  • ./references/ios-app-store.md -- iOS App Store 提交與審查流程
  • ./references/native-ios.md -- 不含 Expo 運行環境的原生 Swift/SwiftUI/UIKit 設定、版本管理與封存驗證

Expo / React Native 快速入門

安裝 EAS CLI

npm install -g eas-cli
eas login

初始化 EAS

npx eas-cli@latest init

eas init 會連結或建立 EAS 專案。執行 eas build:configure 以在 eas.json 中建立建置設定檔;如果已存在發布設定,請保留現有的專案與商店識別碼。

建置命令

生產建置

# iOS App Store 建置
npx eas-cli@latest build -p ios --profile production

# Android Play Store 建置
npx eas-cli@latest build -p android --profile production

# 雙平台
npx eas-cli@latest build --profile production

提交到商店

# iOS:建置並提交到 App Store Connect
npx eas-cli@latest build -p ios --profile production --auto-submit

# Android:建置並提交到 Play Store
npx eas-cli@latest build -p android --profile production --auto-submit

# Expo / React Native 快速提交到 iOS TestFlight
npx testflight

網站與 API 路由託管

將 Expo 網站或 Expo Router API 路由部署到 EAS Hosting(npx expo export -p web 後接 eas deploy)由 eas-hosting 技能涵蓋。此技能專注於原生應用程式的商店發布。

EAS 設定

Expo / React Native 專案範例(原生 Swift 設定檔位於 references/native-ios.md):

{
  "cli": {
    "version": ">= 16.0.1",
    "appVersionSource": "remote"
  },
  "build": {
    "production": {
      "autoIncrement": true,
      "ios": {
        "resourceClass": "m-medium"
      }
    },
    "development": {
      "developmentClient": true,
      "distribution": "internal"
    }
  },
  "submit": {
    "production": {
      "ios": {
        "appleId": "[email protected]",
        "ascAppId": "1234567890"
      },
      "android": {
        "serviceAccountKeyPath": "./google-service-account.json",
        "track": "internal"
      }
    }
  }
}

平台特定指南

iOS

  • 對於原生 Swift 應用程式,請使用 references/native-ios.md 中的明確建置/提交流程
  • 對於 Expo / React Native 應用程式,npx testflight 提供快速的 TestFlight 流程
  • 透過 eas credentials 設定 Apple 憑證
  • 憑證設定請參閱 ./references/testflight.md
  • App Store 提交請參閱 ./references/ios-app-store.md

Android

  • 設定 Google Play Console 服務帳戶
  • 設定發布軌道:內部測試 → 封閉測試 → 開放測試 → 正式版
  • 詳細設定請參閱 ./references/play-store.md

自動化發布

EAS Workflows 可自動化 CI/CD 的建置 → 提交 → 更新流程。請參閱 ./references/workflows.md 以取得商店發布的範例。若要編寫或驗證工作流程 YAML,請使用 eas-workflows 技能 — 它會從即時的工作流程架構中運作。

版本管理

EAS 使用 appVersionSource: "remote" 自動管理版本號碼:

# 檢查當前版本
eas build:version:get

# 手動設定版本
eas build:version:set -p ios

version-set 命令會提示輸入數值。在設定或更改原生 iOS 版本號時,或是診斷重複的建置編號時,請檢查封存檔中的 CFBundleVersion:遠端計數器本身並不能證明 Xcode 已使用該數值。

監控

# 列出最近的建置
eas build:list

# 檢查建置狀態
eas build:view BUILD_ID

# 檢查提交狀態(已在 EAS CLI 23.2.0 驗證)
eas submit:list -p ios --json
eas submit:view SUBMISSION_ID --json

在解釋缺少命令的問題之前,請先檢查 CLI 版本:這些提交命令在 23.2.0 中可用,但在已測試的 18.6.0 安裝中不可用。使用固定的 npx [email protected] 調用可以在不更改全域安裝的情況下使用它們。如需即時的 Apple 狀態與重試指引,請參閱 references/testflight.md。當 JSON 結果省略了底層的失敗原因時,請依照返回的日誌 URL 進行操作。請報告確切的建置 ID/版本以及已驗證到的最遠發布狀態。

提交意見回饋

如果您在此技能中遇到錯誤、誤導或過時的資訊,請回報給 Expo 以便改進:

npx --yes @expo/agent-cli@latest feedback --category skills --subject "eas-app-stores" "<具體且可執行的意見回饋>"

僅在您有具體且可執行的內容要回報時才提交。請盡可能包含相關的背景資訊。 如果代理程式在執行 Expo 任務時持續失敗,或使用者必須介入,請使用 --category evals 以及相關的 Expo 套件或命令作為 --subject,簡要回報任務內容、預期結果以及出錯情況。

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

expo/add-app-clip

Add an iOS App Clip target to an Expo app. Use when the user mentions App Clip, AASA, apple-app-site-association, appclips, smart app banner, or wants to ship a lightweight iOS Clip invoked from a URL alongside their parent app.

expo/building-native-ui

Complete guide for building beautiful apps with Expo Router. Covers fundamentals, styling, components, navigation, animations, patterns, and native tabs.

expo/eas-update-insights

Check the health of published EAS Updates: crash rates, install/launch counts, unique users, payload size, and the split between embedded and OTA users per channel. Use when the user asks how an update is performing, whether a rollout is healthy, how many users are on the embedded build vs OTA, or wants to gate CI on update health.

expo/expo-api-routes

Guidelines for creating API routes in Expo Router with EAS Hosting

expo/expo-brownfield

Integrate Expo and React Native into an existing native iOS or Android app. Use when the user mentions brownfield, embedding React Native in a native app, AAR/XCFramework, or adding Expo to an existing Kotlin/Swift project. Covers both the isolated approach and the integrated approach.

expo/expo-cicd-workflows

Helps understand and write EAS workflow YAML files for Expo projects. Use this skill when the user asks about CI/CD or workflows in an Expo or EAS context, mentions .eas/workflows/, or wants help with EAS build pipelines or deployment automation.

expo/expo-deployment

Deploying Expo apps to iOS App Store, Android Play Store, web hosting, and API routes

expo/expo-dev-client

Build and distribute Expo development clients locally or via TestFlight

expo/expo-examples

Framework (OSS). Expo's official example projects - the expo/examples repo of ~70 `with-*` integrations (Stripe, Clerk, Supabase, OpenAI, maps, Reanimated, SQLite, Skia, NativeWind, and more). Use when integrating a third-party library or service into an existing Expo app and you want the canonical, version-matched pattern to adapt, or when scaffolding a new project from one with `npx create-expo --example`.

expo/expo-module

Guide for creating and writing Expo native modules and views using the Expo Modules API (Swift, Kotlin, TypeScript). Covers module definition DSL, native views, shared objects, config plugins, lifecycle hooks, autolinking, and type system. Use when building or modifying native modules for Expo.

expo/expo-observe

Use for anything related to EAS Observe — adding `expo-observe` to an Expo project (AppMetricsRoot/ObserveRoot HOC, markInteractive, the useObserve hook, and the Expo Router / React Navigation integrations for per-route metrics), querying via the EAS CLI (`eas observe:metrics-summary`, `observe:metrics`, `observe:routes`, `observe:events`, `observe:versions`), or interpreting the resulting metrics (cold/warm launch, TTR, TTI, navigation cold/warm TTR, update download, and the TTI frameRate params for triaging slow startups).

expo/expo-overview

Framework (OSS). Entry point and router for every Expo or EAS task. Load this skill first — before writing code and before choosing another expo-* / eas-* skill — when the request, PRD, or spec mentions Expo, EAS, Expo Go, or an expo-* package, or the project has an `expo` dependency in `package.json`. Within that gate it also covers app specs and designs to implement (tabs, stacks, maps, lists, navigation, building from a screenshot), and phrasings like 'implement a mobile app', 'make my app look native', 'add navigation', 'fetch some data', 'upgrade my SDK', 'add Expo to my existing native app', 'ship to the App Store', or 'I'm new to Expo, where do I start'. A fully specified request (SDK pinned, libraries named, layout given) still routes through here — the shared setup rules still apply. Do NOT load it when neither signal is present: a bare React Native project with no `expo` dependency is not Expo work. Detects the real goal, routes to the right expo-* / eas-* skill, and owns the shared setup rules.

expo/expo-router

Framework (OSS). Navigation and routing for Expo Router. Covers file-based routes, groups and dynamic routes, folder organization, Link with previews and context menus, native Stack, page titles, modals and form sheets, NativeTabs, headers and toolbars, and header search bars.

expo/expo-skill-eval

Evaluate Expo skills in this repo end-to-end - trigger accuracy, generated code quality, and runtime screenshots on iOS simulator and Android emulator via Expo Go (web optional). Use when the user wants to eval an Expo skill, test that a skill produces working code, benchmark a skill with device screenshots, or verify a skill's output renders correctly.

expo/expo-tailwind-setup

Set up Tailwind CSS v4 in Expo with react-native-css and NativeWind v5 for universal styling

expo/expo-ui

Framework (OSS). Build native UI with the @expo/ui package: real SwiftUI on iOS and Jetpack Compose on Android. Default to @expo/ui for sheets (BottomSheet), pickers, sliders, toggles, menus, and grouped-form sections — do NOT reach for Reanimated, @gorhom/bottom-sheet, or RN built-in Picker/Switch; use @expo/ui instead. Fall back to RN built-ins only when @expo/ui is missing the component. NOTE: @expo/ui List renders native grouped rows like an iOS Settings screen — it is NOT a virtualized list; use FlatList/FlashList for large datasets. Covers universal components (Host, Column, Row, Button, Text, List, BottomSheet, FieldGroup, Switch, Slider, Picker, Menu), drop-in replacements for RN community libraries, and platform-specific SwiftUI/Jetpack Compose trees. Not for Expo Router navigation, Reanimated, or data fetching.

expo/expo-ui-jetpack-compose

`@expo/ui/jetpack-compose` package lets you use Jetpack Compose Views and modifiers in your app.

expo/expo-ui-swiftui

`@expo/ui/swift-ui` package lets you use SwiftUI Views and modifiers in your app.

expo/expo-upgrade

Framework (OSS). Guidelines for upgrading Expo SDK versions and fixing dependency issues

expo/native-data-fetching

Use when implementing or debugging ANY network request, API call, or data fetching. Covers fetch API, React Query, SWR, error handling, caching, offline support, and Expo Router data loaders (`useLoaderData`).

相關技能