提交被以 Guideline 2.1(App Completeness) 拒回,文案像 “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 账号过不去。他点了一圈,在审核窗口内解锁不了那个功能,于是拒。Guideline 2.1 是最常见的一类拒审——Apple 多次说过它占未解决审核问题的 40% 以上,而”访问受限功能”是其中很大一块。
最快修法(通常不用重打 build):给审核员一个 “reviewer profile” 账号,服务端预置全部权限,再把每个功能逐步走查粘进 App Store Connect → 你的 App 版本 → App Review Information → Notes,然后重交。审核员不会为你的订阅付费,不会去你后台索要邀请,不会关掉自己的 2FA,也不会自己 VPN 去别的国家测你的功能。对这一个账号把所有门都拆掉,再给他一张直达功能的地图。
先判断你属于哪一桶
| 拒回里的症状 | 大概率是哪道门 | 最快修法 |
|---|---|---|
| ”appears to require a paid subscription” / 出现付费墙 | demo 账号在免费档 | 服务端把 demo 用户升到最高档 |
| ”could not access admin / team settings” | 角色门(member vs owner) | demo 用户设 role = owner |
| ”feature did not appear” / 空白屏 | 地区锁 | 服务端 region_override,或 demo mode |
| ”requires an invite / code” | 邀请 / beta 门 | 给 demo 用户预先消费邀请 |
| 审核员登录或 SSO 失败 | 后端从 Apple 网络访问不到 | 在 reviewer mode 里 mock 掉该集成 |
| 上一版能用、这一版坏了 | 新加了门但没更新 notes | diff gating 代码;重新 seed demo 账号 |
常见原因
按命中率排序。
1. demo 账号是免费档,被拒功能是付费
你建了沙盒账号写进 App Review notes,但服务端这个用户是 Free plan。审核员登进来试用 Pro 功能撞付费墙。他没有沙盒卡去订阅,而 Apple 的审核员也不会为了测你的 App 去自建账号或买订阅。于是拒。
如何判断:库里查 demo 账号的 subscription_status 或 plan。不是最高档就是这个。
2. 功能要求管理员或团队所有者角色
协作功能只对 role = admin 或 role = owner 显示。demo 账号是某样本工作区的普通 member。审核员到不了管理员设置,看不到该功能。
如何判断:角色 / 权限表里查 demo 用户的角色。不是最高就被锁。
3. 地区锁让 Apple 审核地的人看不见
审核可能从 Apple 的多个办公室路由(Cupertino、Cork 等;中国区分发的 build 可能在中国审)。如果功能 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 跳转挂、登录死。这也包括经典的 2.1 坑:demo 账号带了 SMS 或 App 端 2FA,审核员满足不了。
如何判断:在公司 IP 段外的公网 Wi-Fi 上、用一台干净设备走完整登录流程。SSO、2FA 或任何后端调用失败,审核员撞的就是这道墙。
6. 这一版新加了门没更新 reviewer notes
上一版 demo 账号能用。这一版你加了 demo 账号过不去的 entitlement 检查。Reviewer notes 没同步,访问回归。
如何判断:当前发版的 feature-gating 代码和上一版 diff。新加的、demo 用户数据满足不了的检查就是回归。
需要收集的信息
- 审核员拒回原文 + 被点名功能(从 Resolution Center 一字不差地复制)。
- 代码里所有门的清单:订阅、角色、地区、邀请、A/B test cohort、feature flag、2FA。
- demo 账号在每个门相关表里的当前状态。
- App 是否有 “reviewer mode” 或特殊覆盖的概念。
- demo 账号有没有过期、限流或 2FA 会绊倒审核员(Apple 要求 demo 账号 must not expire,不可过期)。
最短修复路径
Step 1:建一个 “reviewer profile” 账号
单个账号服务端预置全部权限。标准 recipe:
UPDATE users SET
plan = 'pro_plus',
role = 'owner',
region_override = 'US',
invite_codes_consumed = ARRAY['*'],
two_factor_enabled = false,
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');
预置样本数据,让首页落到带内容的工作区,而不是空状态的引导流程。确认账号不会过期——Apple 文档明确写 demo 账号 “must not expire”。
Step 2:每个功能写一段 reviewer 走查
每个被拒功能写编号步骤。这段放进 App Review Information 下的 Notes 字段(上限 4,000 字符,任意语言均可):
DEMO ACCOUNT
User: apple-review@yourdomain.com
Pass: <strong-password>
(Pre-set to the highest tier and team owner. No 2FA. No code needed.)
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.
如果你的 App 有多种账号类型(admin vs 普通用户),Apple 的指引是把额外账号的凭据也写进 Notes 字段——Sign-In Required 字段只能放一组用户名/密码。
Step 3:发不了权限的功能加 reviewer-mode 旁路
有些功能(真银行连接、真硬件、要真客户的第三方 SaaS)靠发权限解决不了。给这些功能在检测到 reviewer profile 时切到 mock 集成:
let isReviewerAccount = currentUser.email.hasPrefix("apple-review")
let bankClient = isReviewerAccount ? MockBankClient() : RealBankClient()
如果你确实因法律或安全义务无法提供任何可用 demo 账号,Guideline 2.1(a) 允许你做一个内置 demo mode “in lieu of a demo account”——但必须 事先得到 Apple 批准(prior approval by Apple),且 demo mode 要展示 App 的完整功能。别把它当默认方案:它需要审批,而且”完整功能”这条线卡得很严。
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 里写明设备地区指引:“Set device region to United States in Settings → General → Language & Region for the 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,选中该版本,滚到 App Review Information,把 Step 2-4 的逐功能走查粘进 Notes。确认 Sign-In Required 开关已打开、Username/Password 正确。然后在版本上点 Add for Review / Submit for Review。
多数访问修复仅需 notes + 服务端配置,不用重打 build——因为二进制没变,变的只是账号服务端权限和 notes。
Step 6:在 Resolution Center 回复
引用审核员的问题,指向新走查:
“Thank you for the feedback. We’ve updated the App Review Information notes with a step-by-step walkthrough for the Pro Analytics feature. The demo account is now pre-set to the highest tier with no 2FA; please tap ‘Analytics’ on launch and ‘Pro Dashboard’ to see the gated feature.”
写得具体、简短。只说一句 “please re-test” 而不点明具体要怎么点,往往会换来第二次拒审。
怎么确认已经修好
- 冷装 + 用 demo 账号登录后落到带数据的工作区,所有功能解锁。
- App Review notes 走查里每个被点名功能都能在 60 秒内走到,途中没有付费墙、邀请码或角色墙。
- 只照 notes(不靠任何内部知识)的非开发同事也能走到每个被点名功能。
- 提交从 Rejected 回到 Waiting for Review,通常在重交后一天内完成。
如果还是没修好
- 在 Resolution Center 回复时附一段短屏录(QuickTime,约 50 MB 以内),演示登录 demo 账号到目标功能的完整路径。
- 核验数据库里 demo 账号的 entitlement——部署或 seed 脚本回滚可能在提交到审核之间悄悄把它降级。
- 在 Notes 里加第二个 demo 账号,用不同 entitlement 档(如 free + pro),以防审核员要特意看付费墙流程。
- 兜底:用你填的 Contact Information 申请 App Review 来电,电话里现场带审核员走一遍。
常见问题
Apple 会为了测我的付费功能而订阅或付费吗? 不会。审核员不会填支付信息、不会买订阅、也不会自建账号。任何付费墙后面的东西,要么在 demo 账号上预先解锁,要么用 reviewer / demo mode 展示。
修这个一定要重传 build 吗? 通常不用。如果修复只是服务端权限加更清楚的 notes,同一个 build 重交即可。只有当旁路需要改代码(比如你还没发过的 reviewer-mode mock)才需要新 build。
我能不能在发布说明里描述一下功能,而不真去解锁? 不能。Apple 必须能在审核时真正打开并使用该功能。描述代替不了访问;一个进不去的功能在 2.1 下会被读成”不完整”。
我的 demo 账号带 SMS 或 App 2FA,怎么办? 给这一个账号关掉 2FA,或在 Notes 里提前提供当前验证码。Apple 文档明确:一个够不到的验证步骤会卡住审核,甚至逼出一次来电。
“demo mode” 是不是比 demo 账号更省事? 只有当你确实因法律/安全原因给不出 demo 账号时才考虑,而且即便如此也要 事先得到 Apple 批准,并展示 App 的完整功能。对多数 App,预置权限的 demo 账号更快也更稳。
重交后多久能回到审核中? 重交后状态通常在几小时到一天内回到 Waiting for Review。如果时间紧,可以在 Resolution Center 申请 expedited review(加急审核)。
预防建议
- 维护一个 “reviewer profile” seed 脚本,每次发版跑,给已知邮箱发全部权限。
- 加任何新功能门时,在同一个 PR 里同时更新 seed 脚本和 App Review notes。
- 发版清单加一条:“非开发同事用 reviewer profile 登录,2 分钟内走到本次发版被点名的每个功能”。
- 别把新功能门和紧凑发版 deadline 凑一起——门是可避免拒审的头号原因。
- reviewer profile 账号标
is_internal = true,别污染分析或账单,并确保它永不过期。
相关阅读
外部参考:Apple 官方 App Review Guidelines, Guideline 2.1(App Completeness) 与 App Store Connect Help 里的 App Review Information 参考。
标签: #排查 #App Store #App 审核 #App 审核