iOS 构建与 TestFlight 发布教程
本教程适用于从 SwiftUI 迁移到 Expo 的开发者,详细介绍如何构建 iOS 版本并发布到 TestFlight。
目录
准备工作
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
- 登录 App Store Connect
- 选择你的应用
- 进入 TestFlight 标签页
步骤 2: 等待处理完成
上传后,构建需要经过处理:
- ⏳ 处理中:通常需要 10-30 分钟
- ✅ 处理完成:可以开始测试
步骤 3: 配置测试信息(首次发布)
如果是首次提交:
填写应用信息:
- 应用名称
- 副标题
- 描述
- 关键词
- 支持 URL
- 营销 URL(可选)
- 隐私政策 URL
上传截图:
- 至少需要 iPhone 6.7 英寸屏幕截图
- 可以上传多种设备尺寸的截图
选择分类:
- 主要分类和次要分类
步骤 4: 添加测试用户
在 TestFlight 页面,点击 内部测试 或 外部测试
添加测试用户:
- 内部测试:最多 100 人(团队成员)
- 外部测试:最多 10,000 人(需要 Beta App Review)
发送测试邀请:
- 测试用户会收到邮件邀请
- 他们需要安装 TestFlight 应用
- 接受邀请后即可下载测试版本
步骤 5: 选择构建版本
- 在测试组中,点击 ”+” 添加构建版本
- 选择已处理完成的构建
- 填写测试信息(可选)
- 保存
常见问题
Q1: Bundle Identifier 冲突
问题:bundleIdentifier 已被使用
解决:
- 更改
app.json中的bundleIdentifier为唯一值 - 格式:
com.公司名.应用名(例如:com.kuaiyizhi.kids)
Q2: 证书和配置文件问题
问题:签名失败或证书过期
解决:
- 运行
eas build:configure --platform ios重新配置 - EAS 会自动管理证书和配置文件,通常会自动更新
Q3: 构建失败
问题:EAS Build 失败
解决:
- 查看构建日志找出错误原因
- 检查
app.json配置是否正确 - 确保所有依赖都兼容 Expo SDK 54
- 检查
eas.json配置
Q4: 上传后无法在 TestFlight 中看到
问题:上传成功但 TestFlight 中看不到构建
解决:
- 等待处理完成(通常 10-30 分钟)
- 检查是否选择了正确的构建版本
- 确保 Bundle Identifier 与 App Store Connect 中的应用一致
Q5: 版本号问题
问题:Version 或 Build Number 已存在
解决:
- 在
app.json中递增version(例如:1.0.0 → 1.0.1) - 在
app.json的ios.buildNumber中递增构建号(例如:1 → 2)
Q6: 加密导出合规性
问题:上传时提示需要加密导出合规性信息
解决:
在
app.json的ios.config中添加:"config": { "usesNonExemptEncryption": false }如果应用确实使用加密,需要在 App Store Connect 中填写相关信息
Q7: 网络权限问题
问题:iOS 应用无法访问网络
解决:
在
app.json的ios.infoPlist中配置:"infoPlist": { "NSAppTransportSecurity": { "NSAllowsArbitraryLoads": true } }
快速检查清单
在提交到 TestFlight 之前,确保:
-
app.json中配置了正确的bundleIdentifier -
app.json中配置了正确的version和buildNumber - 已创建或初始化 EAS 项目(如果使用 EAS Build)
- 已配置构建凭据
- 构建成功完成
- 构建已上传到 App Store Connect
- 构建已在 TestFlight 中处理完成
- 已添加测试用户
- 测试用户已收到邀请
推荐工作流
开发 → 测试 → 发布流程
开发阶段:
pnpm start # 在模拟器或真机上测试构建预览版本:
eas build --platform ios --profile preview内部测试(TestFlight):
eas build --platform ios --profile production eas submit --platform ios --latest发布到 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 # 更新配置
相关资源
注意事项
- 版本号管理:每次提交到 App Store Connect 都需要递增
buildNumber - 证书有效期:证书通常有效期为 1 年,EAS 会自动管理更新
- 审核时间:TestFlight 外部测试需要 Beta App Review,通常需要 24-48 小时
- 构建配额:EAS Build 免费账户有构建次数限制,付费账户有更多配额
- 构建时间:云端构建通常需要 10-20 分钟,取决于项目大小
祝你发布顺利! 🚀
如有问题,可以查看 Expo 社区论坛 或相关文档。
