关于 urlsession-code-review
面向 Swift 网络代码的审查技能,聚焦 URLSession。它按顺序检查响应验证、会话生命周期、配置、传输与安全,并要求报告前满足证据门槛。
主要功能
- 01URLSession 审查清单
- 02HTTP 与传输错误检查
- 03会话生命周期和资源检查
- 04后台传输检查
- 05带顺序门槛的安全检查
适用场景
- 01审查 Swift 网络代码变更
- 02检查 HTTP 状态与错误处理
- 03审计后台任务和文件传输
- 04准备带文件行号的审查结论
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ existential-birds/ beagle --skill urlsession-code-review安装后在 Claude Code 中输入/urlsession-code-review确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/async-networking.mdcaching.mderror-handling.mdrequest-building.md详细介绍
URLSession 代码审查
快速参考
| 主题 | 参考资料 |
|---|---|
| Async/Await | async-networking.md |
| 请求 | request-building.md |
| 错误 | error-handling.md |
| 缓存 | caching.md |
审查清单
响应验证
- 验证 HTTP 状态码 — URLSession 不会因 404/500 抛出错误
- 检查状态码前,将响应转换为 HTTPURLResponse
- 同时处理传输错误(URLError)和 HTTP 错误
内存与资源
- 移动或删除下载的文件(异步 API 不会自动删除)
- 使用代理的会话调用
finishTasksAndInvalidate() - 长时间运行的任务使用
[weak self] - 在适当情况下取消已存储的 Task 引用
配置
- 设置
timeoutIntervalForResource(默认值为 7 天!) - 为 URLCache 设置足够的容量(默认 512KB 太小)
- 复用会话以进行连接池管理
后台会话
- 使用唯一标识符(尤其是使用 App 扩展时)
- 使用基于文件的上传(而非基于数据的上传)
- 使用代理方法(而非完成处理器)
安全
- 不硬编码机密信息(使用 Keychain)
- 清理标头值,防止 CRLF 注入
- 通过 URLComponents 设置查询参数(而非字符串拼接)
硬性门槛(报告发现前)
按顺序完成。前一个门槛未通过时,不要继续。
- 范围 — 通过条件: 至少指出一个正在审查的文件,其中
URLSession、URLRequest、HTTPURLResponse/URLResponse、URLCache或URLError出现在网络请求路径中。如果均不适用,请停止并说明“超出范围”。 - HTTP 与传输 — 通过条件: 在指出缺少 HTTP 状态处理或“将 404 当作成功”之前,引用接收
response的 completion、async 或for await路径的文件:行号,并说明是否将响应转换为HTTPURLResponse、是否检查statusCode(或引用执行这些操作的辅助函数)。如果看不到处理程序,请说明 未知 并索要相关代码,不要臆断。 - 会话生命周期 — 通过条件: 对于带代理的自定义
URLSession,引用finishTasksAndInvalidate()或所依据的文档化长期运行/单例模式;如果发现依赖配置,则说明使用的是.shared。如果只有临时的一次性URLSession.shared请求,且不存在代理问题,则跳过。 - 后台或文件传输(如适用) — 通过条件: 如果出现
URLSessionConfiguration.background、downloadTask或限定于 App 扩展的会话,发现项必须按要求引用标识符唯一性、代理与完成处理器的用法,或文件 URL。如果这些 API 均未出现,请标记为 N/A 并继续。 - 严重程度与清单 — 通过条件: 每个 Critical 项都包含
文件:行号,并指出违反的 审查清单 小节(例如“响应验证”“后台会话”)。严重程度较低的项目仍须指出其依据所在的文件。
输出格式
### Critical
1. [FILE:LINE] Missing HTTP status validation
- Issue: 404/500 responses not treated as errors
- Fix: Check `httpResponse.statusCode` is 200-299
评论
支持 Markdown