mcpField
A
axiom-app-store-ref

axiom-app-store-ref

github.com/charleswiltgen开发1.2k106 次安装今天更新
代码仓库

关于 axiom-app-store-ref

面向开发者的 App Store 提交要求参考技能,涵盖元数据、隐私、审核、年龄分级、合规和构建上传等主题。适合查询具体规则与要求,不负责提交就绪评估或拒审排查。

主要功能

  1. 01元数据字段与限制查询
  2. 02隐私清单和 API 要求
  3. 03审核指南与年龄分级
  4. 04欧盟合规及 IAP 流程
  5. 05构建上传与处理说明

适用场景

  1. 01核对应用名称和截图要求
  2. 02确认隐私清单字段及 API 类别
  3. 03查询 EU DSA 商家身份要求
  4. 04了解加密和构建上传规则

安装

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

$npx skills add https://github.com/charleswiltgen/axiom --skill axiom-app-store-ref

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

附带文件references/app-review-guidelines.mdreferences/expert-review-checklist.md

详细介绍

App Store 提交参考

概述

App Store 所有提交要求的完整参考:

  • 第 1 部分 — 必填元数据字段(描述、屏幕截图、关键词、App Review 信息)
  • 第 2 部分 — 隐私要求(清单架构、隐私营养标签、ATT、Required Reason API)
  • 第 3 部分 — App Review Guidelines 速查(第 1 至 5 节全部内容)
  • 第 4 部分 — 年龄分级系统(5 个等级、功能、地区差异)
  • 第 5 部分 — 出口合规(加密决策树)
  • 第 6 部分 — 账户和身份验证要求(删除、SIWA)
  • 第 7 部分 — 变现和 IAP 提交流程
  • 第 8 部分 — 欧盟专项合规(DSA 交易者身份)
  • 第 9 部分 — 构建版本上传和处理
  • 第 10 部分 — WWDC25 变更(草稿提交、辅助功能标签、标签)

何时使用此技能

适用场景
  • 查询特定元数据字段要求或字符限制
  • 查看特定主题对应的 App Review 指南编号
  • 验证隐私清单架构字段或 Required Reason API 类别
  • 了解年龄分级和新增功能声明
  • 查看 DSA 交易者身份的欧盟合规要求
  • 了解 IAP 提交流程和审核流程
  • 准备要上传的构建版本(SDK 要求、加密、签名)
不适用场景
  • 判断应用是否已准备好提交(使用 app-store-submission)
  • 排查审核被拒问题(使用 app-store-diag)
  • 实施 App 内购买项目(使用 storekit-ref)
  • 编写隐私清单代码(使用 privacy-ux)
  • 审核辅助功能合规性(使用 accessibility-diag)

相关技能

  • app-store-submission — 提交前检查清单和工作流的规范技能
  • app-store-diag — 审核被拒问题排查和申诉指南
  • privacy-ux — 隐私清单实施、ATT 用户体验、权限请求
  • storekit-ref — 用于实施 IAP 的 StoreKit 2 API 参考
  • accessibility-diag — 辅助功能合规扫描和 VoiceOver 测试

关键术语

术语定义
App Store Connect用于管理应用元数据、构建版本、定价、TestFlight 和分析数据的 Web 门户和 API
App ReviewApple 的人工审核流程,会根据 App Review Guidelines 评估每次应用更新
隐私清单PrivacyInfo.xcprivacy 文件,用于声明数据收集、跟踪域名和 Required Reason API 的使用情况
Required Reason API需要声明使用原因的系统 API(文件时间戳、磁盘空间、用户默认设置等)
隐私营养标签App Store 隐私卡片,展示应用收集哪些数据以及如何使用这些数据
DSA 交易者身份欧盟《数字服务法》分类,用于判定你是否为向欧盟消费者销售产品或服务的“交易者”
构建字符串每个上传的构建版本的唯一标识符(例如,“1.2.3.4”),与版本号分开
Bundle ID反向域名标识符(例如,“com.company.app”),用于在 Apple 生态系统中唯一标识应用

第 1 部分:必填元数据字段

不可变字段(创建后无法更改)

这些字段一经设置便会锁定,请谨慎选择:

  • Bundle ID — 必须与 Xcode 项目完全一致
  • SKU — 内部标识符,不会向用户显示
  • IAP Product ID — 创建后无法更改或重复使用
  • 订阅时长 — 创建订阅后即锁定
应用信息
字段必填可本地化最大长度备注
应用名称是是30 个字符在 App Store 上必须唯一
副标题否是30 个字符显示在搜索结果中的应用名称下方
描述是是4000 个字符纯文本,不支持 HTML 或富文本格式
宣传文本否是170 个字符无需重新提交即可编辑
关键词是是100 字节以逗号分隔,每个关键词需超过 2 个字符
更新内容是*是4000 个字符*除首个版本外,所有版本都必须填写
版权是否—格式:“YYYY Company Name”
支持 URL是是—必须链接到实际联系信息
营销 URL否是—可选的宣传页面
隐私政策 URL是是—必须使用 HTTPS,且可公开访问
视觉素材
素材必填可本地化规格
应用图标是否1024x1024 PNG,不含 Alpha 通道,不带圆角
屏幕截图是是按设备尺寸提供,每种语言地区、每种设备需提供 2-10 张
应用预览否是每种语言地区、每种设备尺寸最多 3 个视频
屏幕截图要求

格式:.jpeg、.jpg、.png。每种语言地区、每种设备尺寸最少 1 张,最多 10 张。

备用方案:仅提供最高分辨率的截图 — App Store 会自动缩放到较小尺寸。必需:iPhone 需提供 6.9" 或 6.5" 尺寸,iPad 需提供 13" 尺寸。

设备竖屏横屏
iPhone 6.9"(Air、17 Pro Max、16 Pro Max)1260x27362736x1260
iPhone 6.5"(14 Plus、13 Pro Max、XS Max)1284x2778 或 1242x26882778x1284 或 2688x1242
iPhone 6.3"(17 Pro、16 Pro、16、15 Pro)1179x2556 或 1206x26222556x1179 或 2622x1206
iPhone 6.1"(17e、16e、14、13、12)1170x2532、1125x2436 或 1080x23402532x1170、2436x1125 或 2340x1080
iPhone 5.5"(8 Plus、7 Plus)1242x22082208x1242
iPad 13"(Pro M5/M4、Air M4/M3)2064x2752 或 2048x27322752x2064 或 2732x2048
iPad 11"(Pro、Air、mini、第 10 代)1488x2266 或 1668x24202266x1488 或 2420x1668
Mac1280x800、1440x900、2560x1600 或 2880x1800—
Apple TV1920x1080 或 3840x2160—
Apple Vision Pro3840x2160—

屏幕截图必须展示应用的实际使用情况。不允许仅展示标题图、登录界面、启动画面或其他平台的界面。已获批版本的屏幕截图无法更新 — 必须创建新版本。

应用预览视频规格
规格值
时长15-30 秒
最大文件大小500 MB
最大帧率30 fps
每种设备/语言地区的上限3
H.26410-12 Mbps,.mov/.m4v/.mp4,256 kbps AAC 立体声
ProRes 422 HQ约 220 Mbps VBR,仅限 .mov,PCM 或 256 kbps AAC 立体声
音频采样率44.1 或 48 kHz
方向竖屏或横屏(Mac/tvOS/visionOS:仅横屏)

注意事项:处理最多可能需要 24 小时 — 上传预览后不要立即提交审核。必须启用所有音轨(禁用音轨会导致审核被拒)。产品页面上,预览始终显示在屏幕截图之前。

应用图标要求
规格要求
尺寸1024 x 1024 像素
格式PNG
色彩空间sRGB 或 P3
Alpha 通道不允许
圆角不允许(系统会自动应用)
图层/透明度不允许
内容无论应用的实际评级如何,都必须适合 4+ 级评级
App 审核信息
字段必填备注
联系人名是审核联系人
联系人姓是审核联系人
联系人电子邮件是必须有人监控
联系人电话是请包含国家代码
审核备注否最多 4000 字节;说明不明显的功能
登录用户名如果需要登录审核期间不得过期
登录密码如果需要登录审核期间不得过期
附件否最多 10 个文件,总计不超过 512 MB
元数据规则(指南 2.3)
  • App 名称必须唯一,最多 30 个字符
  • 关键词不得包含商标词、热门 App 名称或价格相关词语(“free”“sale”)
  • 屏幕截图必须展示 App 的实际使用情况,而不只是营销图片
  • 图标、屏幕截图和预览内容必须适合 4+ 评级,即使 App 的评级更高也不例外
  • “For Kids”和“For Children”仅供儿童类别使用
  • 屏幕截图中不得出现其他移动平台的名称或图像(不得出现 Android 手机、Windows 徽标)
  • 元数据必须准确反映 App 功能;误导性元数据可能导致审核拒绝
本地化要求
方面详情
最低要求必须提供主要语言;其他所有本地化内容均为可选
每种语言的元数据App 名称、副标题、描述、关键词、“What's New”、屏幕截图
宣传文本可本地化,且无需重新提交即可编辑
屏幕截图可因语言而异(展示本地化界面)
App 预览可因语言而异(展示本地化音频/界面)
URL 字段支持 URL 和营销 URL 可因语言而异

进行本地化时,请提供与本地化界面相符的屏幕截图。审核人员会检查屏幕截图是否准确展示了 App 在各语言环境中的实际情况。

类别选择
主要类别次要类别规则
必填可选选择最能描述 App 的类别
必须准确可补充主要类别类别不准确可能导致审核拒绝(2.3.7)
游戏有子类别—游戏还必须选择最多 2 个游戏子类别

可选类别:图书、商务、开发者工具、教育、娱乐、金融、餐饮、游戏、图形与设计、健康与健身、生活方式、杂志与报纸、医疗、音乐、导航、新闻、照片与视频、效率、参考、购物、社交网络、体育、旅游、工具、天气。


第 2 部分:隐私要求

隐私政策(指南 5.1.1(i))

以下两个位置都必须提供:

  1. App Store Connect 元数据(隐私政策 URL 字段)
  2. App 本身内部(可从设置或类似位置访问)

隐私政策必须说明:

  • 收集哪些数据以及通过何种方式收集
  • 收集的数据的所有用途
  • 与第三方共享数据的做法
  • 数据保留和删除政策
  • 用户如何撤回同意
隐私清单架构(PrivacyInfo.xcprivacy)

NSPrivacyTracking              
NSPrivacyTrackingDomains       
NSPrivacyCollectedDataTypes    
NSPrivacyAccessedAPITypes      
NSPrivacyCollectedDataTypes 条目

数组中的每个字典都包含:

键类型描述
NSPrivacyCollectedDataType字符串类别键(例如,“NSPrivacyCollectedDataTypeName”)
NSPrivacyCollectedDataTypePurposesArray<String>此数据类型的用途键
NSPrivacyCollectedDataTypeLinked布尔值此数据是否与用户身份关联?
NSPrivacyCollectedDataTypeTracking布尔值此数据是否用于追踪?
NSPrivacyAccessedAPITypes 条目

数组中的每个字典都包含:

键类型描述
NSPrivacyAccessedAPIType字符串API 类别标识符
NSPrivacyAccessedAPITypeReasonsArray<String>已批准的使用原因代码
完整的 PrivacyInfo.xcprivacy 示例
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>NSPrivacyTracking</key>
    <false/>
    <key>NSPrivacyTrackingDomains</key>
    <array/>
    <key>NSPrivacyCollectedDataTypes</key>
    <array>
        <dict>
            <key>NSPrivacyCollectedDataType</key>
            <string>NSPrivacyCollectedDataTypeEmailAddress</string>
            <key>NSPrivacyCollectedDataTypeLinked</key>
            <true/>
            <key>NSPrivacyCollectedDataTypeTracking</key>
            <false/>
            <key>NSPrivacyCollectedDataTypePurposes</key>
            <array>
                <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
            </array>
        </dict>
    </array>
    <key>NSPrivacyAccessedAPITypes</key>
    <array>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>CA92.1</string>
            </array>
        </dict>
    </array>
</dict>
</plist>
API 类别标识符
类别标识符字符串
文件时间戳NSPrivacyAccessedAPICategoryFileTimestamp
系统启动时间NSPrivacyAccessedAPICategorySystemBootTime
磁盘空间NSPrivacyAccessedAPICategoryDiskSpace
当前键盘NSPrivacyAccessedAPICategoryActiveKeyboards
用户默认设置NSPrivacyAccessedAPICategoryUserDefaults
生成汇总隐私报告
Xcode > Product > Archive > Generate Privacy Report

此操作会生成一份 PDF,总结应用及其所有嵌入式框架的隐私清单。

隐私清单注意事项:

  • NSPrivacyCollectedDataType 或 NSPrivacyCollectedDataTypePurposes 的自定义字符串值会被 Xcode 静默拒绝——必须使用 Apple 预定义的常量
  • iOS 17 会在用户拒绝跟踪后,自动阻止与已声明跟踪域名的连接
  • 必须声明 IP 地址收集(作为位置、设备 ID 或诊断数据)
  • 必须声明 Web 视图数据收集
  • 你有责任声明应用中第三方 SDK 收集的所有数据
  • 某些 SDK 默认启用跟踪,除非明确禁用——这会导致意外跟踪
  • 无论 ATT 权限如何,均绝不允许指纹识别
  • 自 2024 年 5 月 1 日起:缺少必需理由 API 声明会导致自动拒绝(不进行人工审核)
必需理由 API 类别
类别涵盖的 API常见理由
文件时间戳NSFileCreationDate、NSFileModificationDate、NSURLContentModificationDateKeyDDA9.1(向用户显示)、C617.1(在应用容器内)
系统启动时间systemUptime、mach_absolute_time35F9.1(测量经过的时间)
磁盘空间NSFileSystemFreeSize、NSFileSystemSize、volumeAvailableCapacityKeyE174.1(写入前检查)、85F4.1(向用户显示)
当前键盘activeInputModes54BD.1(针对键盘自定义 UI)
用户默认设置UserDefaults(所有访问均需声明)CA92.1(在应用组内访问)、1C8F.1(在同一应用内访问)
App 隐私详情(营养标签)
数据类型类别
类别示例
联系信息姓名、电子邮件地址、电话号码、实际地址
健康与健身健康数据、健身数据
财务信息付款信息、信用信息
位置精确位置、大致位置
敏感信息种族或族裔数据、性取向、宗教信仰、生物特征
联系人通讯录联系人
用户内容照片、视频、音频、游戏内容、客户支持消息
浏览历史记录网页浏览历史记录
搜索历史记录应用内搜索历史记录
标识符用户 ID、设备 ID
购买记录购买历史记录
使用数据产品交互、广告数据、应用启动、轻点、滚动
诊断数据崩溃数据、性能数据
周边环境环境扫描(例如,AR 数据)
身体手部、头部(例如,visionOS 中的手部追踪)
用途类别
用途说明
第三方广告展示第三方广告或与广告网络共享数据
开发者广告/营销你自己的营销活动
分析了解用户行为并衡量效果
产品个性化自定义功能、内容推荐
应用功能应用正常运行所必需(例如,身份验证、数据同步)
其他上述未列出的任何用途
跟踪和收集的定义

**“收集”**是指数据传输到设备外,且可用于当前请求服务所需范围之外的用途。仅在设备端处理不属于收集。

**“跟踪”**是指:

  • 将应用中的用户/设备数据与第三方数据关联,用于广告或效果衡量;或
  • 与数据经纪商共享用户/设备数据
App 跟踪透明度(ATT)

如果你的 App 按照上述 Apple 定义进行“跟踪”,则必须遵守此要求。

  • 在 Info.plist 中添加 NSUserTrackingUsageDescription(说明为何需要跟踪)
  • 在跟踪前调用 ATTrackingManager.requestTrackingAuthorization()
  • 遵守授权结果:
    • .authorized — 用户已授予跟踪权限
    • .denied — 用户拒绝跟踪;不得进行跟踪
    • .notDetermined — 尚未向用户请求授权
    • .restricted — 设备级限制禁止跟踪

应在适当的情境下请求授权,而非在首次启动时请求。

常见用途说明(NS*UsageDescription)

对于 App 请求的每项系统权限,都必须包含以下 Info.plist 键:

权限Info.plist 键
相机NSCameraUsageDescription
麦克风NSMicrophoneUsageDescription
照片图库(读取)NSPhotoLibraryUsageDescription
照片图库(写入)NSPhotoLibraryAddUsageDescription
位置(使用 App 时)NSLocationWhenInUseUsageDescription
位置(始终)NSLocationAlwaysAndWhenInUseUsageDescription
通讯录NSContactsUsageDescription
日历(完全访问权限)NSCalendarsFullAccessUsageDescription
提醒事项(完全访问权限)NSRemindersFullAccessUsageDescription
健康NSHealthShareUsageDescription、NSHealthUpdateUsageDescription
运动与健身NSMotionUsageDescription
蓝牙NSBluetoothAlwaysUsageDescription
Face IDNSFaceIDUsageDescription
本地网络NSLocalNetworkUsageDescription
跟踪NSUserTrackingUsageDescription
语音识别NSSpeechRecognitionUsageDescription
Apple MusicNSAppleMusicUsageDescription

缺少用途说明会导致 App 立即被拒。用途说明文本必须清楚解释为何 App 的功能需要此权限。

第三方 SDK 隐私清单

Apple 维护着一份常用 SDK 清单,这些 SDK 必须提供隐私清单。从 2024 年春季开始,如果 App 包含这些 SDK 却未提供隐私清单,提交时将被标记。

第三方 SDK 应在其框架包中包含自己的 PrivacyInfo.xcprivacy。汇总隐私报告会合并 App 及其内嵌框架中的所有清单。

如果第三方 SDK 未包含隐私清单,你必须在 App 的隐私清单中声明其数据收集情况。


第 3 部分:App 审核指南速查

完整的指南索引(第 1 至 5 节)请参阅 references/app-review-guidelines.md。

最常见的拒绝原因

完整的前 10 大拒绝原因及其占比表,请参阅 references/app-review-guidelines.md。

App 审核时间线
阶段典型时长
等待审核几分钟至几小时
正在审核几分钟至 24 小时
总计(第 90 百分位)不到 24 小时
总计(特殊情况)最长 7 天
加急审核当天至 24 小时(若获批准)

节假日和 iOS 主要版本发布期间,审核时间会延长。请据此安排提交时间。


第 4 部分:年龄分级系统

五级分级系统(2026 年 1 月 31 日更新)
分级触发条件
4+不含不当内容
9+偶尔或轻度出现:亵渎用语、卡通/幻想暴力、恐怖/惊吓主题。含有战利品箱
13+频繁或强烈出现:亵渎用语或粗俗幽默。偶尔出现:酒精/烟草/毒品相关内容、性内容/裸露、写实暴力
16+不受限制的网页访问、频繁提供医疗/治疗信息、成熟/暗示性主题
18+频繁或强烈出现:酒精/烟草/毒品使用、性内容/裸露、写实暴力。含有真钱元素的模拟赌博
未分级未完成问卷的 App 无法发布
能力声明(新增,WWDC25)

如果 App 包含以下能力,必须进行声明:

能力声明条件
消息/聊天用户之间存在任何 App 内消息交流
用户生成内容用户可以发布、分享或上传其他人可见的内容
广告App 显示来自任何广告网络的广告
家长控制App 具有家长限制或家庭功能
年龄验证App 会验证用户年龄,以限制其访问受限内容

这些声明会与年龄分级一起显示在 App Store 产品页面上,为家长和用户提供更多透明信息。

区域差异

不同地区的年龄分级对应关系有所不同:

Apple 分级澳大利亚巴西韩国德国(USK)
4+4+L(全年龄)全年龄0
9+9+A1012+6
13+13+A1215+12
16+15+A1619+16
18+R 18+A1819+18

年龄分级问卷会根据你的回答自动生成适用的区域分级。

年龄分级最佳实践
  • 保守地填写问卷;分级过低会导致审核被拒
  • 如果 App 可访问不受限制的网页内容(未设置内容过滤器的 WebView),其最低分级为 16+
  • 由于审核要求,用户生成内容类 App 通常需要至少 13+
  • 模拟赌博(即使不涉及真实货币)至少需要 9+
  • 游戏玩法中出现逼真的暴力内容,至少需要 13+
年龄分级问卷主题

问卷涵盖以下内容类别:

类别选项
卡通或幻想暴力无、偶尔/轻度、频繁/强烈
逼真暴力无、偶尔/轻度、频繁/强烈
脏话或粗俗幽默无、偶尔/轻度、频繁/强烈
成人/暗示性主题无、偶尔/轻度、频繁/强烈
酒精、烟草或药物的使用或提及无、偶尔/轻度、频繁/强烈
性内容和裸露无、偶尔/轻度、频繁/强烈
恐怖/惊悚主题无、偶尔/轻度、频繁/强烈
模拟赌博无、偶尔/轻度、频繁/强烈
医疗/治疗信息无、偶尔/轻度、频繁/强烈
不受限制的网页访问是/否

系统会根据你的回答自动计算 App 在所有地区的年龄分级。


第 5 部分:出口合规

三级加密系统
级别加密类型所需文档
豁免Apple OS 内置(通过 URLSession 实现的 HTTPS、AES 数据保护、CryptoKit、Keychain、Secure Enclave)无——设置 ITSAppUsesNonExemptEncryption = NO
标准行业标准算法(经 IEEE、IETF、ISO、ITU、ETSI、3GPP 批准)仅需法国 ANSSI 声明(如果在法国分发)
专有标准组织未采用的自定义/未发布算法美国 CCATS + 法国声明(如果在法国分发)
加密决策树
Does your app use encryption?
├── No → ITSAppUsesNonExemptEncryption = NO → Done
├── Only Apple OS encryption (HTTPS, Keychain, CryptoKit)?
│   ├── Yes → ITSAppUsesNonExemptEncryption = NO → Done
│   │         (May need annual BIS self-classification report)
│   └── No → Industry-standard algorithm (AES, RSA, etc.)?
│       ├── Yes → ITSAppUsesNonExemptEncryption = YES
│       │         French declaration if distributing in France
│       │         Upload docs → receive ITSEncryptionExportComplianceCode
│       └── No (custom/proprietary) →
│           ITSAppUsesNonExemptEncryption = YES
│           US CCATS required (~2 business days)
│           French declaration if France
│           Upload docs → receive ITSEncryptionExportComplianceCode
Info.plist 键

<key>ITSAppUsesNonExemptEncryption</key>
<false/>


<key>ITSAppUsesNonExemptEncryption</key>
<true/>
<key>ITSEncryptionExportComplianceCode</key>
<string>YOUR_COMPLIANCE_CODE</string>

在 Info.plist 中设置 ITSAppUsesNonExemptEncryption,即可跳过每次提交时的加密问卷。

豁免加密用途

无需文档:

  • HTTPS/TLS(URLSession、Network.framework、WKWebView)
  • Secure Enclave、Keychain、生物识别认证
  • Apple 文档中所述的 CryptoKit、Security.framework
  • 密码哈希(bcrypt、scrypt、PBKDF2)
非豁免加密用途

需要文档:

  • 自定义加密算法
  • 将 OpenSSL、libsodium 用于非标准用途
  • 端到端加密消息传递
  • VPN 实现
  • 自定义 DRM 系统
法国特定要求

进出口受 ANSSI 管制。银行和医疗 App 可获豁免。适用范围:安全存储、安全通信、安全/防病毒 App。


第 6 部分:账户和身份验证

账户删除(自 2022 年 6 月起为必需)

支持创建账户的应用必须提供账户删除功能。要求如下:

要求详情
完全删除必须彻底删除账户,而不仅仅是停用
便于查找必须可从应用设置中访问,不能藏在支持工单流程中
告知时间告知用户删除需要多长时间
确认完成删除完成后通知用户
删除共享 UGC必须处理与他人共享的用户生成内容
撤销 SIWA 令牌对于使用 Sign in with Apple 的账户,调用 Apple 的令牌撤销端点
处理订阅提醒用户仍有有效订阅,并引导其前往订阅管理页面
撤销 Sign in with Apple 令牌
// Server-side: revoke SIWA tokens when account deleted
// POST https://appleid.apple.com/auth/revoke
// Parameters: client_id, client_secret, token, token_type_hint

账户删除时未撤销 SIWA 令牌是常见的拒绝原因。

Sign in with Apple(指南 4.8)

**适用情形:**应用提供任何第三方或社交登录选项时(Google、Facebook、Twitter,或通过第三方提供商进行的电子邮件/密码登录)。

例外情况——无需提供 SIWA
  • 应用仅供公司员工使用(内部企业应用)
  • 应用用于教育或企业,且已有现成的机构身份验证
  • 应用使用政府或行业支持的公民身份识别系统
  • 应用是特定第三方服务的客户端(例如 Gmail 应用、Slack)

需要提供 SIWA 时,必须将其作为与其他登录方式同样醒目的选项。不能将其隐藏或降低其视觉权重。

账户删除实施检查清单
步骤详情
1. 添加 UI 入口在设置页面中清晰标注“删除账户”
2. 说明后果显示将被删除的内容(数据、订阅、购买项目)
3. 要求确认用户必须明确确认删除
4. 处理有效订阅引导用户在删除前取消有效订阅
5. 执行删除从服务器中删除所有用户数据
6. 撤销 SIWA 令牌如果使用过 SIWA,则调用 Apple 的撤销端点
7. 向用户确认删除完成后,通过电子邮件或应用内通知确认
8. 明确时间范围说明删除需要多长时间(立即、30 天等)

Apple 会特别拒绝以下应用:

  • 要求用户拨打电话号码才能删除账户
  • 要求用户发送电子邮件来申请删除账户
  • 仅提供账户停用(隐藏个人资料),而非完全删除
  • 未处理 SIWA 令牌撤销

第 7 部分:变现与 IAP

IAP 提交流程

应用内购买有独立于应用提交的审核流程:

情况处理方式
首次提交 IAP必须与新版本应用一同提交
后续 IAP可独立于应用更新单独提交
IAP 元数据变更单独提交审核
IAP 价格变更无需审核即可生效
必需的 IAP 元数据
字段必需说明
Reference Name是内部名称(用户不可见)
Product ID是唯一标识符,删除后不可重复使用
Type是消耗型、非消耗型、自动续期型、非续期型
Price是从 Apple 的价格档位中选择
Display Name是可本地化,向用户显示
Description是可本地化,向用户显示
Screenshot是一张展示 IAP 使用场景的截图
Review Notes否说明 IAP 解锁的内容
IAP 状态流转
Missing Metadata → Ready to Submit → Waiting for Review → In Review → Approved
                                                                    → Rejected

IAP 必须处于“Ready to Submit”状态,才能包含在应用提交中。

订阅规则(指南 3.1.2)
规则详情
持续价值订阅必须长期持续提供价值
最短时长订阅期限至少为 7 天
跨设备必须在用户可使用该应用的所有设备上均可使用
条款透明明确说明价格、期限、自动续订和取消方式
不得移除功能不得移除用户此前已付费购买的功能,以此强制用户订阅
宽限期支持账单宽限期(重试期间用户仍可保留访问权限)
升级/降级必须支持在订阅组内更改计划
盲盒(指南 3.1.1)

提供盲盒或随机物品机制的应用,必须在购买前披露获得各类物品的概率。

外部支付资格
类别指南允许的内容
阅读器应用3.1.3(a)链接到网站,以访问此前购买的内容(杂志、报纸、书籍、音频、音乐、视频)
多平台服务3.1.3(b)跨平台订阅(例如 Netflix、Spotify)
企业服务3.1.3(c)面向组织而非个人消费者的 B2B 应用
个人对个人服务3.1.3(d)实时的一对一服务(辅导、咨询、网约车)
实物商品/服务3.1.3(e)在应用之外消费的商品(外卖、服装、实体订阅)

这些类别的应用可以接受 IAP 系统以外的付款。

订阅组架构
概念详情
订阅组相关订阅等级的集合(例如 Basic、Pro、Premium)
服务级别组内的等级;决定升级/降级行为
升级转至更高服务级别(立即生效,按比例计费)
降级转至更低服务级别(在下次续订时生效)
同级变更相同服务级别,不同时长(月付 ↔ 年付)
家人共享可针对每个订阅组启用
订阅定价
功能详情
价格档位Apple 在 175 多个店面提供 900 多个价格点
价格均衡Apple 会自动均衡不同货币的价格
自定义定价可为每个店面设置自定义价格
入门优惠免费试用、按使用付费、预付费
推广优惠面向现有订阅者/已流失的订阅者;需要服务器签名的 JWS
召回优惠面向已流失的订阅者;由系统自动展示
优惠码可分发的免费或折扣访问码
订阅恢复购买

所有订阅应用都必须实现“恢复购买”功能。App Review 期间会对此进行测试。通过以下方式实现:

try await AppStore.sync()

如果缺少“恢复购买”功能或该功能无法正常使用,应用将被拒绝。

免费试用最佳实践
做法详情
显示试用时长在用户确认前明确显示试用时长
试用后价格显示试用结束后将收取的价格
取消方式说明如何在试用结束前取消
不使用暗黑模式不要让取消操作难以进行或难以找到
提醒可考虑在试用结束前发送推送通知

第 8 部分:欧盟特定合规要求

###《数字服务法》(DSA)经营者身份

适用范围: 在欧盟(27 个成员国)分发的所有应用

时间线: 自 2025 年 2 月 17 日起,未声明经营者身份的应用将面临从欧盟 App Store 下架。

什么是经营者身份?

这是一项自我评估:您是否以“经营者”(向欧盟消费者销售商品/服务)的身份行事,还是非经营者(业余爱好、开源、非商业)?Apple 无法替您判断。

交易者要求

如果你声明自己是交易者,则必须提供:

字段必填验证方式
法定名称是—
地址是—
电话号码是通过 2FA 验证
电子邮箱地址是通过 2FA 验证
公司注册信息如适用—
VAT ID如适用—

这些联系信息会显示在你的欧盟产品页面上。

在 App Store Connect 中声明
App Store Connect > Users and Access > Developer Profile > Trader Status

为每个 App 选择你的交易者身份。如果你同时有付费 App 和免费 App,每个 App 的交易者分类可能不同。

欧盟替代分发

根据《数字市场法》(DMA),Apple 允许在欧盟进行替代 App 分发:

  • 替代 App 市场
  • 网页分发(经过公证的 App)
  • 替代支付处理

这些方式需要单独的商业条款(Alternative Terms Addendum)和额外的合规步骤。详情请参阅 Apple 的欧盟开发者文档。

欧盟 27 个成员国

在以下任何地区分发的 App 都必须符合 DSA 要求:

奥地利、比利时、保加利亚、克罗地亚、塞浦路斯、捷克、丹麦、爱沙尼亚、芬兰、法国、德国、希腊、匈牙利、爱尔兰、意大利、拉脱维亚、立陶宛、卢森堡、马耳他、荷兰、波兰、葡萄牙、罗马尼亚、斯洛伐克、斯洛文尼亚、西班牙、瑞典。

如果你的 App 在“所有地区”(默认设置)均可用,则它也能在欧盟使用,因此必须符合 DSA 要求。


第 9 部分:上传和处理构建版本

上传方式
方式适用场景
Xcode(推荐)大多数开发者;与归档工作流集成
Xcode Cloud通过自动构建和分发实现 CI/CD
Transporter用于批量上传的独立 macOS 应用
altool(CLI)脚本化 CI/CD 管道
App Store Connect API完全自动化的工作流
构建标识符
标识符用途示例规则
Bundle ID唯一标识你的 Appcom.company.app设置后不可更改
Version Number面向用户的版本号2.1.0每次发布都必须递增
Build String区分同一版本的不同构建版本2.1.0.42每个平台的每个版本都必须唯一
构建版本选择
  • 每个版本只能选择一个构建版本
  • 在提交版本审核之前,可以更改构建版本选择
  • “Missing Compliance”状态会阻止选择构建版本,直到回答出口合规问题
SDK 要求
生效日期要求
2025 年 4 月(当前)Xcode 16、iOS 18 SDK
2026 年 4 月 28 日(即将生效)Xcode 26、iOS 26 SDK

在生效日期之后,使用过时 SDK 构建的 App 会在提交审核时被拒绝。商店中已有的 App 不受影响,除非提交更新。

构建处理

上传后,Apple 会处理你的构建版本:

  1. 上传 — 将二进制文件传输至 Apple(视文件大小而定,需 5–30 分钟)
  2. 处理 — Apple 验证二进制文件并运行自动检查(15–60 分钟)
  3. 可用 — 构建版本显示在 App Store Connect 中,可用于 TestFlight 或提交审核
  4. 邮件通知 — 处理完成或失败时发送

常见的处理失败原因:

  • 缺少必需的架构(必须包含 arm64)
  • 配置描述文件或签名身份无效
  • Apple 列出的第三方 SDK 缺少隐私清单
  • Info.plist 缺少必需的键
  • 二进制文件过大(OTA 下载限制:通过蜂窝网络下载时为 200 MB)
IPv6 兼容性

所有 App 都必须能在仅支持 IPv6 的网络中运行。Apple 的审核环境使用 IPv6。常见问题:

  • 硬编码的 IPv4 地址
  • 使用底层套接字 API,而非高级网络功能
  • 第三方 SDK 中包含仅支持 IPv4 的代码

使用 URLSession 或 Network.framework,即可自动确保 IPv6 兼容性。

App 瘦身与 Bitcode
主题状态
Bitcode自 Xcode 14 起已弃用;不再接受
App 瘦身已启用;Apple 会生成特定设备的变体
按需资源已启用;为资源添加标签,以便按需下载
资源目录用于对图像进行 App 瘦身(1x/2x/3x)
权利与功能

某些功能需要在 Xcode 和配置描述文件中配置权利:

功能权利常见问题
推送通知aps-environment证书过期、缺少配置
App Groupscom.apple.security.application-groups共享容器 ID 不匹配
关联域com.apple.developer.associated-domainsAASA 文件未正确提供
HealthKitcom.apple.developer.healthkit缺少必需的功能
后台模式UIBackgroundModes使用模式却没有正当理由
使用 Apple 登录com.apple.developer.applesignin配置描述文件中缺少此项
CloudKitcom.apple.developer.icloud-services容器 ID 不匹配
App 内购买—默认已启用;测试需要 StoreKit 配置
TestFlight 提交
方面内部测试外部测试
测试人员最多 100 名 ASC 用户最多 10,000 人,可通过电子邮件/公开链接邀请
是否需要审核否是(每个版本的第一个构建版本需完整 App Review)
审核时间—通常少于 24 小时
构建版本有效期上传后 90 天上传后 90 天
群组自动(ASC 角色)自定义群组,可添加“测试内容”备注
反馈崩溃报告屏幕截图、文字反馈、崩溃报告
提交限制—每 24 小时最多 6 个构建版本

TestFlight 准备情况检查清单:

  • 内部测试人员群组已创建(创建外部群组前必须完成)
  • 已设置 Beta App 描述(可与正式版不同)
  • 已配置反馈邮箱
  • 已为每个外部群组撰写“测试内容”备注
  • 已回答出口合规问题(Beta 构建版本也必须回答)
  • 已提供演示凭据(如果需要登录)
  • 第一个外部构建版本:预期会进行完整的 App Review(检查是否符合指南)

注意事项:

  • 在 Xcode/Xcode Cloud 中以“仅限 TestFlight 内部测试”的方式上传的构建版本只能分发给内部群组
  • 受管理的 Apple 账户(School/Business Manager)不能作为测试人员
  • 公开链接的测试人员上限可按链接配置(1-10,000)
  • 即使 App 已在 App Store 上线,构建版本仍可用于测试
  • 开发者可以在 90 天前手动使构建版本过期

第 10 部分:WWDC25 变更

草稿提交(WWDC 2025-328)

将多个项目合并为一次草稿提交:

  • App 版本 + 新的 IAP + 产品页面变更
  • 一起审核所有内容,而不是分别提交
  • 草稿状态:逐步准备各项内容,准备就绪后再提交
失败后可重复使用构建版本号

如果构建版本因元数据问题(而非二进制文件问题)被拒绝,无需重新上传即可重复使用相同的构建版本。以前,被拒绝的构建版本需要使用新的构建版本字符串。

因错误被拒后保留构建版本

发生某些类型的拒绝后,构建版本不再从 App Store Connect 中移除。你可以修复元数据问题,并使用相同的构建版本重新提交。

无障碍功能营养标签

App Store 新增了用于说明无障碍功能的元数据:

  • 声明 App 支持哪些无障碍功能
  • 显示在 App Store 产品页面上
  • 类别包括 VoiceOver 支持、动态字体、切换控制等
  • 帮助用户找到符合其无障碍需求的 App
App Store 标签(由 LLM 生成,可编辑)

Apple 使用 AI 为你的 App 生成描述性标签:

  • 标签会显示在产品页面上
  • 你可以查看并编辑建议的标签
  • 标签可提升搜索中的可发现性
  • 根据 App 元数据、描述和功能生成
自定义产品页面关键词

产品页面现在可以使用独特的关键词:

  • 每个自定义产品页面可以设置不同的关键词
  • 提高对不同受众的定向效果
  • 每个自定义页面都可以出现在不同的搜索结果中
优惠码支持范围扩大

优惠码现在支持所有 IAP 类型:

  • 消耗型
  • 非消耗型
  • 非续期订阅
  • 自动续期订阅(原有支持)
评论摘要(AI 生成)

Apple 会生成用户评论的 AI 摘要:

  • 汇总评论中的常见主题
  • 显示在产品页面上
  • 随着新评论出现而更新
  • 帮助用户快速了解应用质量和常见反馈
分析功能增强

新增 100 多项分析指标,包括:

  • 预购转化漏斗
  • 自定义产品页面效果对比
  • 订阅生命周期指标(试用转付费转化率、流失时间)
  • 同类群组基准比较(与类似应用对比效果)
  • 下载来源归因优化
年龄分级全面调整

采用五级体系,并新增功能声明(完整详情见第 4 部分)。

自定义产品页面(现有功能,在 WWDC25 中增强)

自定义产品页面可以针对不同受众展示不同的 App Store 页面:

功能详情
最大数量每个应用最多可创建 35 个自定义产品页面
可自定义屏幕截图、应用预览、宣传文本
不可自定义应用名称、图标、描述、“最新动态”
URL每个自定义页面都有用于归因的唯一 URL
关键词WWDC25 新增:每个自定义产品页面可使用独特的关键词
分析每个页面的展示次数、下载量、转化率
App Store 定价变更
功能详情
900 多个价格点从最初的 87 个价格等级扩展而来
全球价格均衡自动换算货币并设置区域定价
自定义定价针对特定店面覆盖自动价格均衡
价格上涨通知现有订阅者;涨幅超过 50% 时必须征得同意
区域定价根据各市场的购买力设置优化后的价格

专家审核清单

完整的 9 部分提交清单,请参阅 references/expert-review-checklist.md。 面向特定领域的提交前工作流,请参阅 app-store-submission。


故障排除

10 个常见提交问题
#问题原因解决方法
1构建版本显示“缺少合规信息”未回答出口合规问题在 App Store Connect > 构建版本中回答加密问题
2构建版本未显示在 ASC 中正在处理或处理失败等待 15-60 分钟;检查电子邮件中的处理错误通知
3“添加以供审核”按钮呈灰色缺少必填元数据检查“应用信息”和“版本信息”中的所有必填字段
4屏幕截图尺寸错误与设备规格不匹配使用各设备尺寸类别对应的精确像素尺寸
5隐私政策 URL 无效不是 HTTPS 或无法公开访问必须使用无需登录即可访问的 https:// URL
6IAP 无法供审核IAP 状态不是“准备提交”补全所有 IAP 元数据,包括屏幕截图;设置状态
7年龄分级警告问卷未完成或未声明功能完成问卷;回答新增的功能问题
8DSA 商家状态未完成电子邮件或电话号码尚未验证完成电子邮件和电话号码的双重验证
9构建字符串冲突同一版本使用了重复的构建字符串每次上传构建版本都必须使用唯一的构建字符串
10“审核中”状态持续过久审核复杂或节假日积压90% 的应用会在 24 小时内完成审核;对于关键或紧急问题,请申请加急审核

有关拒绝处理(加急审核、申诉、Resolution Center),请参阅 app-store-diag 模式 7。 有关提交前测试清单,请参阅 app-store-diag 或 app-store-submission。

用于提交的 App Store Connect API

用于自动化提交流程:

Endpoint用途
POST /v1/appStoreVersions创建新版本
PATCH /v1/appStoreVersions/{id}更新版本元数据
POST /v1/appStoreVersionSubmissions提交版本以供审核
GET /v1/apps/{id}/appStoreVersions列出所有版本
POST /v1/appScreenshots上传屏幕截图
POST /v1/appPreviews上传 App 预览视频
GET /v1/apps/{id}/builds列出已处理的构建版本

身份验证需要 App Store Connect API 密钥(Users and Access > Integrations > App Store Connect API)。


资源

WWDC:2022-10166、2025-224、2025-241、2025-252、2025-328

文档:/app-store/review/guidelines、/app-store/submitting、/app-store/app-privacy-details、/help/app-store-connect

技能:app-store-submission、app-store-diag、privacy-ux、storekit-ref、accessibility-diag

评论

支持 Markdown