渐识是我的 iOS 应用——AI 情绪陪伴,产品定义是一面情绪的镜子:三个标签页(今夜/信/我),每晚九点生成一封”今夜信”,记忆面板可看可删,危机场景转介热线,底层接 MiniMax 的模型。9 月 9 日第一次提交 App Store 审核,到现在闯了三轮,写这篇时第三次提交正在等待审核。

先交代一个产品细节,后文会用到:今夜信在代码里被限定为 21:00 之后才生成——一封”睡前信”不该在早上出现在你的信箱里。这类带着产品判断的设计,恰恰是后面审核沟通里争议的来源:审核员看的是功能清单,你看的是使用场景,两者的差距要靠证据和解说去填。

这不是一篇”如何快速过审”的攻略。复盘下来,每一轮拒绝都指向同一个主题:你自认为做完的事,和审核员看到的事,差距必须由证据来填。

三轮的梗概先放在这里,细节后面逐关展开:

轮次 拒绝理由(Guideline) 性质 关键修复
第一轮 3.1.2 订阅条款链接缺失 纯元数据 ASC 补 EULA 全文,版本描述追加条款与隐私链接
第二轮 2.3.2 内购推广图 + 5.1.1(i)/5.1.2(i) 第三方 AI 披露 + 5.1.1(v) 账号删除入口 功能与合规 删推广图;新增 AI 同意弹窗与政策点名;注销入口提级加录屏举证
第三轮 5.1.x / 2.3.2 复审意见 残余整改 逐条响应后全自动重新提审(当前正在等待审核)

第一关:3.1.2,一页 EULA

第一次拒绝最轻:订阅类应用的产品页缺少可用的《使用条款》链接。纯元数据问题,构建包原样可用,补上 ASC 的许可协议字段、在版本描述末尾追加条款和隐私链接,重新提交即可。

它轻到几乎不值一提,但值得记进教训清单:订阅类 App 提审前,”许可协议字段”和”描述内条款链接”是两项必备检查,缺一个就是一轮拒绝。这类纯表单项不会出现在任何开发任务列表里,只有被拒过一次才会长进流程。

第二关:三项齐发,都是”AI 陪伴”的专属考题

第二轮拒绝来了三个理由,摊开看,全是这个品类特有的:

2.3.2 元数据准确:IAP 推广图。 订阅商品的推广图像当初误传成了应用图标,两张重复。我们本就不打算推广内购,Apple 明示这种情况可以删除——但踩了一个坑:等待审核状态下,ASC 的 API 删除请求直接被 409 拒掉,只能网页端手动删。“API 能做”和”这个状态下 API 能做”是两回事。

5.1.1(i)/5.1.2(i):第三方 AI 披露。 用户聊天内容会发给第三方模型服务,Apple 要求说清楚”发什么、发给谁、用来干什么、用户有什么控制权”。我们的响应是做了首次发送同意弹窗,五要素完整:发给谁(点名服务方)、发什么、不用于训练、可随时删除、拒绝的后果是不发送。同步把隐私政策和用户协议改成点名第三方服务并部署上线。

这一项我认为是 AI 陪伴品类的必修课而非负担——用户有权在第一次开口之前知道对面是谁。把披露做成一次体面的同意交互,比藏在隐私政策第几段里强得多。

5.1.1(v):账号删除。 最有意思的一项:功能其实早就做完了,审核员没找到。账号注销藏在”数据与隐私”的二级页面里,审核员在 iPad 上没翻到,判了缺失。修复方式很直接——提升为设置页一级卡片入口,红色标注,一眼可见;按 Apple 要求补了真机操作录屏举证。

这条的教训值得所有开发者抄下来:**功能存在 ≠ 审核员能找到。审核员平均在你的 App 里停留几分钟,用的还可能是 iPad——你的深二级页在他的设备上等于不存在。**响应这类拒绝的标准动作是三件套:改入口层级、录屏举证、回复里写清操作路径,缺一都可能再来一轮。

顺带记一条自动化的前提:ASC 的 API 密钥按角色分权限,上传构建和改账号级设置需要的能力矩阵完全不同。把发布链路脚本化之前,先确认手上的密钥”能做什么、不能做什么”,能省掉半夜对着一排 403 猜谜的时间。

工程侧的三个坑

审核之外,发布链路本身也贡献了几个值得一提的坑。

altool 的 DUPLICATE 竞态误报。 build 17 首次上传后工具报”重复构建号”,实际上 ASC 里状态是 VALID、包完好在列——上传成功后的二次校验撞上了同步延迟。此后规矩改成:报错先查构建列表再信工具输出,列表里 VALID 就不用重传。

真机自动化的点击姿势。 冒烟测试脚本用坐标点按弹窗按钮,时灵时不灵;换 AX 标签点按(按可访问性标签名点)之后全场景稳定。坐标是给像素的,标签是给控件的——自动化测试永远选后者。

图标、截图与构建的配套。 换新图标、重制全套截图(1290×2796)之后才发现构建包、图标、截图三者要保持同一版本气质,零散替换会出现”商店页和 App 对不上”的割裂感。这类资产要当成一个整体一次性更新。

分级问卷的自我拷问

年龄分级是个绕不开的自我对话:按问卷 mechanically 答,能拿到更低的分级;但这个 App 有 AI 对话、情绪内容和危机干预场景,如实的答案指向更高的分级。

最后的选择是如实。理由很实际:分级报低被抽查出来是下架风险,而 AI 陪伴这个品类被抽查的概率不低;更根本的是,产品定义里就有”危机热线转介”这样的重场景,分级如实是给用户预期管理的第一道防线。合规项上省下的每一分钟,都会在下架通知里加倍还回来。

现在:等待审核中

最近一次提交走了全自动链路——构建上传、截图替换、提审动作全部脚本化,build 22 加六张新截图,提交发生在凌晨,状态是”正在等待审核”。全自动的价值不在快那几分钟,而在于响应拒绝的回合制里,机器不受情绪和时差影响:修复、构建、重提一气呵成,把人的精力留给真正需要人工的网页表单——订阅商品定价与本地化、商店截图、隐私标签,都是十分钟级的操作。

三轮闯下来的收获,比”过审”本身值钱:EULA 两件套进提审清单、同意弹窗成为产品的正式一环、账号删除从二级页提到一级入口、发布链路全脚本化。审核不是在刁难你,它是在一次性收缴你所有欠下的合规账——早缴比晚缴便宜。

等结果出来,无论过与不过,这一篇都会有续集。续集已经出炉:(二)从立项到上架的全流程自动化,讲的是支撑这三轮闯关的基础设施。


本系列:(一)本文 · 三轮审核闯关 | (二)从立项到上架的全流程自动化