- Swift 主实现:
RealReachability2/Sources/RealReachability2 - Objective-C 主实现:
RealReachability2/Sources/RealReachability2ObjC - 测试:
RealReachability2/Tests - 构建与 CI:
RealReachability2/Package.swift、RealReachability2/.github/workflows/ci.yml - 文档:
RealReachability2/README.md
swift build -v:通过。- Swift 单元测试:通过(
RealReachability2Tests.RealReachability2Tests,43/43)。 - ObjC 单元测试:通过(
RRReachabilityTests,46/46)。 - HTTP 集成测试抽样:通过(
testHTTPProberWithShortTimeout)。 - Swift ICMP 集成测试抽样:出现挂起(
testICMPPingerWithShortTimeout,需手动终止)。
- 设计方向正确:
NWPathMonitor + HTTP + ICMP的混合探测模型。 - Swift 使用 async/await +
AsyncStream;ObjC 使用通知回调模型。 - 双栈结构清晰,便于独立演进与对比验证。
-
Swift ICMP 可能悬挂
- 位置:
/RealReachability2/Sources/RealReachability2/Prober/ICMPPinger.swift:45 - 说明:
PingOperation为局部对象,切主线程时[weak self],可能导致生命周期提前结束、continuation 不 resume。
- 位置:
-
ObjC 一次性检查在未启动 monitor 时可能误判不可达
- 位置:
/RealReachability2/Sources/RealReachability2ObjC/RRReachability.m:129 - 说明:
checkReachabilityWithCompletion直接依赖pathMonitor.isSatisfied,而 monitor 默认未启动。
- 位置:
-
Swift 6 并发兼容风险(async 上下文里直接 lock/unlock)
- 位置:
/RealReachability2/Sources/RealReachability2/RealReachability.swift:162 - 说明:当前是 warning,后续 Swift 6 语言模式会升级为 error。
- 位置:
-
PathMonitor 可重启语义风险
- 位置:
/RealReachability2/Sources/RealReachability2/Monitor/PathMonitorWrapper.swift:15 - 说明:
NWPathMonitor被 cancel 后复用存在行为不确定性。
- 位置:
-
流模型仅单订阅,可能互相覆盖
- 位置:
/RealReachability2/Sources/RealReachability2/RealReachability.swift:95、RealReachability2/Sources/RealReachability2/Monitor/PathMonitorWrapper.swift:27 - 说明:当前 continuation 单实例,多个订阅者会相互抢占。
- 位置:
-
README 与 SPM 平台声明不一致
- 位置:
/RealReachability2/README.md:10、RealReachability2/Package.swift:8 - 说明:README 声称 ObjC iOS 12+,但 package 平台全局 iOS 13+。
- 位置:
-
CI 过滤策略不精确
- 位置:
/RealReachability2/.github/workflows/ci.yml:34、RealReachability2/.github/workflows/ci.yml:52 - 说明:
--filter RealReachability2Tests会包含集成测试;ObjC 过滤名当前可能匹配不到目标。
- 位置:
-
ObjC ICMP 支持“副链路兜底检测”能力(暂不实现,仅记录)
- 位置:
/RealReachability2/Sources/RealReachability2ObjC/RRPingFoundation.m、RealReachability2/Sources/RealReachability2ObjC/RRReachability.m - 说明:当前
allowCellularFallback(默认NO)仅在包含 HTTP 探测时生效;ICMP 模式下的“副链路兜底检测”尚未实现,暂仅记录待办。
- 位置:
- 第 1 步:修复 P0(Swift ICMP 生命周期/超时兜底、ObjC 一次性检查路径获取逻辑)。
- 第 2 步:修复并发与流模型(Swift 6 兼容、monitor 重启语义、多订阅广播)。
- 第 3 步:修复工程面(CI 过滤、文档与平台声明统一)。
- 第 4 步:补齐针对性回归测试(尤其是 ICMP 超时与挂起场景)。
- 构建:
swift build -v通过且无新增 warning。 - 单测:Swift/ObjC 单测全绿。
- 集成测试:HTTP 与 ICMP 关键用例可在限定超时内结束,不出现挂起。
- CI:测试分层明确(unit/integration 可控运行),结果可复现。
- 文档:README 与
Package.swift平台声明一致。