用途
本技能用于使用 EAS 构建并发布 iOS 和 Android 应用,目标渠道包括 TestFlight、App Store 和 Google Play。它支持 Expo 及其他 React Native 项目,也支持现有原生应用。EAS 是一项交付服务,原生应用无需在运行时引入 Expo 或 React Native 即可使用。原生设置指南目前覆盖 iOS 上的 SwiftUI/UIKit。
费用说明
EAS 为付费服务,会产生费用。云构建使用 EAS 套餐资源,EAS 服务有免费额度和付费套餐限制。Apple Developer 与 Google Play 会员资格需单独购买。具体服务请查看 https://expo.dev/pricing。
选择项目路径
- 无 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 build
npx eas-cli@latest build -p ios --profile production
# Android Play Store build
npx eas-cli@latest build -p android --profile production
# Both platforms
npx eas-cli@latest build --profile production
提交到商店:
# iOS: Build and submit to App Store Connect
npx eas-cli@latest build -p ios --profile production --auto-submit
# Android: Build and submit to Play Store
npx eas-cli@latest build -p android --profile production --auto-submit
# Expo / React Native shortcut for iOS TestFlight
npx testflight
Web 与 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": "your@email.com",
"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 服务账号
- 配置轨道:internal → closed → open → production
- 详细设置见 ./references/play-store.md
自动化发布
EAS Workflows 为 CI/CD 自动化构建 → 提交 → 更新流水线。商店发布示例见 ./references/workflows.md。要编写或校验工作流 YAML,请使用 eas-workflows 技能——它基于实时工作流 schema 工作。
版本管理
EAS 通过 appVersionSource: "remote" 自动管理版本号:
# Check current versions
eas build:version:get
# Manually set version
eas build:version:set -p ios
version-set 命令会提示输入值。在设置或更改原生 iOS 版本管理,或诊断重复构建号时,检查归档的 CFBundleVersion:仅凭远程计数器不能证明 Xcode 使用了它。
监控
# List recent builds
eas build:list
# Check build status
eas build:view BUILD_ID
# Inspect submissions (verified with 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 eas-cli@23.2.0 调用可在不更改全局安装的情况下使用它们。实时 Apple 状态和重试指引见 references/testflight.md。当 JSON 结果未包含底层失败原因时,请遵循返回的日志 URL。报告确切的构建 ID/版本以及已验证到的最远发布状态。
提交反馈
如果遇到错误、误导性或过时信息,请报告以便 Expo 改进:
npx --yes submit-expo-feedback@latest --category skills --subject "eas-app-stores" "<actionable feedback>"
仅在确有具体且可操作的内容时提交。尽可能包含相关上下文。如果 AI 代理反复失败或用户不得不接管 Expo 任务,请加载 expo-skill-feedback 技能并遵循其 eval-candidate 流程,而不是复用上述命令。