SuperAPI AI 工具集

axiom-networking-migration

通用与其它

查看项目

更新于 10-15 20:11

技能介绍

用途:该技能提供 Apple 网络框架迁移指南,帮助开发者判断是否需要迁移以及迁移到哪个 API。

主要能力:

  1. 决策树:按当前使用的 API 判断方向。若使用 URLSession 处理 HTTP/HTTPS REST,建议保留,因为 URLSession 负责缓存、Cookie、认证挑战、HTTP/2/3 且针对 Web API 高度优化;Network.framework 面向自定义协议而非 HTTP。
  2. 迁移 1:BSD Sockets(socket、connect、send、recv)迁移到 NWConnection(iOS 12+)。提供映射表:socket()+connect() 对应 NWConnection+start();send()/sendto() 对应 connection.send(content:completion:);recv()/recvfrom() 对应 receive(minimumIncompleteLength:maximumLength:completion:);bind()+listen() 对应 NWListener;accept() 对应 listener.newConnectionHandler;getaddrinfo() 交由 NWConnection 处理 DNS;SCNetworkReachability 改用 connection.stateUpdateHandler;setsockopt() 对应 NWParameters。文档给出前后对比示例(C 的 BSD 阻塞写法与 Swift 的 NWConnection 非阻塞写法),并列出收益:代码变短、无手动 DNS 与阻塞、无 unsafe 指针、自动 Happy Eyeballs、代理支持、WiFi Assist。
  3. 迁移 2:NWConnection 迁移到 NetworkConnection(iOS 26+),动机是 async/await 消除回调地狱、内置 TLV 帧与 Coder 协议、无需 [weak self]、通过异步序列监控状态。映射:stateUpdateHandler 对应 for await state in connection.states;send(content:completion:) 对应 try await connection.send(content);receive(...) 对应 try await connection.receive(exactly:);手动 JSON 编解码对应 Coder(MyType.self, using: .json);自定义分帧对应 TLV。若回调式代码运行正常可保留,未标记废弃。
  4. 迁移 3:URLSession StreamTask 转 NetworkConnection。需要 UDP、自定义协议或底层控制(包节流、ECN、服务类别)时迁移;仅做 HTTP/HTTPS、需 WebSocket、需内置缓存与 Cookie 时保留 URLSession。
  5. 其他:SCNetworkReachability 已废弃,改用 NWPathMonitor(iOS 12+),示例为创建 monitor 并设置 pathUpdateHandler 判断 .satisfied 输出 Online/Offline;CFSocket/NSStream 已废弃,改用 NWConnection。

适用场景:维护旧网络代码、准备升级到 iOS 26 异步 API、或评估是否该继续使用 URLSession 的 Apple 平台开发场景。

限制:文档以代码示例与迁移对照为主,具体项目改动、可用平台版本、性能与收费信息暂未提供,需结合官方文档核实。