#import // cdropTriggerLocalNetwork:起一个对 _cdrop._tcp 的 Bonjour 浏览,触发 macOS 本地网络权限弹窗。 // WKWebView 自身不会触发该权限请求,须由宿主 App 主动发起一次本地网络访问;授权后本进程内的 // WebRTC 才能收集 host / mDNS 候选实现同内网直连(见 localnetwork_darwin.go 注释)。浏览结果本身 // 不关心——「发起访问」这一动作即触发授权。保活单个 browser(静态全局,ARC 下持有),幂等。 static nw_browser_t gCdropBrowser = nil; void cdropTriggerLocalNetwork(void) { if (gCdropBrowser != nil) { return; } nw_browse_descriptor_t descriptor = nw_browse_descriptor_create_bonjour_service("_cdrop._tcp", NULL); nw_parameters_t parameters = nw_parameters_create(); nw_parameters_set_include_peer_to_peer(parameters, true); nw_browser_t browser = nw_browser_create(descriptor, parameters); nw_browser_set_queue(browser, dispatch_get_main_queue()); nw_browser_set_browse_results_changed_handler( browser, ^(nw_browse_result_t old_result, nw_browse_result_t new_result, bool batch_complete) { // 不关心结果;浏览动作本身即触发权限请求。 }); nw_browser_set_state_changed_handler( browser, ^(nw_browser_state_t state, nw_error_t error) { // 进入 failed/cancelled 时释放,允许下次重试。 if (state == nw_browser_state_failed || state == nw_browser_state_cancelled) { gCdropBrowser = nil; } }); gCdropBrowser = browser; nw_browser_start(browser); }