跳到正文
返回博客
·约 2 分钟读完

写给独立开发者的 App Store 提审前检查清单

在 App Store Connect 里点“提交以供审核”之前,值得逐项过一遍的清单,按实际操作顺序排列。构建、商店文案、截图与预览、App 内购买、审核备注和提交之后,每一项都写了一句为什么,并附上对应的指南或浏览器工具。

App Store 的拒审大多不是难题。按我们的经验,多半是没人仔细看过的小事:副标题里多了一个词,内购没挂到版本上,一张截图带了透明通道。提交前在真机上手动把这样一份清单过一遍会很有帮助,顺序就是实际操作的顺序。每一项都写了原因和去哪里查。

为什么是这个顺序

  • 先查构建。 换了构建,所有依赖构建的东西都得重查:权限文案、隐私清单、截图里的界面。
  • 再查文案和素材。 版本进入“等待审核”之后,App Store Connect 不允许再上传或修改截图和预览视频,图错了只能先把版本撤出审核。
  • 最后查内购和备注。 它们依赖最终的构建和最终的文案,也是最后十分钟里最容易忘的。

构建

  1. 用的是发布签名。 开发签名的构建可以正常上传,提交后却可能变成 Invalid Binary(无效二进制)。用我们的 描述文件查看器 打开内嵌的描述文件,确认是 App Store 类型,且权限列表里没有 get-task-allow。
  2. 每一项权限(entitlement)都说得出理由。 一句话解释不清的就删掉。权限开得过宽,在 Mac App Store 上本身就是拒审理由,见 Mac App Store 提审清单。
  3. 隐私清单在包里。 Apple 文档写明,自 2024 年 5 月 1 日起,用到“需要声明原因的 API”(required reason API)却没在 PrivacyInfo.xcprivacy 里写明原因的应用,App Store Connect 不再接收。可以用 隐私清单生成器 生成或检查。
  4. 每个权限都有用途说明,而且是在解释。 代码碰到的每一类受保护资源,Apple 都要求有用途说明(purpose string)。写清楚拿来做什么,不要施压(“不允许就用不了”),那在 5.1.1 下会被视为强迫授权。用 IPA 检查器 直接从 .ipa 里读出这些文案核对。
  5. 出口合规键已经设置。 Info.plist 里没有 ITSAppUsesNonExemptEncryption 的话,每次上传 App Store Connect 都会让你重新回答出口合规问题。只有确实不用加密、或只用豁免加密时才设成 NO。
  6. 调试开关不进正式包。 测试时用来解锁付费功能、或显示占位价格的开关,必须放在 #if DEBUG 里。指南 2.5.19 禁止隐藏或未说明的功能,正式包里留着一个免费解锁开关,正好就是这种情况。
  7. 图标来自同一张不透明的 1024 × 1024 原图。 用 App 图标生成器 一次生成整套,避免某个尺寸是旧图或带透明。
  8. 通用链接能打开。 如果用了 associated domains,在审核员点链接之前,先用 AASA 校验工具 检查线上的 apple-app-site-association 文件。
  9. 列出的每种语言都翻译完了。 把字符串目录拖进 xcstrings 翻译进度。完成度 70% 的语言,界面中间会突然冒出英文。
  10. 冷启动没问题,iPhone 和 iPad 都试过。 在干净的设备上安装,拒绝所有权限,在没有数据的情况下走一遍首次路径。在我们的送审记录里,只支持 iPhone 的应用也是在 iPad Air 上审的;指南 2.4.1 也写了 iPhone 应用应尽可能能在 iPad 上运行。详见 2.1:App 完整性。

商店文案

  1. 每个字段都在 Apple 的长度限制内。 名称 30 字符,副标题 30,推广文本 170,描述 4000,更新说明 4000,关键词 100。把每个语言粘进 App Store 元数据检查工具。
  2. 关键词字段里没有浪费的词。 名称或副标题里已有的词、已有词的复数形式,都是浪费。完整规则见 关键词字段怎么填。
  3. 没有价格词。 名称、副标题或截图里出现“免费”“5 折”或价格,会招来 2.3.7。见 价格词指南。
  4. 没有别人的品牌。 副标题或关键词里写竞品名字,是 4.1(c) 或 5.2.5 的问题。见 元数据里的品牌名。
  5. 商店名和图标下面的名字一致, 每种语言都要一致。见 2.3.8:名字对不上。
  6. 付费功能有标注。 描述里提到需要购买的功能,要写明。见 2.3.2:付费功能。
  7. 更新说明写的是真实改动。 指南 2.3.12 只允许 bug 修复和小改进用笼统的说明。
  8. 推广文本不是第二个关键词栏。 Apple 明确说推广文本不影响搜索排名,用它写当下的新内容就好。
  9. 技术支持和隐私政策链接都能打开。 Apple 把失效链接列为最常见的审核问题之一。

截图与预览

  1. 截图尺寸被接受,且没有 alpha 通道。 App Store Connect 要求至少一张“带灵动岛的 iPhone(中尺寸屏)”截图,支持 iPad 的话还要 13 英寸 iPad 截图;帮助文档也写明图片不能带 alpha 通道或透明。用 截图尺寸工具 检查并修正。
  2. 截图拍的是真实应用,是免费用户看到的样子。 不是启动页,也不是这个构建里没有的功能。见 2.3.3:截图。
  3. 预览视频符合规格。 15 到 30 秒,最高 30 帧每秒,内容只能是应用本身的录屏(指南 2.3.4)。用 预览视频检查工具 查一下文件。

App 内购买

  1. 每个商品都和版本在同一个提交里。 Apple 帮助文档的原话是,版本、订阅组和所有要一起审的内购 "must all be added to the same draft submission before you click Submit for Review"(必须在点提交之前加进同一个草稿提交);每种类型的第一个内购必须随新版本一起提交。你不加,它们就不会跟着走。我们漏过一个,结果就是一封 2.1(b) 拒审。
  2. 付费墙在真机和 iPad 上都能用。 商品能加载,购买按钮有反应,恢复购买正常。付费墙卡住是 2.1(a),而审核员手里可能是一台 iPad。
  3. 价格是想清楚之后定的。 用 佣金计算器 算一下扣掉 Apple 分成后你实际拿到多少。

审核备注和演示账号

  1. 备注里写清楚不好找的东西。 付费功能在哪里;每一种后台模式拿来做什么(见 2.5.4:后台模式);如果应用的网络功能看起来像 VPN,说明它实际做什么(见 VPN 问卷)。备注最多 4000 字节。
  2. 演示账号能登录,而且不会过期。 应用没有登录的话,确认没有勾选“需要登录”。联系电话要按国际格式填,不带国家代码的纯数字填不进去。

提交之后

  1. 别去动它。 Apple 说通常至少 50% 的提交在 24 小时内审完,90% 在 48 小时内。版本发布方式(手动、过审即发布、指定日期)在提交前选好,别等过审再想。
  2. 如果被拒, 先看清条款编号再动手。一步步的处理方法见 被拒之后怎么办。
  3. 上架之后, 用我们的 App Store 排名查询 看应用在各国榜单里的位置;卖订阅的话,用 订阅指标计算器 跟踪数据。

一分钟自检

如果只有一分钟,就做最容易漏掉的三件事:打开版本页,确认每个内购都在这次提交里;把每个语言的副标题粘进 元数据检查工具;在 iPad 模拟器上启动一次构建。更多发版用的浏览器工具在 工具箱页面。

以上参考了 Obelisk Club 自己的应用收到过的拒审。Apple 的措辞和 App Store Connect 都会变,提交前请以当前 App Review 指南和 App Store Connect 帮助文档为准。

作者

独立开发者,在 Obelisk Club 做本地优先的 Mac 与 iOS 效率应用。 关于作者 →