iOS Networking 是一套面向 iOS 26+ 的现代网络编程技能文档,使用 URLSession 配合 async/await 与结构化并发,所有示例以 Swift 6.3 为目标,且不需要任何第三方依赖——URLSession 已能覆盖绝大多数网络需求。
用途 该技能用于构建、审查或改进 iOS/macOS 应用中的网络代码,帮助开发者采用现代 Swift 并发模式替代旧的 completion-handler 写法。
主要能力
- 核心 URLSession async/await:包括基础 GET 请求、带配置的 URLRequest(方法、请求头、请求体、超时、缓存策略)、响应状态码校验、基于 Codable 的 JSON 解码(支持 ISO8601 日期与 snake_case 键转换)、下载与上传(download(for:)、upload(for:from:)、upload(for:fromFile:)),以及使用 bytes(for:) 与 AsyncBytes 进行流式处理(如服务器发送事件)。
- API 客户端架构:基于协议的客户端(APIClientProtocol、Endpoint),便于测试时替换实现;面向 MV 模式的轻量闭包式客户端;请求中间件/拦截器(RequestMiddleware),用于认证、日志、分析头等横切关注点;以及 401 令牌刷新后重试一次的流程。
- 错误处理:结构化错误类型 NetworkError,将 URLError 映射为类型化错误;关键 URLError 场景(离线、连接中断、超时、取消、DNS 失败、TLS 失败、代理认证)及对应处理动作;解码服务器错误响应体;使用结构化并发实现指数退避重试,尊重任务取消,并跳过取消与 4xx 客户端错误(429 除外)的重试。
- 分页:基于游标或偏移量的分页,配合 AsyncSequence,并在页与页之间检查 Task.isCancelled。
- 网络可达性:使用 Network 框架的 NWPathMonitor(而非第三方 Reachability 库),包装为 AsyncStream;可检查 path.isExpensive(蜂窝网络)与 path.isConstrained(低数据模式)以调整行为。
- URLSession 配置:为生产代码创建配置化会话,设置请求/资源超时、waitsForConnectivity、缓存策略、附加请求头等。
- 常见错误与审查清单:列出应避免的做法(如对动态输入强制解包 URL、在主线程解码大负载、忽略取消、直接 mock URLSession、用 data(for:) 下载大文件、在 body 或视图初始化器中发起请求、硬编码令牌、忽略状态码盲目解码等)及对应正确做法,并提供一份网络代码审查清单。
使用方式 该技能以文档形式提供模式与代码示例,开发者可参照示例在项目中实现网络层。文档还引用了若干参考文件:references/urlsession-patterns.md(完整 API 客户端实现、多部分上传、下载进度、URLProtocol mock、重试/退避、证书固定、请求日志、分页实现)、references/background-websocket.md(后台 URLSession 配置、后台上传下载、WebSocket 模式与重连策略)、references/lightweight-clients.md(轻量闭包式客户端模式)、references/network-framework.md(Network.framework 的 NWConnection、NWListener、NWBrowser、NWPathMonitor 及底层 TCP/UDP/WebSocket 模式)。
适用场景 适用于需要为 iOS/macOS 应用编写或重构网络层的场景,尤其是希望采用 async/await 与结构化并发、减少第三方网络库依赖、统一错误处理与重试策略、实现认证中间件与令牌刷新、处理分页与流式数据、以及进行网络代码审查的团队。
限制 文档明确以 iOS 26+ 与 Swift 6.3 为目标;示例不依赖第三方库,并建议在 URLSession async/await 已能满足需求时不使用 Alamofire 或 Moya。关于具体收费、价格、平台支持范围等更多信息,资料中暂未提供。