import Foundation import Network // 触发本地网络权限弹窗(#5)。iOS 14+ 默认拒绝 App 访问本地网络;未授权时 WKWebView 内的 // WebRTC 收集不到 host 候选 → 同内网也退回 srflx / relay(慢、非直连)。WKWebView 自身不会 // 触发该权限请求,须由宿主 App 主动发起一次本地网络访问。这里启动一个对 _cdrop._tcp 的 // NWBrowser 浏览即触发系统弹窗;用户允许后,后续 RTCPeerConnection 才能收集本地 host / mDNS // 候选实现直连。仅需触发一次;保持 browser 存活以维持授权态。project.yml 已声明 // NSLocalNetworkUsageDescription + NSBonjourServices(_cdrop._tcp)。 enum LocalNetworkPermission { private static var browser: NWBrowser? // 启动浏览以触发权限请求。幂等:已在浏览则不重复启。浏览结果本身不关心——「发起访问」这一 // 动作即触发系统授权弹窗。 static func trigger() { guard browser == nil else { return } let params = NWParameters() params.includePeerToPeer = true let b = NWBrowser(for: .bonjour(type: "_cdrop._tcp", domain: nil), using: params) b.browseResultsChangedHandler = { _, _ in } browser = b b.start(queue: .main) } }