app-store-review-skill 拆解(附:与 tiktok-agent-skills 的范式对照)
沉淀日期:2026-08-03 对象仓库:https://github.com/safaiyeh/app-store-review-skill (MIT,251 star / 10 fork,建于 2026-01-21,最后推送 2026-07-21,版本 v1.1.0) 姊妹文档:
tiktok-agent-skills拆解与Skill工程范式.md(同目录)
#给未来的 Claude Code:一句话定位
把 Apple《App Store 审核指南》全文(截至 2026-06-08 更新)翻译成 agent 可执行的代码审查规则集。 用户让 agent 审一遍 iOS/RN/Expo 项目,它逐条比对 Apple 五大章节,指出会被打回的代码位置。
关键差别(相对上一份沉淀里的 tiktok-agent-skills):这个 skill 零外部依赖。不需要 MCP、不需要 API key、不需要联网 —— 它把全部价值放在 4000 行离线知识里,agent 只用自带的读文件 + grep 能力就能跑。这是「知识型 skill」的标准样本,而 tiktok 那套是「工具型 skill」。
如果 Leo 之后做 iOS / Expo 应用(他有 ~/personal/image2-mac 这类 Swift 项目,以及 claude_ai_expo 的 MCP 接入),提交前跑一遍这个 skill 是低成本高收益的事。
#一、事实档案
#覆盖范围
- 平台:iOS、macOS、tvOS、watchOS、visionOS
- 语言/框架:Swift、Objective-C、React Native、Expo(RN/Expo 的支持是它区别于同类的卖点)
- 指南版本:跟到 Apple 2026-06-08 那次更新(重点改了儿童与青少年安全条款)
#目录结构
app-store-review-skill/
├── SKILL.md # 199 行:索引 + 高危模式速查 + 提交前 checklist
├── metadata.json # 版本、日期、abstract、13 条官方参考链接
├── rules/
│ ├── 1-safety.md # 701 行 安全:违规内容、UGC、儿童类、身体伤害、数据安全
│ ├── 2-performance.md # 858 行 性能:完整性、元数据、硬件兼容、软件要求
│ ├── 3-business.md # 569 行 商业:IAP、订阅、加密货币、其他商业模式
│ ├── 4-design.md # 549 行 设计:抄袭、最低功能、垃圾应用、扩展、登录
│ └── 5-legal.md # 838 行 法律:隐私、知识产权、博彩、VPN、MDM、开发者行为准则
├── .claude-plugin/ # Claude Code 插件市场清单 + manifest
├── .codex-plugin/ # Codex 插件 manifest
├── .agents/plugins/ # Codex 插件市场清单
└── agents/openai.yaml # Codex UI 元数据全仓 ~4,085 行,规则文件占 3,515 行(86%)。
#三种安装方式(同一个仓库同时支持)
# Claude Code 插件市场
/plugin marketplace add safaiyeh/app-store-review-skill
/plugin install app-store-review@app-store-review
# Codex 插件
codex plugin marketplace add safaiyeh/app-store-review-skill
# skills.sh 标准(Cursor / Windsurf 等通用)
npx skills add safaiyeh/app-store-review-skill
# 关掉遥测:SKILLS_NO_TELEMETRY=1 npx skills add ...注意
npx skills add会上报匿名使用遥测,默认开启。要装的话建议带SKILLS_NO_TELEMETRY=1。
#二、它检查什么(速查)
必被拒(Critical)
- 使用私有 API(
NSSelectorFromString("_privateMethod")) - 硬编码密钥(RN 尤其致命 —— JS bundle 可直接解包)
- 数字商品走外部支付(Stripe /
Linking.openURL到收银台) - 端上跑加密货币挖矿
- 动态代码执行(
eval(downloadedCode)) - 用 CodePush / expo-updates 推送新功能(OTA 只许修 bug)
高危(High)
- 用了广告/分析 SDK 却没接 ATT(
expo-tracking-transparency) - 有注册没注销(且注销不能只给个网页链接,必须在 app 内)
- 有 IAP 没有「恢复购买」
- UGC 没有审核机制(过滤 / 举报 / 拉黑 / 联系方式,四件套全部必须)
- 儿童类 app 没有家长门(parental gate)
- 用 Live Activities / 推送做骚扰营销
- 只提供社交登录,没给符合 4.8 的隐私友好替代(Sign in with Apple 最省事)
- 自己弹「给我们打五星」(必须用
StoreReview.requestReview()系统 API)
中危(Medium)
- Info.plist 权限说明太笼统("This app needs camera access" 这种会被打回)
- 过度申请权限、后台模式没正当理由
- 纯 WebView 套壳(原生功能不足)
- app 内出现 "Also available on Android" 这类他平台引用
- 生产包里留
console.log
它顺带给了 RN/Expo 的选包建议(这块挺实用):
react-native-purchases(RevenueCat,IAP 首选)/ react-native-iap、expo-tracking-transparency、expo-secure-store / react-native-keychain、expo-apple-authentication、expo-local-authentication / react-native-biometrics。
#三、值得抄的写法
#1. 规则文件自带 frontmatter
每个 rules/*.md 开头都有独立的 name + description:
---
name: safety
description: App Store Review Guidelines Section 1 - Safety (objectionable content, UGC, Kids Category, physical harm, data security)
---主 SKILL.md 之外,子文件也能被独立索引/检索。这是把「大知识库切片」做成可寻址单元的做法。
#2. 每条规则三件套:判据 + 代码模式 + 双语言样例
### 1.1.3 Weapons and Dangerous Objects
**REJECT if app:**
- [ ] Depicts content encouraging illegal or reckless use of weapons
- [ ] Facilitates the purchase of firearms or ammunition
**Code patterns to flag:**
```swift
func purchaseFirearm()
"gunbroker.com", "ammo.com"// RN 对应写法
**「Code patterns to flag」是这个 skill 的灵魂**:它没有停在"要合规"的抽象要求上,而是给出 agent 能直接 grep 的具体字符串、函数名、import 语句。抽象规则 agent 只能空谈,具体模式 agent 才能真的查出来。
> 这条可以直接迁移到 Leo 自己的 skill:任何"检查/审计"类 skill,都该给出可 grep 的具体特征,而不是让 agent 自由发挥。
### 3. 明确写出"什么不算违规"
```markdown
**Note:** Merely mentioning religion, race, etc. is NOT a violation
— the content must be defamatory, discriminatory, or mean-spirited.
**Exception:** Professional political satirists and humorists are generally exempt.给出反例边界,压制误报。 只写"什么会被拒"的 checklist,agent 会把所有沾边的代码全标红,报告失去价值。
#4. 顶部放"当前 Apple 重点"
1-safety.md 开头有 ## Current Apple Emphasis 一节,专门写 2026-06-08 那次更新改了什么、审查时该额外看哪些面。把"最新变化"从正文里抽出来置顶,这样规则全文可以稳定不动,只维护这一小节就能跟上政策变化。
#5. metadata.json 里塞一段长 abstract
那段 abstract 把五大章节的编号和覆盖点全铺开写了一遍(近 200 词)。作用是给检索用:无论 agent 是靠 description 还是靠全文匹配来判断该不该加载这个 skill,这段密集关键词都能命中。
#6. 一套仓库、四份 manifest
.claude-plugin/ + .codex-plugin/ + .agents/plugins/ + agents/openai.yaml,同一份 skill 内容同时挂在 Claude Code、Codex、skills.sh 三个分发渠道。SKILL.md 的 frontmatter 格式是通用的,各家只是外面套的 manifest 不同。要发布自己的 skill 时照这个结构摆就行。
#四、局限(别过度承诺)
- 它是静态代码审查,不是过审保证。 Apple 实际拒审很大比例卡在元数据、截图、演示账号、真机崩溃上 —— 这些代码里看不出来。skill 自己也把这类列进了 checklist,但只能提醒,无法验证。
- 规则会过期。 版本锁死在 2026-06-08,Apple 每年改数次。用之前先看
metadata.json的date字段,跟 Apple 官方 guidelines 页对一眼。 - 纯英文。 输出报告是英文的,要中文得在调用时另外要求。
- 误报无法完全避免。 比如它建议 flag 所有含
kill_/death_的资源名 —— 游戏项目会炸一片。
#五、两份 skill 的范式对照(这才是最该记住的)
| 维度 | tiktok-agent-skills | app-store-review-skill |
|---|---|---|
| 类型 | 工具型 —— 价值在编排外部 API | 知识型 —— 价值在离线知识密度 |
| 外部依赖 | KSS MCP(付费、要 key) | 无 |
| 主文件 | 77 行,纯决策逻辑 | 199 行,索引 + 速查 + checklist |
| 重活位置 | references/(工具 schema + 工作流) |
rules/(3500 行规则) |
| 核心难点 | 防止 agent 在拿不到数据时编造 | 防止 agent 空谈规则、以及压制误报 |
| 招牌手法 | 分层降级 / A·B·C 可信度 / 停止条件 / 非完整结果模板 | 可 grep 的代码模式 / 反例边界 / 置顶"最新变化" |
| star | 32 | 251 |
共同点(这就是好 skill 的公约数):
- 主 SKILL.md 保持轻量,只做路由和决策,重内容全部外链,并明确写出什么时候读哪个文件。
- 参考文档标注版本/核验日期/权威来源,并说清与实时信息冲突时该信谁。
- 把抽象要求落成 agent 能真的执行的东西 —— 要么是具体的工具调用序列,要么是具体的 grep 模式。
- 给失败态和边界情况准备好格式:非完整结果怎么写、什么不算违规、什么时候必须停下。
Leo 自己那批 skill(broadcast / 逆向 / 微信 / img / 元认知)如果要升级,按这四条对照着改,收益最大的是第 3 条和第 4 条。
#相关沉淀
02-AI与API/tiktok-agent-skills拆解与Skill工程范式.md—— 工具型 skill 的范式02-AI与API/2026-07-27-智能体提示词泄漏压测清单.md—— 提示词工程方向
来源:沉淀/02-AI与API/app-store-review-skill拆解.md(整理于 2026-08-18)