EasyStarter logoEasyStarter

上架 App

使用 EAS 构建并提交 iOS 和 Android App 到应用商店

上架 App

EasyStarter 移动端使用 EAS(Expo Application Services) 进行云端构建和应用商店提交。EAS 负责签名、打包和自动化提交流程,无需在本地配置复杂的证书环境。

上架前,请确认 Server 已部署完成,且 RevenueCat 和认证回调已正确配置。

前置准备

平台需要
iOSApple Developer 账号($99/年)、App Store Connect 中已创建 App
AndroidGoogle Play Console 账号($25 一次性费用)、已创建应用
通用EAS CLI 已安装,并已登录 Expo 账号
npm install -g eas-cli
eas login

更新 eas.json 配置

在构建之前,将 production profile 的环境变量更新为正式地址:

apps/native/eas.json
{
  "build": {
    "production": {
      "autoIncrement": true,
      "channel": "production",
      "environment": "production",
      "env": {
        "EXPO_PUBLIC_SERVER_API_URL": "https://your-server.workers.dev",  // Server 正式地址
        "EXPO_PUBLIC_WEB_APP_URL": "https://your-app.com",                // Web 正式地址
        "EXPO_PUBLIC_REVENUECAT_IOS_API_KEY": "appl_xxxxxxxxxxxxxxxx",
        "EXPO_PUBLIC_REVENUECAT_ANDROID_API_KEY": "goog_xxxxxxxxxxxxxxxx",
        "EXPO_PUBLIC_REVENUECAT_ENTITLEMENT_ID": "pro"
      }
    }
  }
}

更新 app.json 标识符

确认 apps/native/app.json 中的 Bundle Identifier 和包名与应用商店账号一致:

apps/native/app.json
{
  "expo": {
    "name": "Your App Name",
    "slug": "your-app-slug",
    "version": "1.0.0",
    "ios": {
      "bundleIdentifier": "com.yourcompany.yourapp",  // App Store Connect 中的 Bundle ID
      "appleTeamId": "YOUR_TEAM_ID"                   // 在 Apple Developer 账号中查看
    },
    "android": {
      "package": "com.yourcompany.yourapp"            // Google Play 中的包名
    },
    "extra": {
      "eas": {
        "projectId": "your-eas-project-id"            // 运行 eas init 后自动生成
      }
    }
  }
}

如果还没有初始化 EAS 项目:

cd apps/native
eas init

构建 iOS 生产包

pnpm -F native eas:build:ios:production

等价于 eas build --platform ios --profile production,在 EAS 云端构建 .ipa 文件。

首次构建时,EAS 会引导你:

  • 自动创建或复用 Apple Distribution Certificate
  • 自动创建或复用 Provisioning Profile

构建完成后,可在 Expo Dashboard 中查看构建状态和下载产物。

如果需要本地构建(需要 macOS + Xcode),使用 eas:build:ios:production:local

构建 Android 生产包

pnpm -F native eas:build:android:production

等价于 eas build --platform android --profile production,在 EAS 云端构建 .aab 文件(Google Play 推荐格式)。

首次构建时,EAS 会提示你上传或自动生成 Android Keystore。请妥善保管 Keystore 文件,更新 App 时必须使用相同的 Keystore 签名。

提交到 App Store

pnpm -F native eas:submit:ios:production

等价于 eas submit --platform ios --profile production

EAS 会自动将构建产物上传到 App Store Connect。上传成功后:

  1. 登录 App Store Connect
  2. 进入你的 App → TestFlight 验证构建无误
  3. 切换到 App Store 标签,创建一个新版本
  4. 填写版本说明、截图、关键词等元数据
  5. 提交审核(通常 1–3 个工作日)

提交到 Google Play

pnpm -F native eas:submit:android:production

等价于 eas submit --platform android --profile production

上传成功后:

  1. 登录 Google Play Console
  2. 进入你的 App → 发布 → 正式版
  3. 查看新上传的构建,填写版本说明
  4. 提交审核(通常数小时到数天)

OTA 更新(无需重新提交审核)

EasyStarter 集成了 Expo Updates,支持向已安装的 App 推送 JS 层更新,无需重新走应用商店审核流程。

适合修复 Bug、调整 UI 或更新文案等不涉及原生代码的变更:

# 推送到 production 渠道
pnpm -F native eas:update:production

OTA 更新只能更新 JavaScript/TypeScript 代码和静态资源,不能更新原生模块(如新增 Expo 插件、修改 app.json 的原生字段等)。原生层变更仍需重新走完整构建和提交流程。

版本管理

eas.json"autoIncrement": true 会在每次构建时自动递增 Build Number(iOS)和 Version Code(Android),无需手动修改 app.json

字段说明
versionapp.json对用户可见的版本号,如 1.2.0,需手动更新
Build Number / Version Code商店内部版本号,autoIncrement 自动管理
runtimeVersion控制 OTA 兼容性,默认策略为 appVersion