测试快照: 2026-08-09
仓库快照: 602 Stars、51 Forks,最近推送 2026-07-24
许可证: MIT | 规模: 183 个 Skills、23 个分类
证据边界: 本文的 L0 静态检查、L1 触发测试和 L2 代码输出对照已经完成;没有把
swift build、模拟器安装或真机截图回归写成已完成实测。
先说结论
如果你在做 iOS、macOS、SwiftUI、watchOS 或 visionOS 项目,rshankras/claude-code-apple-skills 是目前最完整的社区 Apple 开发 Skills 集合之一。它覆盖产品规划、SwiftUI、测试、App Store 上架、增长、订阅、隐私和 Apple Intelligence,范围远大于一组只讲 API 的提示词。
但“183 个”不等于“183 个都值得安装”。本轮评测给出 4.1/5:覆盖和治理机制很强,实际代码增益却高度依赖具体任务。对一个 SwiftUI 数据流问题,裸模型三次已经全部修对主要 bug,注入 swiftui/data-flow 后的 12/12 分,主要来自额外的 @Observable 现代化迁移,而不是修好了用户报告的 bug。
换句话说,它更像一套有版本意识、有审计机制的工程检查清单,而不是一个能把普通模型瞬间变成 iOS 专家的“万能插件”。
评分卡
| 维度 | 权重 | 得分 | 本轮依据 |
|---|---|---|---|
| 产出增益(L2) | 25% | 3.5/5 | A 组 10/12,B 组 12/12;增量主要是 @Observable 迁移 |
| 工程质量(L0) | 20% | 4.0/5 | 183 个 Skill 零断链、核心字段完整,但发现 YAML 描述截断 bug |
| 触发准确率(L1) | 15% | 4.5/5 | 183 选 1 的 top-1 命中 19/20 |
| 覆盖度 | 15% | 5.0/5 | 从想法、开发、测试到上架、增长和法务 |
| 权威性 | 10% | 3.0/5 | 社区维护,非 Apple 官方;有 API 符号和版本基线检查 |
| 可执行性 | 10% | 4.5/5 | 自带盲测审计、CI 校验、模拟器和真机相关 Skill |
| 维护活跃度 | 5% | 5.0/5 | review_by、每周过期扫描、外部贡献流程 |
| 加权总分 | 100% | 4.1/5 | 建议选择性安装 |
它到底是什么
这个仓库不是 Apple 官方发布的 Skills。它是一个面向独立开发者的社区知识层,试图把一款 Apple 应用从想法推进到发布和增长:
generators:代码、数据、图标和项目骨架生成;product、design:产品规划、UX 规格、Liquid Glass 和视觉方向;ios、macos、swiftui、swiftdata:平台和框架开发;testing、performance、security:测试、性能、数据流和安全检查;app-store、release-review、monetization:元数据、审核、订阅和收入;growth、legal、apple-intelligence、visionos、watchos:发布后的增长、法务和新平台能力。
仓库还把自己放在一个更大的四仓库栈中:SwiftShip 提供工作流命令,indie-app-autopilot 提供 agent 流程,asc-metadata-mcp 连接 App Store Connect。这个定位和 Google 的 android/skills 不同:Google 的集合更接近官方文档的 API/平台知识分发,而这里试图覆盖独立开发者的完整生命周期。
我们怎么测
为了避免只看 GitHub Stars,本文把检查拆成三个层级:
L0:全量静态体检
用仓库自己的 harness/l0_static_audit.py 和同一套 token 口径检查 183 个 SKILL.md:字段是否完整、相对链接是否断裂、正文是否过长、有没有附属参考文档,以及是否包含 provenance 和版本治理信息。
L1:触发准确率
只给模型 183 个 Skill 的 name + description,不允许读取正文。使用 20 个目标明确的用户请求,记录模型在 183 选 1 中的 top-1 选择。这样测的是“该用哪个 Skill”,而不是“读完全部内容后能不能答出来”。
L2:代码任务 A/B 对照
测试 fixture 是一个 SwiftUI 任务列表,故意埋入数据流和性能问题:筛选完成项后行内展开状态丢失、滚动卡顿、错误的对象所有权、强制 .id() 刷新、缺少稳定 ID 等。
- A 组:裸模型,运行 3 次;
- B 组:注入
swiftui/data-flow,运行 3 次; - 每次根据 12 个静态检查项评分。
L3,也就是真实 swift build、运行模拟器、截图和设备回归,本轮没有完成。后面的结论只覆盖 L0–L2。
L0:工程卫生很好,但不是没有漏洞
全量静态结果很干净:
| 指标 | 结果 |
|---|---|
name 和 description 齐全 | 183/183 |
| 相对链接断裂 | 0/183 |
SKILL.md 超过 5,000 tokens | 12/183 |
| 没有任何附属文档 | 82/183(45%) |
| description 使用症状式措辞 | 163/183(89%) |
| SKILL.md token 中位数 | 2,129 |
| p90 / 最大值 | 4,263 / 15,667 |
它最值得借鉴的是治理字段。183 个 Skill 都有 last_verified 和 review_by,并且仓库有每周扫描过期内容的 workflow。相比之下,Google Android Skills 更重视作者和许可证出处,但没有统一的 review_by;这套设计把“这份知识何时必须重新核实”变成了可检查的数据。
发现一个会让 Skill 失效的 YAML 问题
design/ui-prototyping 和 generators/preview-data-generator 的 description 里出现了 Swift 的 #Preview / #Previews。由于 description 是没有引号的 YAML 标量,空格后的 # 会被 YAML 当成注释起点:
``yaml description: Explore divergent UI directions as named Swift #Previews, remix ... ``
某些解析器读到的结果只剩下 Explore divergent UI directions as named Swift,分别丢失约 88% 和 90% 的描述。仓库的 CI 仍然会通过,因为 check-frontmatter.sh 只用 grep 检查 description: 这个键存在,并没有真的解析 YAML。
修复很简单:给完整 description 加引号,并在 CI 中用 YAML parser 加载后检查解析结果长度。但这个例子说明,形式检查通过不代表 agent 看到的语义完整。
其它结构性成本
app-planner、coding-best-practices在不同分类中重名,按名字自动选择时会有歧义;- 45% 的 Skill 没有 references 层,内容全部堆在主文件;
ux-spec、release-spec、implementation-guide、test-spec等单文件超过 8,000 tokens,触发一次就可能占掉大量上下文;- 全量目录约 9,198 tokens,远高于 22 个 Android Skills 的约 1,595 tokens。
L1:19/20 命中,但规模带来碰撞
在 183 个候选中,top-1 命中 19/20(95%)。17 道高置信度题全部命中,唯一失误是一个中置信度问题:
“列表滑动很卡,body 好像一直在重跑。”
模型选了 swiftui-debugging,而评测预期是 data-flow。前者的 description 同时包含 “slow”“janky”“re-rendering too often” 等更宽信号;后者只写了“为什么 body 会运行”。这是一个典型的超集吞并:描述覆盖更广的 Skill 抢走了本应更专门的任务。
已经能看到十组左右的描述碰撞,包括:
- SwiftUI 性能、data flow、layout 和通用 performance 之间的“重算 / jank / identity”重叠;
- Swift 6.2 concurrency 两个相似入口;
- 四个都含有
accessibility audit的 Skill; swiftdata与swiftdata-inheritance的父索引和叶子条目;- offer codes、win-back、promoted IAP、subscription offers 的订阅相关条目。
这不是说它触发不准,而是说明 183 个目录需要更严格的排歧文案。originality-check 的写法值得推广:明确写出“不是 rejection handler”“不是 competitive analysis”,告诉 agent 当前 Skill 不负责什么。
本节有一个重要的复核限制:原始逐题 L1 表格在工作区清理时没有保留,19/20 和碰撞组来自评测回报,只有 YAML 截断和重名冲突完成了独立复现。因此这里应视为高质量但仍可重跑的结果,而不是一份拥有完整原始日志的实验档案。
L2:分数变成 12/12,但主要 bug 并没有靠 Skill 修好
测试 fixture 的用户问题是:切换 “Hide done / Show done” 后,行内展开状态全部收回,以及列表滚动卡顿。12 项检查覆盖对象所有权、稳定 ID、惰性修饰符、.id()、@State、缓存和 SwiftUI import。
| 检查项 | A1 | A2 | A3 | B1 | B2 | B3 |
|---|---|---|---|---|---|---|
| 修正 store 所有权 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
迁移到 @Observable | — | — | — | ✓ | ✓ | ✓ |
清除旧的 ObservableObject / @Published | — | — | — | ✓ | ✓ | ✓ |
| 消除双 identity | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 使用惰性修饰符 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
稳定 ForEach ID | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
移除强制 .id() | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 重算移出 body 路径 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 总分 | 10/12 | 10/12 | 10/12 | 12/12 | 12/12 | 12/12 |
A 组裸模型三次都修好了真正导致用户问题的部分:
- 删除
.id(refreshToken)强制刷新; - 把行内展开状态按稳定 ID 提到列表层;
- 将
ForEach id: \\.self改成Identifiable; - 把 if/else 结构改成不会改变身份的惰性修饰符;
- 修正
@ObservedObject自建和 body 内过滤排序。
B 组额外做了 @Observable 迁移,因此得到 12/12。但这属于现代化改造,与用户报告的两个 bug 没有直接因果关系。换言之,这轮 Skill 的价值不是“让模型终于会修 bug”,而是让它更稳定地采用一套新数据流架构,并且统一了输出方向。
仓库自己的盲测也给出了相近信号:swiftui/data-flow 被标为 TRIM,裸模型已经覆盖约 0.77 的主张。两套互不相干的方法得出相似结果,说明该 Skill 的边际收益确实有限;它更适合团队规范化和代码审查,而不是解决模型完全不会的问题。
最有价值的设计:它会审计自己
仓库自带 tools/skill-audit/audit.py,会为叶子 Skill 派生盲测问题,用裸 Claude 会话回答,再根据 Skill 中抽出的主张分类:
| 判定 | 含义 |
|---|---|
| KEEP | 裸模型覆盖率低,Skill 提供明显增量 |
| TRIM | 只保留模型尚未稳定掌握的部分 |
| DELETE-candidate | 裸模型已覆盖大部分主张,考虑删除 |
| FIX | 可能存在错误或版本问题,需要复核 |
仓库公布的一轮 161 条审计结果是:94 KEEP、56 TRIM、5 DELETE-candidate、5 FIX、1 个 prose trim。也就是说 38% 的条目被自己的审计标成应裁剪、删除或修复。这看起来是缺点,但实际上是比“所有 Skill 都有价值”的宣传更可信的信号。
同时,5 个 FIX 候选提醒使用者:知识库有机制不代表每条内容都正确。尤其是 generators/paywall-generator、ios/migration-patterns、macos/macos-tahoe-apis、swiftui/alarmkit 和 watchos,在采用前应先核对官方 API 文档和当前 SDK。
优点与不足
优点
- 覆盖真实工作流。 从产品方案到上架审核、订阅、增长和法务,远不止代码生成。
- 时效治理清楚。
review_by和每周过期扫描适合 WWDC 后集中变更的 Apple 生态。 - 有可执行工具。 API 符号检查、Swift 模板检查、模拟器和真机相关入口,比纯提示词更容易落地。
- 公开承认冗余。 自己的审计结果没有回避“模型已经会”的部分。
- 接受外部贡献。 社区可以报告问题并提交修复,治理上比封闭知识库更有弹性。
不足
- 不是 Apple 官方。 MIT 许可证不等于 Apple 背书,前瞻版本和新 API 必须自己核实。
- 全量安装太重。 9.2k tokens 的常驻目录和大量领域碰撞会增加选择成本。
- 强指令可能扩大改动范围。
@Observable迁移这种现代化建议,可能超出用户只想修一个 bug 的范围。 - CI 偏形式。 YAML description 截断可以在全部检查“成功”时发生。
- 本轮没有 L3 证据。 代码评分不等于构建通过,更不等于在真实项目、旧版本 SDK 和真机上可用。
谁适合使用
适合
- 正在维护多个 Apple 平台项目的独立开发者;
- 需要统一 SwiftUI、测试、上架和订阅流程的团队;
- 希望让 agent 先按规范产出,再交给人工 review 的项目;
- 需要
review_by、权限白名单和定期审计机制的内部 Skill 库建设者。
不适合直接全量安装
- 只想快速修一个小 SwiftUI bug;
- 项目依赖较旧的 Xcode、Swift 或 SDK;
- 不愿意逐条检查生成 diff、脚本权限和外部依赖;
- 需要 Apple 官方支持或合规承诺的生产团队。
更安全的采用方式
- 按任务选择分类。 不要先安装 183 个;先从
swiftui/data-flow、testing或目标平台 Skill 开始。 - 锁定版本和日期。 保存仓库 commit、Skill 版本、Xcode/Swift/SDK 版本,并记录
review_by。 - 先跑小任务。 用一个可回滚的 fixture,记录 prompt、生成 diff、编译日志和失败样例。
- 区分修复与现代化。 如果 Skill 要求迁移数据流、升级 deployment target 或加入新权限,单独评估影响,不要默认接受。
- 完成 L3 验收。 至少运行
swift build或 Xcode build,启动模拟器,验证核心交互,再考虑进入真实仓库。 - 保留人工门槛。 上架元数据、订阅、隐私声明、支付和权限相关输出必须由人确认。
与 Google Android Skills 的差异
| Google Android Skills | rshankras Apple Skills | |
|---|---|---|
| 维护来源 | Google 官方 | 社区维护 |
| 数量 | 22 | 183 |
| 定位 | 新 Android API 和平台知识 | 独立开发者全生命周期 |
| 目录常驻成本 | 约 1,595 tokens | 约 9,198 tokens |
| L1 结果 | 10/10 召回、0/10 假阳性 | 19/20 top-1 |
| L2 价值 | 明显降低输出方差 | 主要是现代化改造和规范化 |
| 时效字段 | last-updated | last_verified + review_by |
| 公开审计 | 较少 | 自带盲测并公开冗余结果 |
两轮测试的共同结论是:裸模型的基线比想象中高,Skill 的价值通常在边际稳定性、版本提醒和团队约束,而不是从零教会模型一个领域。选题比数量更重要。
编辑部结论
值得试,但不要全量无脑安装。 如果你在 Apple 生态里工作,它解决了一个现实问题:Apple 没有官方 agent Skills 仓库,而这个项目把 SwiftUI、测试、上架和增长流程集中在了一个有审计机制的社区方案里。
它最值得借鉴的不是某一条 SwiftUI 提示词,而是三套机制:
- 把
review_by写进每个 Skill,并定期扫描过期内容; - 用裸模型盲测自己的 Skill,模型已经会的内容就裁掉;
- 在 description 中明确排歧,告诉 agent“这条规则不负责什么”。
对于一次具体任务,先选择一个小而明确的 Skill,固定环境,保存 diff 和日志,完成真实构建后再判断它是否值得长期保留。这样使用,183 个条目才会成为工具箱;否则它更可能只是一个昂贵的上下文目录。
证据边界: 本文使用 2026-08-09 快照。L0、L1、L2 结果来自本地评测和仓库公开审计;L1 的逐题原始表格未完整归档,L3 的真实构建、模拟器和截图回归尚未完成。任何生产采用结论都应在目标项目和当前 SDK 上重新验证。