测试环境与正式环境同样的机器显示不同的网络问题
› 为什么测试环境会一直显示RealStatusNotReachable,线上环境就是RealStatusViaWiFi
• I'm gathering key points on why RealReachability might report unreachable—such
as missing startNotifier calls, test environment hostnames being inaccessible,
network restrictions, or proxy use. I’ll explain how RealReachability relies
on pinging a host (default or custom), and suggest checks and configurations
to help the user debug network status detection.
─ Worked for 10s ───────────────────────────────────────────────────────────────
• 原因分析
- 探测目标不可达:RealReachability 依靠 ping/HTTP 探测你配置的 host(默认是
www.apple.com)。测试环境往往指向内网或只在特定网络/VPN 下可访问的域名,设备
若不在同一网络就会把 currentReachabilityStatus 判为 RealStatusNotReachable。
- 初始化与回调线程:必须先调用
RealReachability.sharedInstance().startNotifier(),并在主线程观察
kRealReachabilityChangedNotification。测试包若遗漏这步,状态会一直停留在初始
的 NotReachable。
- 网络策略差异:测试环境可能启用了 HTTPS 拦截、代理、或未配置信任证书,导
致 probe 请求被拒绝,从而落入不可达状态。线上环境用正式域名和证书,自然返
回 ViaWiFi。
排查建议
- 确认 Start:在调试时检查
RealReachability.sharedInstance().isRunningOnBackground 与
notificationReachabilityChanged 是否触发。
- 换探测主机:尝试
RealReachability.sharedInstance().setReachabilityHost("www.apple.com") 或其
它外网域名验证。如果外网可达而测试域不可达,就说明问题出在 host。
- 抓包核实:在测试网络下用 Charles/wireshark 看 ping/HTTP 探测是否被拦截或返回
错误。
- 环境差异对比:检查测试设备是否走 VPN、代理或使用自签名证书,必要时在测试环境
放开 ping/HTTP 白名单。
这样可以定位为什么测试包始终显示 NotReachable 并针对性修复。
