📚 离职知识库

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 NativeExpo(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-iapexpo-tracking-transparencyexpo-secure-store / react-native-keychainexpo-apple-authenticationexpo-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.jsondate 字段,跟 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 的公约数):

  1. 主 SKILL.md 保持轻量,只做路由和决策,重内容全部外链,并明确写出什么时候读哪个文件
  2. 参考文档标注版本/核验日期/权威来源,并说清与实时信息冲突时该信谁。
  3. 把抽象要求落成 agent 能真的执行的东西 —— 要么是具体的工具调用序列,要么是具体的 grep 模式。
  4. 给失败态和边界情况准备好格式:非完整结果怎么写、什么不算违规、什么时候必须停下。

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)