提交被以 Guideline 2.1 拒回,文案像 “We were unable to evaluate the [team sharing / AI chat / Pro analytics] feature because it appears to require [a paid subscription / an admin role / an invite]“。你的 App 技术上能用;审核员只是撞到一道真的门(付费墙、角色、邀请码、地区),你给的 demo 账号过不去。他点了一圈、在 30 分钟审核窗口内解锁不了那个功能,拒。
审核员不会为你的订阅付费,不会去你后台索要邀请,也不会自己 VPN 去别的国家测你的功能。修法是给他一个”reviewer profile”账号,服务端预置全部权限,再加一段 notes 把他从启动直接带到目标功能、不走弯路。
常见原因
按命中率排序。
1. demo 账号是免费档,被拒功能是付费
你建了沙盒账号写进 notes,但服务端这个用户是 Free plan。审核员登进来试用 Pro 功能撞付费墙。他没有信用卡订阅,拒。
如何判断:库里查 demo 账号的 subscription_status 或 plan。不是最高档就是这个。
2. 功能要求管理员或团队所有者角色
协作功能只对 role = admin 或 role = owner 显示。demo 账号是某样本工作区的普通 member。审核员到不了管理员设置,看不到该功能。
如何判断:角色 / 权限表里查 demo 用户的角色。不是最高就被锁。
3. 地区锁让 Apple 审核地的人看不见
审核员在 Cupertino 或北京(中国区审核)。功能 gating 在 region == "JP"。功能 UI 根本不渲染,看起来”功能没了”。
如何判断:搜代码里所有 if region in ['US', 'JP', ...] 检查。审核员 IP / 设备地区不在允许列就需要 VPN 友好路径或 reviewer-mode 旁路。
4. 邀请制功能审核员拿不到邀请
你出了一个 “beta program” 需要邀请码。审核员没有码,不试就不试。即使发布说明里写了,Apple 也评估不了。
如何判断:搜代码里 demo 账号过不去的邀请码 / feature flag 检查。列出所有这类门,审核员必须能全过。
5. 必需的外部服务从审核员环境访问不到
B2B App 要打客户的 on-prem SSO、企业 VPN、或 IP 白名单的合作伙伴 API。审核员网络打不到;SSO 跳转挂、登录死。
如何判断:在公司 IP 段外的公网 Wi-Fi 上试一次登录流程。SSO 或后端调用失败,审核员撞的就是这个。
6. 这一版新加了门没更新 reviewer notes
上一版 demo 账号能用。这一版你加了 demo 账号过不去的 entitlement 检查。Reviewer notes 没同步,访问回归。
如何判断:当前发版的 feature-gating 代码和上一版 diff。新加的、demo 用户数据满足不了的检查就是回归。
动手前先确认
- 完整记下拒回原文,审核员通常会引用他卡住的那一屏,直接告诉你要解哪道门。
- 决定在账号层(给 demo 用户多发权限)还是代码层(加 reviewer-mode 旁路)修——两者都行但审核期影响不同。
- 改 entitlement 数据库前先备份当前 demo 账号配置。
- 弄清问题是只在审核员那边出现,还是新装的真实用户也撞。
需要收集的信息
- 审核员拒回原文 + 被点名功能。
- 代码里所有门的清单:订阅、角色、地区、邀请、A/B test cohort、feature flag。
- demo 账号在每个门相关表里的当前状态。
- App 是否有 “reviewer mode” 或特殊覆盖的概念。
- Apple 出口 IP / 地区(有时可通过 Contact App Review 问到)。
最短修复路径
Step 1:建一个 “reviewer profile” 账号
单个账号服务端预置全部权限。标准 recipe:
UPDATE users SET
plan = 'pro_plus',
role = 'owner',
region_override = 'US',
invite_codes_consumed = ARRAY['*'],
is_internal = true
WHERE email = 'apple-review@yourdomain.com';
UPDATE workspaces SET
plan = 'enterprise',
feature_flags = ARRAY['*']
WHERE owner_id = (SELECT id FROM users WHERE email = 'apple-review@yourdomain.com');
预置样本数据让首页落到带内容的工作区。
Step 2:每个功能写一段 reviewer 走查
每个被拒功能在 App Review notes 写编号步骤:
TO TEST PRO ANALYTICS
1. Sign in with the demo account above.
2. Tap "Analytics" in the bottom navigation.
3. Tap "Pro Dashboard" — this is paid, but pre-unlocked for this account.
4. Expected: a chart with sample data from the last 7 days.
TO TEST TEAM SHARING
1. Sign in with the demo account (this account is the team owner).
2. Tap "Team" in Settings.
3. Tap "Invite Member" — copy the invite link (don't send).
4. Open the link in another browser; expected: invite acceptance screen.
Step 3:发不了权限的功能加 reviewer-mode 旁路
有些功能(真银行连接、真硬件、要真客户的第三方 SaaS)发权限解决不了。给这些加编译时 flag,App 检测到 reviewer profile 时用 mock:
let isReviewerAccount = currentUser.email.hasPrefix("apple-review")
let bankClient = isReviewerAccount ? MockBankClient() : RealBankClient()
notes 里写:
REVIEWER MODE
Bank connection uses mock data when signed in as apple-review@yourdomain.com.
Tap "Connect Bank" — sample transactions appear immediately.
Step 4:处理地区锁
地区锁功能:
- 服务端覆盖 demo 账号地区(推荐):
region_override = 'US'。 - notes 里写明 VPN 指引:“Set device region to United States in Settings → General → Language & Region for live scores feature.”
REGION REQUIREMENTS
Live scores feature is available only in US/CA/UK.
Demo account has region_override='US' set server-side; no VPN needed.
Step 5:用新 notes 重新提交
App Store Connect → App Information → App Review Information,把 Step 2-4 的逐功能走查粘进去。然后 App Store 标签 → 点 build → Submit for Review。
多数访问修复仅 notes + 服务端配置,不用重打 build。
Step 6:在 Resolution Center 回复
引用审核员的问题指向新走查:
“Thank you for the feedback. We have updated App Review notes with a step-by-step walkthrough for the Pro Analytics feature. The demo account is now pre-set to the highest tier; please tap ‘Analytics’ on launch.”
怎么确认已经修好
- 冷装 + 用 demo 账号登录后落到带数据的工作区,所有功能解锁。
- App Review notes 走查里每个被点名功能都能 60 秒内走到。
- 非开发同事仅靠 notes 都能走到每个被点名功能。
- 重交后 1-2 小时内状态从 Metadata Rejected 回到 Waiting for Review。
如果还是没修好
- 在 Resolution Center 回复时附 30 秒 QuickTime 屏录,演示登录 demo 账号到目标功能的完整路径。
- 核验数据库里 demo 账号的 entitlement——有时部署会还原 seed 脚本。
- 加第二个 demo 账号,不同 entitlement 档(如 free + pro),以防审核员要特意看付费墙流程。
- 兜底:申请 Phone Call from App Review,电话里现场带审核员走。
预防建议
- 维护一个 “reviewer profile” seed 脚本,每次发版跑,给已知邮箱发全部权限。
- 加任何新功能门时,同一个 PR 里同时更新 seed 脚本和 App Review notes。
- 发版清单加一条:“非开发同事用 reviewer profile 登录,2 分钟内走到本次发版被点名的每个功能”。
- 别把新功能门和紧凑发版 deadline 凑一起——门是可避免拒审的头号原因。
- reviewer profile 账号标
is_internal = true,别污染分析或账单。
相关阅读
标签: #排查 #App Store #App 审核 #App 审核