mcpField
A
app-store-review

app-store-review

github.com/dpearson2699测试与质量1.2k4.6k 次安装13 周前更新
代码仓库

关于 app-store-review

面向 iOS 开发团队的 App Store 审核准备技能,用于在提交前检查政策、隐私、支付、权限和元数据风险。它强调依据当前要求和具体归档版本验证证据,并区分提交阻塞项与一般清理事项。

主要功能

  1. 01审核风险与提交检查
  2. 02隐私清单和数据披露核对
  3. 03应用内购买规则检查
  4. 04ATT、权限与能力审查
  5. 05提交、元数据及申诉指导

适用场景

  1. 01提交前审查归档版本
  2. 02核对隐私声明与运行行为
  3. 03检查支付流程和权限配置
  4. 04准备审核说明及申诉证据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dpearson2699/swift-ios-skills --skill app-store-review

安装后在 Claude Code 中输入/app-store-review确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

evals/
evals.json
references/
privacy-manifest.md
review-checklists.md

详细介绍

App Store 审核准备

在提交前发现 App Store 拒绝风险。应将政策、SDK、隐私、权限、支付和元数据检查视为当前版本的证据,而非长期有效的事实。

目录

每次审核都应先获取最新的 App Review 指南、即将实施的要求、截图规范、必须说明理由的 API 文档,以及适用的 storefront/权限支付规则。在每个版本阻塞项旁记录检查日期和来源。然后构建归档并验证确切的提交内容,将阻塞项与常规清理工作分开,修复一类证据不一致问题,再针对重建的归档重新运行相同检查。

对于关键词、截图说明、产品页面元数据或元数据拒绝风险相关的问题,应从合规角度作答,并明确将关键词研究、排名策略、转化优化、截图排序和 A/B 测试交由 app-store-optimization 处理。App Review 元数据指南应仅限于准确性、字段限制、误导性内容风险和截图合规性。从当前版本发布要求中获取带日期的格式、截图和工具链信息。

进行完整的提交就绪情况审核时,应将会阻止上传或审核的问题与常规清理工作分开。交叉核对隐私清单、App Store 隐私营养标签、隐私政策、ATT 状态、运行时网络行为和 SDK 行为;声明必须与观察到的行为一致。

提交阻塞检查

在处理常规清理工作前,应将以下情况升级为阻塞项:

  • 归档未达到当前 Xcode 或平台 SDK 的最低上传要求
  • 隐私证据存在未解决的不一致;请根据 PrivacyInfo.xcprivacy 要求进行核对
  • 支付路径不符合 StoreKit 规则
  • 缺少当前 App Store Connect 规范要求的截图集
  • 审核访问不符合下文指南 2.1 的完整性证据要求

请根据当前指南和确切的归档验证这些内容;不要将旧版发布检查清单中的版本或截图要求沿用到当前版本。

主要拒绝原因及规避方法

指南风险发布证据
2.1 完整性没有占位内容、损坏或空白流程、无法访问且仅限硬件的功能,也没有缺少可用演示凭据和审核备注的登录门槛。
2.3 元数据App 名称、类别、描述、关键词和截图准确呈现已提交的二进制文件和实际 UI。
4.2 最低功能App 除了简单套用网站或对系统行为进行无实质改变的重复实现之外,还提供有意义的 App 专属价值。
2.5.1 软件要求归档使用公开 API,且不会下载会改变已审核功能的代码,除非属于文档记录的例外情况。

请根据当前指南和确切的归档验证这些要求;不要沿用旧版发布检查清单中的版本或截图要求。

PrivacyInfo.xcprivacy —— 隐私清单要求

当你的应用代码、可执行文件、动态库或第三方 SDK 使用 Apple 的必需理由 API 类别,或声明收集的数据/跟踪行为时,必须提供隐私清单。

参见: references/privacy-manifest.md,了解完整结构、理由代码和检查清单。

摘要
  • 必需理由 API 类别包括文件时间戳、系统启动时间、磁盘空间、当前使用的键盘和 UserDefaults;使用这些 API 时,每项都需要获批的理由代码。
  • 最终提交前,请重新检查 Apple 当前的必需理由 API 文档,不要选择宽泛、图省事或自行编造的理由代码。
  • 必需理由 API 声明应放在包含使用该 API 的代码的包中;每个包含与清单相关代码的应用目标、可执行文件、动态库、框架或 SDK 包都需要提供相应的清单声明。
  • 每个会收集数据、使用必需理由 API、启用数据收集/跟踪或联系跟踪域名的 SDK、可执行文件或动态库,都需要在包含相应代码的包中处理清单;SDK 代码不能依赖宿主应用的清单来申报 SDK 自身的使用情况。
  • 清单声明必须与 App Store 隐私营养标签、SDK 行为及应用展示的功能相符。

数据使用、共享与隐私政策(指南 5.1.2)

  • 必须在 App Store Connect 中设置隐私政策 URL,且该 URL 必须能在应用内访问
  • 隐私政策必须准确说明你收集哪些数据、如何使用这些数据,以及与哪些对象共享
  • App Store 隐私营养标签必须与实际的数据收集行为相符
  • 隐私标签、隐私清单、SDK 披露内容和运行时行为应保持一致

App 内购买和 StoreKit 规则(指南 3.1.1)

数字商品、功能、订阅、虚拟货币、移除广告和数字小费通常都必须使用 IAP,除非适用当前指南例外、店面规则或已获批的权限。实体商品和现实世界服务使用常规付款流程。购买前,应显示价格、时长、续订/试用条款、计费频率和取消条款;验证商品分类、恢复购买、权限验证、延迟/中断的购买以及“购买前询问”功能。实现时加载 storekit,并在将某种方案标记为合规前,重新检查当前的地区/外部链接规则。

HIG 合规检查清单

从 review-checklists.md 加载导航、模态窗口、小组件、系统功能、启动屏幕和空状态的完整 HIG 检查项。

App Tracking Transparency(ATT)

何时需要 ATT

如果你的应用会跨其他公司的应用或网站跟踪用户,则必须:

  1. 在发生任何跨应用或跨网站跟踪(包括具备跟踪能力的 SDK 行为)之前,通过 ATTrackingManager.requestTrackingAuthorization 请求许可
  2. 尊重用户的选择——如果用户拒绝许可,就停用跨应用和跨网站跟踪
  3. 不得以同意跟踪作为使用应用功能的前提(例如“接受跟踪,否则无法使用此应用”会被拒绝)
  4. 在 NSUserTrackingUsageDescription 中提供清晰的用途说明,解释跟踪的用途
何时不需要 ATT

如果你不会跨应用或网站跟踪用户,请勿显示 ATT 提示。Apple 会拒绝不必要的 ATT 提示。

ATT 实现
import AppTrackingTransparency

@MainActor
func requestTrackingPermission() async {
    let status = await ATTrackingManager.requestTrackingAuthorization()
    switch status {
    case .authorized:
        // Enable tracking, initialize ad SDKs with tracking
        break
    case .denied, .restricted:
        // Use non-personalized ads and disable cross-app/cross-website tracking
        break
    case .notDetermined:
        // Should not happen after request, handle gracefully
        break
    @unknown default:
        break
    }
}

时机: 在应用进入活跃状态,并且用户了解请求跟踪许可的原因后,再请求 ATT 许可。不要在首次启动时立即显示提示,也不要将其与另一个系统权限提示叠加显示。

欧盟《数字市场法案》(DMA)注意事项

替代分发、浏览器引擎、公证和外部支付方案因地区和权限而异。请重新检查当前店面规则,并将不受支持的方案视为阻碍项。

权限与能力

每项权限都需要对应的有效功能、适用时的具体用途说明,以及匹配的归档行为。请参阅权限与用途说明中的表格和有效的属性列表示例。

提交流程

提交前步骤
  1. **在 Xcode 中归档。**选择 Product > Archive(需要 Distribution 签名身份)。确认归档在 Release 配置下构建成功且没有警告。
  2. **上传到 App Store Connect。**使用 Organizer 窗口(Distribute App > App Store Connect)或 xcodebuild -exportArchive。也可以通过 altool 或 Transporter 自动上传。
  3. **TestFlight 内部测试。**处理完成后,几分钟内即可向内部测试人员(你的团队)提供构建版本。至少在两种设备尺寸上逐一测试所有屏幕和流程。
  4. **TestFlight 外部测试。**首次向外部用户分发前,外部测试组需要通过 Beta App Review。可借此在正式提交前与真实用户进行验证。
  5. **提交 App Review。**在 App Store Connect 中选择构建版本,填写所有元数据字段,附上屏幕截图,然后点击 Submit for Review。审核时间不定;请预留时间应对拒绝、申诉和元数据修正。
加急审核请求

仅在 Apple 记录的关键或有时限要求的情况下申请加急审核,并通过 App Store Connect 的 Contact Us 表单提供简洁、客观的理由。

分阶段发布

请参阅分阶段发布计划,了解发布百分比和 App Store Connect 控制项。

元数据最佳实践

确保名称、副标题、关键词、屏幕截图和预览与提交的二进制文件及实际 UI 相符。不要使用价格、竞争对手相关词语或误导性声明。请遵循元数据合规检查清单中的字段限制和媒体规则,并将调研、排名、转化率、屏幕截图排序和 A/B 测试交由 app-store-optimization 处理。

申诉流程

在 App Store Connect 的 Resolution Center 中提供简洁的证据链:

  • 将拒绝原因对应到所引用的指南和具体提交行为。
  • 如果已修复,请指出确切的更改并重新提交;如果有异议,请说明提交内容如何满足每项相关要求。
  • 附上能够复现合规情况的必要证据,例如可用的演示凭据、屏幕截图或针对性的视频演示。
  • 如果协商仍未解决问题,请通过 Resolution Center 或 App Store Contact 表单(App Review > Appeal)请求 App Review Board 升级处理,并附上完整的提交历史和支持证据。

该委员会对本次提交的决定为最终决定;仍可修改应用并重新提交。

常见错误

  1. **用途说明含糊。**请指出使用该数据的具体功能。
  2. **将代码质量视为审核合规的替代品。**并发和事务正确性不能替代隐私、支付、元数据和权限方面的证据。

审核清单

每次提交前快速检查(完整版本见 references/review-checklists.md):

  • 指南 2.1 的完整性和审核访问权限检查通过提交阻断项
  • App 名称和屏幕截图与二进制文件及当前版本要求一致
  • 隐私证明符合 PrivacyInfo.xcprivacy 要求
  • 已设置隐私政策 URL,且可在 App 内访问
  • 付款流程符合 StoreKit 规则
  • 支持深色模式和动态字体;采用标准导航模式
  • 归档文件和权利配置符合提交阻断项
  • ATT 行为符合 ATT 标准

参考资料

评论

支持 Markdown