外观
第十六章:打包上架全流程(Play Console + TestFlight + App Store)
16.1 本章目标(验收标准)
完成后你需要能:
- 产出 Android AAB 并上传到 Google Play Console(至少内部测试)
- 产出 iOS Archive 并上传到 TestFlight
- 搭建一套“发布前检查清单”,降低 release-only 风险
- 明确 Android/iOS 上架差异与常见审核/上传失败原因
16.2 核心概念:上架不是“打包”,是“交付流程”
你需要同时保证:
- 版本号策略正确
- 签名/证书正确
- 隐私与权限说明完整
- 关键路径回归通过
- 产物可复现(最好有 CI)
Web 对比:
- Web 发版通常是 CI 构建 + 部署
- 移动端发版 = 构建 + 签名 + 控制台配置 + 审核 + 灰度 + 回滚策略
16.3 Android 上架(Google Play)完整流程
16.3.1 前置准备
- Google Play Developer 账号
- 上传密钥/签名策略
- 推荐使用 Play App Signing(由 Google 托管 app signing key)
16.3.2 版本号策略(必须理解)
pubspec.yaml:version: x.y.z+buildx.y.z:versionNamebuild:versionCode(必须递增)
16.3.3 生成 AAB
powershell
flutter build appbundle --release产物:
build/app/outputs/bundle/release/app-release.aab
16.3.4 在 Play Console 创建应用并上传
- Play Console → Create app
- App details:名称、默认语言、应用类型
- Release → Testing(Internal/Closed/Open)
- 创建一个 Internal testing release
- Upload AAB
- 填写 release notes
- 添加测试人员(邮箱/群组)
16.3.5 上架前必填项(新手最常漏)
- Data safety(数据安全表单)
- Privacy policy(如果涉及网络、账号、采集信息,通常需要)
- App content:目标受众、广告声明
- Screenshots、Feature graphic(素材要求)
16.4 iOS 上架完整流程(TestFlight → App Store)
16.4.1 前置准备
- Apple Developer Program
- App Store Connect 账号权限
- Bundle ID(不要轻易改)
16.4.2 Xcode Archive(最常见流程)
- Xcode 打开
ios/Runner.xcworkspace - 选择
Any iOS Device (arm64)或真机 - Product → Archive
- Archive 完成后:Distribute App
- 上传到 App Store Connect
16.4.3 TestFlight 内测
- App Store Connect → TestFlight
- 添加构建版本
- 邀请 Internal Testers / External Testers
- 外部测试通常需要审核
16.4.4 提交 App Store
- App Store Connect → App 信息、版本信息
- 截图、隐私信息、用途说明
- 提交审核
16.5 实战:做一份“发布前检查清单”(建议直接复制到你的项目)
16.5.1 功能回归(必须)
- 启动、登录(如有)、首页渲染
- 笔记增删改查(SQLite)
- 相机/相册(权限 + 拒绝流程)
- 网络页面(dio):弱网/无网/超时提示
16.5.2 配置检查(必须)
- 版本号(build number 递增)
- Android:包名、签名、权限
- iOS:Bundle ID、Team、Info.plist 用途说明
16.5.3 性能与稳定性
- 真机 release 包回归(不是 debug)
- 关键页面滚动/图片加载不卡顿
16.5.4 合规与隐私
- 权限用途说明(相机/相册)
- 隐私政策链接(如有数据收集/登录/统计)
16.6 CI(可选但强烈建议):让产物可复现
目标:避免“我本机能打包,你机器不行”。
最小思路:
- Android:GitHub Actions Linux runner 打 AAB
- iOS:GitHub Actions macOS runner 打 archive(或 fastlane)
你不需要一开始就做到全自动上架,但至少做到:
- 任何人拉代码都能构建出同样产物
16.7 实战小练习(必须做)
练习 A:Android 内部测试
- 生成 AAB
- 上传 Internal testing
- 邀请自己邮箱安装
验收:
- 能通过 Play 提供的安装链接安装
- 功能正常
练习 B:iOS TestFlight(如果你有 macOS)
- Xcode Archive 并上传
- 添加一个 internal tester
- 安装 TestFlight 版本
验收:
- 能从 TestFlight 安装并运行
16.8 常见坑
- Android:versionCode 没递增 → 上传失败
- Android:签名丢失/换 keystore → 无法更新已上架应用
- iOS:用途说明不完整 → 运行崩/审核被拒
- iOS:签名配置混乱(多个证书/profile)→ Archive/上传失败
- 只测 debug:release-only 问题上线后才暴露
