导航菜单

iOS 构建与 TestFlight 发布教程

本教程适用于从 SwiftUI 迁移到 Expo 的开发者,详细介绍如何构建 iOS 版本并发布到 TestFlight。

目录

  1. 准备工作
  2. 配置项目
  3. 使用 EAS Build 构建
  4. 上传到 App Store Connect
  5. 提交到 TestFlight
  6. 常见问题

准备工作

1. Apple Developer 账号

确保你已经拥有:

  • ✅ Apple Developer Program 会员资格(每年 $99)
  • ✅ App Store Connect 访问权限
  • ✅ 用于签名的证书和配置文件

2. 安装必要工具

# 安装 EAS CLI
npm install -g eas-cli

# 或使用 pnpm
pnpm add -g eas-cli

# 验证安装
eas --version

3. 登录 Expo 账号

# 创建 Expo 账号(如果还没有)
# 访问 https://expo.dev 注册

# 登录
eas login

配置项目

1. 更新 app.json 配置

app.json 中添加 iOS 发布相关配置:

{
  "expo": {
    "name": "Kuaiyizhi-Kids",
    "slug": "kuaiyizhi-kids",
    "version": "1.0.0",
    "orientation": "portrait",
    "icon": "./assets/images/icon.png",
    "scheme": "kuaiyizhi-kids",
    "userInterfaceStyle": "automatic",
    "newArchEnabled": true,
    "ios": {
      "supportsTablet": true,
      "bundleIdentifier": "com.yourcompany.kuaiyizhi-kids",
      "buildNumber": "1",
      "infoPlist": {
        "NSAppTransportSecurity": {
          "NSAllowsArbitraryLoads": true
        }
      },
      "config": {
        "usesNonExemptEncryption": false
      }
    },
    "android": {
      // ... 现有配置
    },
    "web": {
      // ... 现有配置
    },
    "plugins": [
      // ... 现有插件
    ],
    "extra": {
      "eas": {
        "projectId": "your-project-id"
      }
    }
  }
}

重要配置说明:

  • bundleIdentifier: 必须唯一,格式为 com.公司名.应用名
  • buildNumber: 每次提交到 App Store 需要递增
  • usesNonExemptEncryption: 如果应用不使用加密,设置为 false 可简化审核流程

2. 创建 EAS 配置文件

在项目根目录创建 eas.json

{
  "cli": {
    "version": ">= 13.2.0"
  },
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal",
      "ios": {
        "simulator": true
      }
    },
    "preview": {
      "distribution": "internal",
      "ios": {
        "simulator": false
      }
    },
    "production": {
      "ios": {
        "simulator": false
      }
    }
  },
  "submit": {
    "production": {}
  }
}

3. 初始化 EAS 项目

# 在项目根目录运行
eas init

# 选择你的 Expo 账号
# 这会创建 EAS 项目并生成 projectId,并自动更新 app.json 中的 projectId

使用 EAS Build 构建

EAS Build 是 Expo 提供的云端构建服务,无需本地 Xcode 环境即可构建 iOS 应用。

步骤 1: 配置构建凭据

# 配置 iOS 构建凭据
eas build:configure --platform ios

# 选择凭证管理方式:
# 1. Let EAS handle credentials (推荐) - EAS 自动管理
# 2. Set up credentials manually - 手动设置(适合有 Xcode 经验的开发者)

推荐选择选项 1,让 EAS 自动管理证书和配置文件。

步骤 2: 构建 iOS 应用

# 构建用于 TestFlight 的版本
eas build --platform ios --profile production

# 或者构建预览版本
eas build --platform ios --profile preview

构建过程:

  • 📤 上传代码到 Expo 服务器
  • 🔨 在云端构建应用
  • ⏱️ 通常需要 10-20 分钟
  • 📱 构建完成后会生成 .ipa 文件

步骤 3: 下载构建文件

构建完成后,你会得到下载链接。可以通过以下方式获取:

# 查看构建列表
eas build:list --platform ios

# 下载构建文件
eas build:download [build-id]

步骤 4: 上传到 App Store Connect

# 使用 EAS Submit 自动上传
eas submit --platform ios --latest

# 或者指定构建 ID
eas submit --platform ios --id [build-id]

上传到 App Store Connect

使用 EAS Submit 可以自动将构建好的应用上传到 App Store Connect:

# 上传最新的构建
eas submit --platform ios --latest

# 或者指定构建 ID
eas submit --platform ios --id [build-id]

上传完成后,你可以在 App Store Connect 中查看构建状态。

提交到 TestFlight

步骤 1: 访问 App Store Connect

  1. 登录 App Store Connect
  2. 选择你的应用
  3. 进入 TestFlight 标签页

步骤 2: 等待处理完成

上传后,构建需要经过处理:

  • ⏳ 处理中:通常需要 10-30 分钟
  • ✅ 处理完成:可以开始测试

步骤 3: 配置测试信息(首次发布)

如果是首次提交:

  1. 填写应用信息

    • 应用名称
    • 副标题
    • 描述
    • 关键词
    • 支持 URL
    • 营销 URL(可选)
    • 隐私政策 URL
  2. 上传截图

    • 至少需要 iPhone 6.7 英寸屏幕截图
    • 可以上传多种设备尺寸的截图
  3. 选择分类

    • 主要分类和次要分类

步骤 4: 添加测试用户

  1. 在 TestFlight 页面,点击 内部测试外部测试

  2. 添加测试用户:

    • 内部测试:最多 100 人(团队成员)
    • 外部测试:最多 10,000 人(需要 Beta App Review)
  3. 发送测试邀请:

    • 测试用户会收到邮件邀请
    • 他们需要安装 TestFlight 应用
    • 接受邀请后即可下载测试版本

步骤 5: 选择构建版本

  1. 在测试组中,点击 ”+” 添加构建版本
  2. 选择已处理完成的构建
  3. 填写测试信息(可选)
  4. 保存

常见问题

Q1: Bundle Identifier 冲突

问题bundleIdentifier 已被使用

解决

  • 更改 app.json 中的 bundleIdentifier 为唯一值
  • 格式:com.公司名.应用名(例如:com.kuaiyizhi.kids

Q2: 证书和配置文件问题

问题:签名失败或证书过期

解决

  • 运行 eas build:configure --platform ios 重新配置
  • EAS 会自动管理证书和配置文件,通常会自动更新

Q3: 构建失败

问题:EAS Build 失败

解决

  1. 查看构建日志找出错误原因
  2. 检查 app.json 配置是否正确
  3. 确保所有依赖都兼容 Expo SDK 54
  4. 检查 eas.json 配置

Q4: 上传后无法在 TestFlight 中看到

问题:上传成功但 TestFlight 中看不到构建

解决

  1. 等待处理完成(通常 10-30 分钟)
  2. 检查是否选择了正确的构建版本
  3. 确保 Bundle Identifier 与 App Store Connect 中的应用一致

Q5: 版本号问题

问题VersionBuild Number 已存在

解决

  • app.json 中递增 version(例如:1.0.0 → 1.0.1)
  • app.jsonios.buildNumber 中递增构建号(例如:1 → 2)

Q6: 加密导出合规性

问题:上传时提示需要加密导出合规性信息

解决

  • app.jsonios.config 中添加:

    "config": {
      "usesNonExemptEncryption": false
    }
    
  • 如果应用确实使用加密,需要在 App Store Connect 中填写相关信息

Q7: 网络权限问题

问题:iOS 应用无法访问网络

解决

  • app.jsonios.infoPlist 中配置:

    "infoPlist": {
      "NSAppTransportSecurity": {
        "NSAllowsArbitraryLoads": true
      }
    }
    

快速检查清单

在提交到 TestFlight 之前,确保:

  • app.json 中配置了正确的 bundleIdentifier
  • app.json 中配置了正确的 versionbuildNumber
  • 已创建或初始化 EAS 项目(如果使用 EAS Build)
  • 已配置构建凭据
  • 构建成功完成
  • 构建已上传到 App Store Connect
  • 构建已在 TestFlight 中处理完成
  • 已添加测试用户
  • 测试用户已收到邀请

推荐工作流

开发 → 测试 → 发布流程

  1. 开发阶段

    pnpm start
    # 在模拟器或真机上测试
    
  2. 构建预览版本

    eas build --platform ios --profile preview
    
  3. 内部测试(TestFlight)

    eas build --platform ios --profile production
    eas submit --platform ios --latest
    
  4. 发布到 App Store

    • 在 App Store Connect 中提交审核
    • 等待审核通过
    • 发布

有用的命令参考

# EAS Build
eas build:list                    # 查看构建列表
eas build:configure               # 配置构建
eas build --platform ios          # 构建 iOS
eas build:download [id]           # 下载构建文件

# EAS Submit
eas submit --platform ios --latest # 上传最新构建

# 项目配置
eas init                          # 初始化 EAS 项目
eas update:configure              # 更新配置

相关资源

注意事项

  1. 版本号管理:每次提交到 App Store Connect 都需要递增 buildNumber
  2. 证书有效期:证书通常有效期为 1 年,EAS 会自动管理更新
  3. 审核时间:TestFlight 外部测试需要 Beta App Review,通常需要 24-48 小时
  4. 构建配额:EAS Build 免费账户有构建次数限制,付费账户有更多配额
  5. 构建时间:云端构建通常需要 10-20 分钟,取决于项目大小

祝你发布顺利! 🚀

如有问题,可以查看 Expo 社区论坛 或相关文档。

搜索