Community生产力与协作github.com

erberkk/review-readiness

在提交 App Store 或 Google Play 审核前,或在收到拒审后使用。运行一个“通过/不通过”检查清单并生成报告——包括演示账户(通过密码登录,无需邮箱验证码)、数据填充且高级功能解锁;审核备注;应用内购买可见且可购买(指南 2.1(b));iPhone 专用应用的 iPad 兼容模式;无占位符或“即将推出”;元数据与应用一致;隐私 URL 可访问;冷启动不崩溃——并提供在解决方案中心回复和决定是否上诉的行动指南。

review-readiness 是什么?

这个技能提供了一套全面的审核准备检查清单,帮助开发者一次性通过 App Store 和 Google Play 的审核。它会引导你设置一个功能齐全的演示账户(邮箱+密码登录,数据填充且高级功能解锁),确保应用内购买在所有平台上正常运作,并检查应用内容中是否存在占位文本或“即将推出”等未完成元素。该技能还会验证元数据、隐私政策和后端的稳定性,以消除最常见的拒审原因。通过生成“通过/不通过”报告,它让你在提交前系统性地验证所有关键点,并在收到拒审后提供具体的回复和上诉策略。这不仅节省了反复提交的时间,还降低了因账户配置、购买流程或元数据矛盾等可避免问题导致的拒审风险。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/erberkk/mobile-app-launch-skills/tree/HEAD/skills/review-readiness

Installed? Explore more 生产力与协作 skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

审核就绪检查清单

目的

一次提交并成功通过。大多数拒审并非因为应用创意本身,而是审核员无法登录、无法购买、看到占位符或发现元数据与应用之间存在矛盾。

前置条件

  • 需要提交的确切构建版本已上传至 TestFlight 或 Google Play 测试轨道。
  • 已通过“订阅与支付”检查点(通过真实购买在两个平台上解锁了高级功能)。
  • 已完成“隐私与声明”检查;“列表与 ASO”检查器无错误;截图已上传。

像零知识审核员一样思考

假设审核员在您未曾测试的设备上安装了一个干净构建版本(iPhone 专用应用可能在 iPad 兼容模式下被审核),使用全新的商店账户,且时间有限。他们会阅读您的备注,尝试登录,寻找购买入口,并将截图与应用进行对比。一次拒审可能涉及多个层面:账户状态、后端行为和元数据。

操作流程

1. 演示账户

  • 凭据需填入 App Store Connect › App Review Information(“需要登录”)和 Google Play › App content › App access。切勿放入代码仓库。
  • 该账户使用邮箱+密码登录。 如果您正常的登录方式是邮箱验证码或魔法链接,审核员无法接收。请为审核邮箱地址单独添加密码登录路径(服务端白名单)或一个仅对该地址有效的固定测试码。
  • 数据已填充:个人资料完整,包含几天历史记录,每个主屏幕均有内容。空白账户会隐藏功能,并引发“我们无法定位功能 X”的拒审。
  • 高级功能已解锁:通过服务端手动授予权限(审核期间不会过期),以便审核员无需购买即可查看付费功能。
  • 另外,请确保新用户可以访问付费墙并使用审核员的沙盒账户进行购买(他们也会测试购买流程)。
  • 在审核开启期间,请勿更改、删除或重新填充此账户。

2. 购买(指南 2.1(b) 和 3.1.x)

  • 首次版本的订阅需要在 App Store Connect 中关联到该版本(“App 内购买项目和订阅”部分),并附上审核截图和备注。在较新的 App Store Connect UI 中,版本页面上可能没有此部分:请打开订阅组和每个订阅,使用 Add for Review → Draft Submission;版本本身需从其自身页面添加。在点击“提交以供审核”之前,草稿中必须包含版本、订阅组和每个订阅。
  • 每个订阅至少需要一个显示名称+描述本地化和一个审核截图;缺少这些会导致“Add for Review”失败(“您必须添加至少一个订阅本地化 / 审核信息截图”)。
  • 审核截图必须显示真实的付费墙、真实价格和正确的商店措辞。如果通过 widget 或 UI 测试生成截图,请强制使用 iOS 平台(否则会显示“Google Play”)并填入真实商店价格;“价格不可用”状态不可接受。
  • App Store 版本字符串必须与构建的营销版本(CFBundleShortVersionString)一致。名为 1.0 的版本将无法显示上传的 1.0.0 构建版本;构建部分只会显示“上传您的构建版本”,没有“添加构建版本”按钮。请重命名版本以匹配。
  • 在 TestFlight 上使用全新沙盒 Apple 账户(未与您的任何应用账户关联):产品加载正常,购买正常,恢复购买正常。
  • 付费墙错误状态应显示重试按钮,绝不能显示禁用的“即将推出”。
  • 如果某个 IAP 在应用中无法访问(例如仅限特定地区),请在审核备注中说明原因。
  • 提供“恢复购买”、“条款与隐私”链接以及“管理订阅”链接。

3. 设备和构建版本

  • 无网络、慢速网络和切换飞行模式情况下冷启动:不崩溃,无无限加载。
  • iPad:即使是 iPhone 专用应用也能在 iPad 的兼容模式下运行,并可能在此环境下被审核。请在 iPad 模拟器上运行完整流程:登录(包括“通过 Apple 登录”)、付费墙滚动、购买表单、键盘弹出覆盖表单、权限提示、屏幕旋转。如果 HealthKit 或其他 API 在此环境下不可用,请显示友好提示,而不是崩溃。
  • 最小支持手机和最大文本字号:付费墙或同意屏幕上的按钮不被截断。
  • 使用发布构建版本,而非调试版本:无调试横幅、无测试菜单、分析/崩溃报告在生产配置中启用。
  • 在物理设备上使用您提交的精确构建版本演练完整账户生命周期:安装、注册、主要功能、沙盒购买、账户删除以及删除后应用显示的内容。

4. 内容和元数据

  • 搜索应用的字符串和列表中的:TODO、lorem、coming soon、beta、test、[PRICE]、占位符图片。不得出现任何此类内容。
  • iOS 构建和元数据中不包含 Android/Google Play 措辞;Google Play 中不包含 Apple 专用措辞(2.3.10)。包含应用内字符串,例如“在 App Store 或 Google Play 中取消”——需在运行时选择相应平台文本。
  • 每张截图与当前 UI 一致;描述中的每个数字与应用匹配。
  • 隐私政策、条款、支持和账户删除 URL 无需登录即可加载,提及应用名称,并与隐私表单中的信息一致。
  • 年龄分级与条款一致。

5. 后端

  • 后端正常运行,并采用不会在审核期间达到限制的套餐(免费套餐暂停或限流 = 拒审)。
  • 审核期间不部署破坏性变更。对审核中的构建版本提供向后兼容的 API。
  • 已开启告警(post-launch-ops),以便在审核期间发现服务中断。

6. 审核备注

填写 templates/review-notes.md。保持事实性:功能位置、如何登录、如何测试购买、AI 和健康数据处理方式、账户删除位置。

Apple 可能会回复**指南 2.1“需要提供信息”**而不是进行审核。在某个案例中,Apple 要求提供以下六项信息;在首次提交时预先回答这些问题可以避免一次来回沟通:

  1. 使用最新操作系统的物理设备录制的屏幕录像,从应用启动开始,展示典型流程:注册、登录、账户删除、任何用户生成内容的举报/屏蔽功能,以及对付费内容的访问。使用您提交的构建版本录制;将文件附加到提交的“消息”回复中(或提供链接),并在备注中提及。删除部分切勿使用演示审核账户:在录像中创建一个新账户。
  2. 应用的目的和目标受众:解决的问题及其价值。
  3. 主要功能的设置和访问说明,包括演示凭据和菜单位置。
  4. 核心功能背后的所有外部服务:认证/数据库、支付(StoreKit 及任何封装库)、AI 提供商、数据源(例如地图 API)、电子邮件、健康框架。
  5. 地区差异,或声明所有地区功能相同。
  6. 对于受监管领域或第三方受保护内容:提供文档或声明不适用(例如“通用健康产品,非医疗设备”)。

7. 通过/不通过报告

填写 templates/go-no-go-report.md,为每一项提供证据(截图、构建版本号、命令输出)。任何关键项的“不通过”意味着不能提交。

8. 提交(获批)

要求账户持有人明确批准,并附上报告。在 iOS 上选择手动发布,以便获批后不立即发布。在 Play 上,生产访问权限(新的个人账户)需要先完成 14 天封闭测试并提交生产访问申请。

收到拒审后

参见 references/rejection-playbook.md:阅读确切的指南条款,重现问题,修复根本原因(通常不止一个层面),在解决方案中心回复并提供具体信息,然后重新提交;仅当审核员误读了您能证明的事实时才考虑上诉。

需要人工批准的决策点

提交、选择发布方式、回复拒审(语气和承诺)、提起上诉、为审核账户授予高级权限。

验证

通过/不通过报告完整且附有证据,并且由未参与该功能构建的人员在干净设备上按照审核备注操作成功。

常见陷阱

  • 演示账户依赖审核员无法读取的邮箱验证码。
  • 演示账户为空、被冻结或被清理任务删除。
  • 产品处于“缺少元数据”状态(无审核截图),导致审核期间无法加载。
  • 从审核中移除版本(“开发者拒绝”)也会从草稿中删除订阅;重新提交前需重新添加订阅组和每个订阅,否则版本将单独提交。
  • 当版本处于“等待审核”状态时,产品页面资源被锁定(例如较新的 Header 资源)。请在提交前添加所有内容;否则您必须将版本从审核中移除、编辑并重新提交(从而失去队列位置)。
  • Apple 自身的“Add for Review”检查通过并不表示可选资源已设置:空的 Header 资源是允许的,因此请在提交前做出决定。
  • 审核员的全新 Apple 账户与您的恢复/转移规则冲突,导致购买“失败”。
  • 后端使用了一个在闲置后暂停或对审核员限流的套餐。
  • 构建版本中存在任何“即将推出”字样。
  • 应用内文本提及了其他商店。
  • 审核备注仅解释了演示登录(无屏幕录像、用途、服务或地区信息)。

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

erberkk/privacy-and-declarations

Use when filling in or auditing App Store privacy and compliance answers and Google Play App content declarations - Apple App Privacy labels, Play Data safety (CSV import), Health apps declaration and Health Connect permissions, advertising ID, PrivacyInfo.xcprivacy and required-reason APIs, export compliance (ITSAppUsesNonExemptEncryption), age rating, account deletion (in-app, web URL, re-authentication), consent and disclosure for AI features, and rules for health data. Derives every answer from a code and SDK scan so the forms, the privacy policy and the in-app text say the same thing.

erberkk/social-publishing

Use when setting up scheduled publishing of an app's marketing content to Instagram (Reels, carousels, Stories), Threads, X and TikTok through official APIs - self-hosting Postiz in Docker behind a Cloudflare Tunnel, creating the Meta app with the newer use-case flow (business portfolio, Facebook Page linked to the Instagram professional account, Threads tester invite), X developer pay-per-use credits and spend cap, TikTok and YouTube audit limits, safe OAuth account selection when one browser holds personal and brand accounts, resource limits, and phasing a posting calendar around real launch events.

erberkk/store-screenshots

Use when producing or updating App Store and Google Play screenshots and the Play feature graphic - planning a connected "panorama" story across frames, capturing real in-app screens with the app's own test/screenshot harness at each device's logical size and pixel ratio, covering the full device matrix (iPhone 6.9", the required medium Dynamic Island slot, iPhone Duo outer and inner displays, iPad 13" if the app runs on iPad, Play phone, 7" and 10" tablets, 1024x500 feature graphic), checking for alpha channels and wrong sizes, and uploading in order via the App Store Connect and Google Play APIs.

erberkk/web-presence-and-seo

Use when building, checking or deploying the website that a mobile app needs for its store listings and launch - privacy policy, terms, support and web account-deletion pages that work signed-out; hosting apple-app-site-association and assetlinks.json; invite/referral pages (/i/<code>) that open the app or fall back to the store with the Play install referrer; a landing page with store badges and honest per-country prices filled at the edge; Open Graph images; technical SEO (hreflang, canonical, sitemap, robots.txt, JSON-LD); Search Console, Bing Webmaster and IndexNow; AI crawler policy and llms.txt; and a Cloudflare Worker deploy with a production approval gate. Includes a site checker and an IndexNow ping script.

相关技能