发布检查
你正在帮助一位 Flutter 开发者交付一个不会被 Google Play 或 App Store 审核拒绝的发布版本。请具体说明:对于每个问题,给出文件名和确切的更改。
步骤 1:运行确定性预检
从 Flutter 项目根目录运行:
bash "${CLAUDE_PLUGIN_ROOT}/scripts/preflight.sh" $ARGUMENTS
脚本输出按部分(版本号、Changelog、静态分析、测试、调试残留、Android、iOS)分组的 OK / WARN / FAIL 行,并在出现任何 FAIL 时以退出码 1 退出。如果运行测试可能需要一分钟。如果用户明显处于开发中,只想快速查看,请传递 --skip-tests。
步骤 2:调查每个 FAIL 和 WARN
对于每一项,打开脚本命名的文件,确认发现的问题后再报告。常见修复:
| 发现 | 修复 |
|---|---|
| 版本缺少构建号 | 在 pubspec.yaml 中将 version: 1.2.0 改为 version: 1.2.0+1。 |
| 此版本的标签已存在 | 运行 bump-version 技能。 |
com.example applicationId 或 bundle id | 使用 flutter pub run change_app_package_name:main com.yourco.app 或编辑 android/app/build.gradle(.kts) 以及 ios/Runner.xcodeproj/project.pbxproj 中的三个 PRODUCT_BUNDLE_IDENTIFIER 条目。 |
| 使用调试密钥签名发布版本 | 添加 key.properties 加载和 release signingConfig;参见 references/android-signing.md。 |
key.properties 或 *.jks 被 git 跟踪 | 添加到 .gitignore,然后执行 git rm --cached <file>;如果仓库是公开的,请轮换密钥库密码。 |
没有 PrivacyInfo.xcprivacy | 创建 ios/Runner/PrivacyInfo.xcprivacy;模板在 references/privacy-manifest.md。 |
debuggable=true、明文流量、localhost URL | 在发布前移除。 |
| 分析器错误 / 测试失败 | 修复它们;不要建议跳过。 |
步骤 3:检查脚本无法检测的事项
查看项目并考虑:
- Target SDK:Google Play 要求新应用和更新针对较新的 Android API 级别(Play 的滚动要求大致是前一年的发布版本)。检查
android/app/build.gradle(.kts)或 Flutter 默认值中的targetSdk。 - 应用图标和启动画面:默认的 Flutter 图标会导致审核被拒,也会被用户立即卸载。检查
flutter_launcher_icons/flutter_native_splash配置或 mipmap 文件夹。 - 权限:如果 Manifest 中除了 INTERNET 之外还有其他权限,建议运行
permission-audit技能。 - 商店素材:功能图 1024x500(Play)、每个所需设备类别的截图、隐私政策 URL(如果应用收集任何数据或请求敏感权限则必需)。
- 账户删除:如果应用支持创建账户,两个商店都要求提供应用内账户删除路径。
- 审核员登录:如果有登录界面,提醒用户在审核备注中提供演示账户。
阅读 references/store-rejections.md 获取完整的常见拒绝原因及其修复列表,当用户询问为何被拒或需要更深入审查时使用。
步骤 4:报告
返回一份简短报告:
- 判定:READY / NOT READY。
- 必须修复(FAIL 项,每项包含文件和确切更改)。
- 建议修复(对此应用重要的 WARN 项)。
- 下一步命令:通常是
flutter build appbundle --release和flutter build ipa --release,如果版本已发布,则在其前加上bump-version和changelog。
保持精简。除非用户要求完整输出,否则不要重复 OK 行。