App Store 提交流程自动化专家
精通使用 Fastlane 自动化 App Store 和 Google Play 提交,包括截图生成、元数据管理和审核优化。
决策要点
何时使用分阶段与全量发布
如果是首个应用版本或者主要功能变更:
└── 使用分阶段发布:10% → 50% → 100%,持续 7 天
└── 在每个阶段监控崩溃率和用户反馈
否则如果是热修复或小更新:
└── 如果是关键安全修复:
└── 立即全量发布
否则:
└── 使用 50% → 100%,持续 2-3 天
证书续期决策矩阵
| 场景 | 到期天数 | 操作 |
|---|---|---|
| 分发证书 | < 30 天 | 运行 fastlane match nuke distribution,然后重新生成 |
| 开发证书 | < 30 天 | 运行 fastlane match nuke development |
| 配置文件 | < 14 天 | 使用 force_for_new_devices: true 运行 match |
| 推送证书 | < 30 天 | 在 Apple Developer Portal 重新生成,更新服务器 |
提交类型选择
如果需要内部测试:
├── iOS:使用 TestFlight 外部组(最多 10,000 名测试人员)
└── Android:使用内部轨道(最多 100 名测试人员)
否则如果是公开测试:
├── iOS:使用 TestFlight 公开链接
└── Android:使用带有选择加入 URL 的封闭轨道
否则如果是生产就绪:
├── 检查是否符合所有商店要求(参见质量门禁)
└── 使用生产/发布轨道
故障模式
Match 凭据不匹配
- 症状: “未找到证书”或“配置文件与证书不匹配”
- 诊断: Git 仓库不同步或团队成员手动生成了证书
- 修复: 运行
fastlane match nuke,重新生成所有证书,提交到 match 仓库
应用审核被拒 - 信息缺失
- 症状: “我们需要更多信息来审核您的应用”
- 诊断: 缺少演示凭据、联系信息或审核说明
- 修复: 在 fastlane/metadata/review_information/ 中添加 demo_user.txt、demo_password.txt 和详细的 notes.txt
大型应用构建超时
- 症状: Fastlane 在
build_app步骤超时 - 诊断: 应用大小 > 2GB 或构建过程复杂
- 修复: 在 build_app 操作中添加
build_timeout: 7200,启用增量构建
截图生成失败
- 症状: snapshot/screengrab 生成空白或不正确的截图
- 诊断: UI 测试未等待动画完成或使用了错误的模拟器
- 修复: 在 UI 测试中添加显式等待,验证模拟器名称与 Snapfile 中的设备列表匹配
元数据字符限制超出
- 症状: 上传失败,报错“描述太长”
- 诊断: 本地化元数据超出平台限制(App Store:4000 字符,Play Store:4000 字符)
- 修复: 在提交前运行
fastlane precheck,将描述修剪到平台限制以内
工作示例
场景: 为一个包含 iOS 和 Android 目标的 React Native 应用设置自动提交
初步评估:
- 应用有现有的手动提交流程
- 4 人团队需要共享代码签名
- 要求进行分阶段发布和截图自动化
第一步:设定决策
# 在项目根目录
fastlane init
# 选择选项 4(手动设置)
遇到决策点: 证书管理策略
- 新手选择: 使用 Xcode 自动签名(在 CI 中会失败)
- 专家选择: 设置 match 以实现团队范围内的证书共享
第二步:配置 Match
# fastlane/Matchfile
git_url("https://github.com/company/certificates")
storage_mode("git")
type("appstore") # 也支持:development, adhoc
第三步:创建通道(关键决策:Beta 与 Production)
# fastlane/Fastfile
desc "TestFlight 提交,构建号自增"
lane :beta do
setup_ci if ENV['CI']
match(type: "appstore", readonly: true)
# 决策:始终自增构建号,版本号仅在发布时自增
increment_build_number(build_number: ENV['BUILD_NUMBER'])
build_app(workspace: "ios/MyApp.xcworkspace", scheme: "MyApp")
upload_to_testflight(skip_waiting_for_build_processing: true)
end
专家见解: 在 CI 中始终使用 skip_waiting_for_build_processing: true 以避免超时
第四步:首次运行前的验证
- 运行
fastlane precheck以验证元数据 - 在全量截图自动化前,先在单个设备上测试
- 验证 CI 环境具有正确的 Xcode 版本
结果: 自动化管道将提交流程从 45 分钟缩短至 8 分钟
质量门禁
在运行生产通道之前必须通过的提交前检查清单:
-
fastlane precheck通过,无警告 - fastlane/metadata/[locale]/ 目录下存在所有必需的元数据文件
- 已为所有必需的设备尺寸生成截图(iPhone 6.9", 6.3", iPad 13")
- 版本号已从上一个发布版本递增
- 构建号唯一且高于 TestFlight 最新版本
- 代码签名证书有效期超过 30 天
- review_information/ 中提供了演示凭据(如果应用需要登录)
- 已配置分阶段发布百分比(建议从 10% 开始)
- CI 环境变量已设置:FASTLANE_USER, MATCH_PASSWORD, FASTLANE_SESSION
- 目标市场的所有本地化工作已完成
- 应用图标和所需资源以正确格式存在
非职责边界
不要将此技能用于:
-
CI/CD 管道搭建 → 改用
github-actions-pipeline-builder- 此技能假设 CI 已存在;不会创建工作流/管道
-
应用架构决策 → 改用
react-native-architect- 此技能处理部署,不涉及代码结构或导航
-
分析和崩溃报告 → 改用
mobile-analytics-crash-reporting-expert- 此技能专注于商店提交,而非发布后的监控
-
应用商店优化(ASO) → 使用专门的 ASO 专家
- 此技能处理技术提交流程,而非关键词优化或转化率
-
后端 API 开发 → 改用
api-architect- 此技能假设您的应用后端已为生产环境做好准备
何时委托:
- 对于构建配置问题 →
react-native-architect - 对于从头开始搭建 CI/CD →
github-actions-pipeline-builder - 对于应用性能监控 →
mobile-analytics-crash-reporting-expert