关于 healthkit-code-review
面向审查 Apple HealthKit 代码的技能,提供授权、查询、后台交付和数据类型方面的检查要点。它要求审查者按证据门槛逐步核实可用性、权限语义、线程处理与查询生命周期。
主要功能
- 01HealthKit 可用性与授权检查
- 02查询谓词和结果限制检查
- 03统计聚合方式检查
- 04观察查询与后台交付检查
- 05线程处理和生命周期检查
适用场景
- 01审查 HealthKit 权限流程
- 02检查样本查询和谓词
- 03核对后台交付配置
- 04检查长期运行查询的停止方式
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ existential-birds/ beagle --skill healthkit-code-review安装后在 Claude Code 中输入/healthkit-code-review确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/authorization.mdbackground.mddata-types.mdqueries.md详细介绍
HealthKit 代码审查
快速参考
| 问题类型 | 参考 |
|---|---|
| HKHealthStore、权限、状态检查、隐私 | references/authorization.md |
| HKQuery 类型、谓词、锚定查询、统计 | references/queries.md |
| 后台传输、观察者查询、完成处理程序 | references/background.md |
| HKQuantityType、HKCategoryType、锻炼、单位 | references/data-types.md |
审查清单
- 在执行任何 HealthKit 操作前调用
HKHealthStore.isHealthDataAvailable() - 仅请求所需数据类型的授权(最小权限)
- 不要误解
requestAuthorization完成处理程序的含义,将其视为已授予权限 - 不尝试确定读取权限状态(隐私设计原则)
- 将查询结果分发到主线程以更新 UI
- 仅在谓词有界时使用
HKObjectQueryNoLimit - 使用
HKStatisticsQuery进行聚合,而非手动求和 - 始终调用观察者查询的
completionHandler()(使用defer) - 在
application(_:didFinishLaunchingWithOptions:)中注册后台传输 - 添加后台传输授权(iOS 15+)
- 为数量类型使用正确的单位(例如,心率使用
count/min) - 将长时间运行的查询存储为属性,并在
deinit中停止
何时加载参考资料
- 审查授权/权限流程 -> authorization.md
- 审查 HKSampleQuery、HKAnchoredObjectQuery 或谓词 -> queries.md
- 审查 HKObserverQuery 或
enableBackgroundDelivery-> background.md - 审查 HKQuantityType、HKCategoryType 或 HKWorkout -> data-types.md
审查关卡
按顺序执行。在当前步骤满足通过条件之前,不要在后续步骤中提出问题(每项通过条件都应能根据正在审查的代码库作答)。
- 范围 — **通过:**列出使用
HealthKit、HKHealthStore或HK*API 的文件路径和类型/符号(或明确说明差异中未涉及这些内容)。 - 可用性与存储 — **通过:**指出 HealthKit 使用前调用
isHealthDataAvailable()的位置,或说明在限定代码范围内省略该调用为何可以接受;指出创建或注入HKHealthStore的位置。 - 授权语义 — **通过:**对于每个
requestAuthorization/getRequestStatusForAuthorization,根据 references/authorization.md 指出各处理程序分支(例如,成功并不能证明具有读取权限);不要仅根据authorizationStatus推断读取权限。 - 查询与限制 — **通过:**对于每个查询,指出谓词和限制(仅在谓词有界时使用
HKObjectQueryNoLimit);对于总计/聚合,根据 references/queries.md 指出使用HKStatisticsQuery/ 集合查询,还是手动求和。 - 观察者与后台 — **通过:**如果出现
HKObserverQuery或enableBackgroundDelivery,指出启动/停止观察者以及注册后台传输的位置;根据 references/background.md 指出授权/Info.plist,或标出缺失的配置。如果不存在,**通过:**用一行说明“范围内没有观察者/后台处理。” - 线程与生命周期 — **通过:**指出查询回调中用于 UI 更新的主队列(或已记录的模式);根据上述清单指出长时间运行查询的保留方式/
stop()/deinit。
审查问题
- 创建 HKHealthStore 前是否检查了
isHealthDataAvailable()? - 代码是否能妥善处理被拒绝的权限(返回空结果)?
- 观察者查询完成处理程序是否在所有代码路径中都会调用?
- 后台处理程序中的工作是否精简(约 15 秒限制)?
- HKQueryAnchors 是否按样本类型持久化(而非共用)?
评论
支持 Markdown