关于 app-store-review
app-store-review 是一项技能,用于依据 Apple App Store Review Guidelines 检查 Swift、Objective-C、React Native 和 Expo 应用。它按指南章节和风险整理说明,并提供清单与示例,支持提交前审查及功能审计。
主要功能
- 01覆盖 Apple 指南各章节
- 02按风险整理拒审模式
- 03提供 Swift 和 React Native 示例
- 04提交前合规检查清单
- 05隐私、支付与安全审查
适用场景
- 01提交 App Store 前审计应用
- 02审查支付或隐私相关改动
- 03评估用户生成内容的安全要求
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ safaiyeh/ app-store-review-skill --skill app-store-review安装后在 Claude Code 中输入/app-store-review确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEmetadata.jsonREADME.md.gitignore.agents/plugins/marketplace.json.claude-plugin/marketplace.jsonplugin.json.codex-plugin/plugin.json.github/ISSUE_TEMPLATE/skill-feedback.ymlagents/openai.yamlrules/4-design.md3-business.md1-safety.md5-legal.md2-performance.md详细介绍
App Store 审核指南检查器
全面介绍如何依据 Apple 的 App Store 审核指南评估 iOS、macOS、tvOS、watchOS 和 visionOS 应用代码。本技能涵盖每一条指南要点,以便在提交前识别可能导致拒审的问题。
支持: Swift、Objective-C、React Native 和 Expo 应用
指南更新至: Apple 于 2026 年 10 月 16 日更新的 App 审核指南,并已根据当前英文版指南核实。内容包括 AI 内容创作和防范未经同意的私密影像(1.2)、创意素材(2.3.14)、隐藏功能(2.5.19)、修订后的购买链接权限(3.1.1(a))以及替代分发执行规则(5)。还涵盖社交媒体年龄分级问题、韩国年龄分级变更,以及巴西/欧盟的替代支付和分发条款。
适用场景
在以下情况下使用本技能:
- 为向 App Store 提交应用做准备
- 检查代码是否存在合规问题
- 实现可能引发审核关注的功能
- 审查现有应用是否违反指南
- 构建涉及支付、用户数据或敏感内容的功能
指南章节
请阅读各项规则文件,了解详细说明、检查清单和代码示例:
| 章节 | 文件 | 主要主题 |
|---|---|---|
| 1. 安全 | rules/1-safety.md | 不当内容、UGC 和 AI 内容安全措施、儿童类别、人身伤害、数据安全 |
| 2. 性能 | rules/2-performance.md | 应用完整性、元数据和创意素材、硬件兼容性、软件要求、隐藏功能 |
| 3. 商业 | rules/3-business.md | App 内购买、订阅、加密货币、其他商业模式 |
| 4. 设计 | rules/4-design.md | 仿冒应用、最低功能要求、垃圾应用、扩展、Apple 服务、登录 |
| 5. 法律 | rules/5-legal.md | 隐私、数据收集、知识产权、赌博、VPN、MDM、开发者行为准则 |
各类别风险等级
| 风险等级 | 类别 | 章节 | 常见拒审原因 |
|---|---|---|---|
| 严重 | 隐私与数据 | 5.1 | 缺少隐私政策、未经授权收集数据 |
| 严重 | 支付 | 3.1 | 规避 App 内购买、定价不明确 |
| 高 | 安全 | 1.x | 不当内容、UGC 审核不足 |
| 高 | 性能 | 2.x | 崩溃、功能不完整、已弃用的 API |
| 中 | 设计 | 4.x | 仿冒应用、未达到最低功能要求 |
| 中 | 法律 | 5.x | 侵犯知识产权、未获许可的赌博活动 |
快速参考:高风险拒审模式
对于 ATT 检查结果,请核实 SDK 的配置和实际数据用途。对于账户删除,请核实目标位置和流程。对于日志记录,请检查暴露的数据及其是否经过脱敏。如果无法获得这些证据,应指出需要核实的事项,而不要仅凭一次 API 调用、SDK 导入或 URL 就判定会被拒审。
对于支付,请先确认商店门店、平台和适用的例外,再标记外部链接或结账行为(参见 3.1.1(a) 和 3.1.3)。
严重问题(立即拒审)
Swift:
// 🔴 Private API usage
let selector = NSSelectorFromString("_privateMethod")
// 🔴 Hardcoded secrets
let apiKey = "sk_live_xxxxx"
// 🔴 External payment for digital goods where IAP is required
func purchaseDigitalContent() {
openStripeCheckout() // Use StoreKit instead
}
React Native / Expo:
// 🔴 Hardcoded secrets in JS bundle
const API_KEY = 'sk_live_xxxxx'; // REJECTION
// 🔴 External payment for digital goods where IAP is required
Linking.openURL('https://stripe.com/checkout'); // Use react-native-iap
// 🔴 Dynamic code execution
eval(downloadedCode); // REJECTION
// 🔴 Major feature changes via CodePush/expo-updates
// OTA updates for bug fixes only, not new features!
高风险问题
Swift:
// 🟡 Starting Apple-defined tracking without ATT authorization
// Illustrative helper: links user data across companies for ad targeting
enableCrossCompanyAdTracking() // Called before ATT authorization
// 🟡 Account creation without deletion
func createAccount() { } // But no way to initiate deletion in the app
React Native / Expo:
// 🟡 Starting Apple-defined tracking without ATT authorization
// Illustrative helper: SDK links user data across companies for ad targeting
initializeTrackingAdSDK(); // Called before ATT authorization
// ✅ First-party analytics alone does not require ATT
// Assumes no IDFA access, cross-company advertising use, or data broker sharing
import analytics from '@react-native-firebase/analytics';
analytics().logEvent('event');
// 🟡 Delete Account button opens instructions with no deletion flow
Linking.openURL('https://example.com/help'); // Verified instructions-only page
// ✅ An in-app button may link directly to a page that completes deletion
Linking.openURL('https://example.com/delete-account');
// 🟡 Sensitive data exposed in production logs (1.6 / 5.1)
console.log('Access token:', accessToken); // Remove the secret or redact it
// 🟡 Social login without a privacy-preserving alternative (4.8)
<GoogleSigninButton /> // Also offer a login meeting 4.8 criteria
// (Sign in with Apple is the simplest option)
// 🟡 Pre-permission button that asks for the grant (5.1.1(iv))
<Button title="Enable Location" onPress={requestLocation} /> // Use "Continue" or "Next"
// 🟡 UGC terms checkbox pre-checked, or no terms before sign-up/login (1.2)
const [agreed, setAgreed] = useState(true); // Start unchecked; gate sign-up on it
// 🟡 "Free" in screenshots, including text in the captured app screen (2.3.7)
<Text>Get Started (Free)</Text> // Pricing information when shown in a screenshot
// 🟡 Custom review prompts (5.6.1)
showCustomAlert('Rate us 5 stars!'); // Use StoreReview.requestReview()
中风险问题
// 🟠 Vague purpose strings in Info.plist
"This app needs camera access" // Be specific!
// 🟠 WebView-only app (insufficient native functionality)
const App = () => <WebView source={{ uri: 'https://site.com' }} />;
// 🟠 References to Android in iOS app
const text = "Also available on Android"; // REJECTION
提交前检查清单
隐私(第 5.1 节)
- 在 App Store Connect 中提供隐私政策链接
- 在 App 内提供可访问的隐私政策链接
- 所有用途说明均具体且准确
- 在 App Store Connect 中填写 App 隐私详情
- 在进行 Apple 定义的跟踪或访问 IDFA 之前获取 ATT 授权(参见 5.1.2);仅使用第一方分析时无需 ATT
- 如果 App 支持创建账户,用户可以在 App 内发起删除;也可以提供直接链接,以便用户在网站上完成删除
- 数据最小化——仅请求必要的权限
- 权限提示前的自定义屏幕只能有一个按钮,使用中性标签(例如“继续”或“下一步”),点击后打开系统提示;不得使用“允许”或“启用”等措辞,也不得提供“取消”或“关闭”操作(参见 5.1.1(iv))
- 在收集数据前获得用户同意
付款(第 3.1 节)
- 数字商品购买使用 StoreKit,除非适用的店面、授权资格或 3.1.3 例外允许使用其他方式
- 实现恢复购买功能
- 清晰显示订阅条款
- 如适用,披露战利品箱的概率
- 购买链接指向适用地区条款(3.1.1(a))允许的目的地;美国店面链接无需授权资格
- 积分/货币不会过期
安全(第 1.x 节)
- 不包含令人反感的内容
- UGC 和 AI 内容创作类 App 实施审核机制(过滤、举报、屏蔽、联系),包括创作/生成流程(参见 1.2)
- 主动采取保护措施,防止并移除未经同意的私密影像,包括 AI 生成的影像
- 能够快速移除违反规定的 UGC,并制定补救计划
- UGC:用户在注册/登录前同意条款(EULA),其中声明对令人反感的内容和滥用行为的用户采取零容忍政策;同意方式须为未勾选的复选框或明确按钮,且应出现在新用户全新安装后看到的流程中(参见 1.2)
- UGC:在 24 小时内处理举报,移除相关内容并移除违规用户
- UGC:屏蔽操作会通知开发者,并立即从信息流中移除被屏蔽用户的内容
- UGC:如 App Review 要求,提供实体设备的屏幕录制,展示用户在注册/登录前同意条款、标记内容和屏蔽用户的操作;如被要求,请在今后的提交备注中附上
- 为儿童和青少年提供符合其年龄的 App 内体验
- 儿童类别 App 设有家长验证机制
- 不包含虚假信息或恶作剧功能
- 如适用,提供医疗免责声明
- 不宣扬物质滥用
性能(第 2.x 节)
- 已回答年龄评级问卷中的社交媒体功能问题(自 2026 年 9 月起,提交时必须回答;带有社交动态的 App 会获得“社交媒体”描述符和“时间限额”类别)
- 没有崩溃或错误
- 已在 iPhone 和 iPad 上测试——截至 2026 年 8 月,App Review 目前使用 iPad Air 11-inch(M3)和 iPhone 17 Pro Max 进行审核
- 所有功能均已完成且可正常使用
- 没有占位内容
- 在“审核备注”中具体描述新功能、功能特性和产品变更,并确保审核人员可以使用(2.3.1)
- 没有隐藏、休眠或未记录的功能,包括在审核期间隐藏、获批后启用的功能(参见 2.5.19)
- 产品页面页眉和搜索结果中的创意素材符合 2.3.14
- App 名称、副标题、关键词、屏幕截图或预览中没有“免费”等价格相关词语,包括截取的 App 屏幕内的文字(参见 2.3.7)
- 已测试 IPv6,且功能正常
- 如有需要,已提供演示账号
- 仅使用公共 API
- 没有使用已弃用的 API
- 正确使用后台模式
设计(第 4.x 节)
- 具有足够的原生功能(不只是网页封装)
- 不存在抄袭问题
- App 名称和品牌具有原创性
- 没有重复 Bundle ID 垃圾 App,也没有低质量的热门类别克隆 App
- 不将实时活动、推送通知和 Game Center 用于垃圾信息、网络钓鱼或未经请求的消息
- 扩展符合指南
- 使用社交登录时提供其他登录方式
- 不将内置功能用于盈利
法律(第 5.x 节)
- 没有助长人口贩运或剥削儿童的内容或功能;第 5 节要求从 App Store 下架,并禁止通过替代方式分发
- 没有未经授权的第三方内容
- 正确使用 Apple 商标
- 如适用,持有赌博许可证(并实施真实的基于位置的地理限制)
- VPN 使用 NEVPNManager API
- 符合 COPPA/GDPR 对儿童的要求
- 仅使用系统 API 请求评价(不使用自定义提示)
- 不操纵评价、排行榜、搜索结果或推荐(5.6)
报告技能问题(反馈)
这项技能会通过用户报告不断改进。如果你在会话中发现这项技能未能帮助用户,每个会话只需一次,询问用户是否愿意向维护者报告。
发现以下任一情况时,请提供反馈。 使用对应的类别名称——它会出现在问题标题中,格式为 [Feedback] <category>: <short description>。
准确性
- 误报 — 技能将实际合规的代码标记为违规(指导过于激进)
- 漏报 — 技能审查过用户的应用,但没有指出问题,而应用因此被拒绝
- 引用错误 — 问题确实存在,但归到了错误的指南章节,或风险等级标错
- 过时 — 此处规则与 Apple 当前发布的指南相矛盾
实用性
- 噪声过多 — 大量低价值或重复的发现淹没了真正重要的问题
- 无法采取行动 — 发现中缺少必要的细节、代码引用或具体修复方案
- 修复方案不当 — 建议的修复有误、已弃用、无法奏效,或本身也会被拒绝(包括 Swift 与 React Native/Expo 的具体差异)
覆盖范围
- 规则缺失 — 技能未涵盖某种审查情境、API 或特定应用商店的要求(欧盟、巴西、韩国、美国等)
- 自相矛盾 — 技能的两个部分相互矛盾
较轻微的信号也算。 如果用户反复忽略同一类发现、否决技能的建议且事后证明用户是对的,或明显绕过某项检查清单内容,这些都值得询问是否要提交反馈——细微的不便与错误规则同样有价值。
同意规则——全部为强制要求,不得例外:
- 先询问。 可以这样说:“这看起来像是 app-store-review 技能本身存在疏漏。要我起草一个 GitHub 问题,让维护者修复吗?”如果用户拒绝,本次会话中不要再提。
- 展示完整草稿(准确的标题和正文),然后才能发送。
- 绝不包含用户的代码、应用名称、Bundle ID、文件路径、凭据或专有细节。 报告针对的是这项技能的规则,而非用户的应用。只有用户明确将此类细节写入草稿时,才可包含。
- 只有在用户批准确切文本后才能发送,使用
gh issue create --repo safaiyeh/app-store-review-skill --title "..." --body "..."。如果gh不可用或未通过身份验证,请提供此链接,供用户自行提交:https://github.com/safaiyeh/app-store-review-skill/issues/new?template=skill-feedback.yml - 绝不静默、自动或作为其他任务的副作用发送反馈。 用户拒绝授权即表示不同意——不要重试,也不要改用其他方式。
问题内容: 技能版本(来自上方的 frontmatter)、反馈类别、涉及的规则章节(例如“3.1.1”)、技能说了什么或做了什么、原本应当如何处理,以及今天的日期。除非用户自行补充,否则不得包含其他内容。
参考资料
- App Store 审核指南
- Apple Developer Program 许可协议
- 2026 年 10 月 16 日 App 审核指南更新
- 关于未经同意的私密影像和诱饵调包的澄清(2026 年 10 月)
- 2026 年 6 月 8 日 App 审核指南更新
- 年龄分级问卷:社交媒体问题(2026 年 7 月)
- 大韩民国年龄分级更新(2026 年 8 月)
- 欧盟地区 App 相关变更(2026 年 8 月)
- 巴西地区 iOS 变更(2026 年 6 月)
- 人机界面指南
- App Store Connect 帮助
- App 审核帮助(提交准备、状态、拒绝和申诉)
- App Store 资源最佳实践
- Apple 开发者文档