You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 18 上Bonjour扫描持续失败,请求排查解决方法

Bonjour设备发现失败(错误码-72008)问题解决

问题根源

你的plist配置和服务搜索逻辑存在两处关键问题:

  1. NSBonjourServices条目格式错误

    • _services._dns-sd._udp.缺少.local.后缀,正确格式应为_services._dns-sd._udp.local.,这是用来发现所有Bonjour服务类型的标准条目
    • _tcp.local.是无效的服务类型格式,Bonjour要求服务类型必须遵循_服务类型._传输协议.local.的结构,这类无效条目会被系统忽略,还可能干扰正常搜索
  2. Multicast权限可能未正确配置
    com.apple.developer.networking.multicast是需要通过Xcode的「Signing & Capabilities」面板添加的权限,仅手动在plist中写入不会生效(这是苹果的entitlement机制限制)

修正步骤

1. 修复NSBonjourServices配置

替换为以下合法配置,如果你要覆盖所有Bonjour设备,保留全服务类型条目即可:

<key>NSBonjourServices</key>
<array>
    <!-- 发现所有Bonjour服务类型 -->
    <string>_services._dns-sd._udp.local.</string>
    <!-- 可添加具体服务类型,比如HTTP服务 -->
    <string>_http._tcp.local.</string>
</array>

删除_tcp.local.这类无效条目。

2. 确认Multicast权限生效

打开Xcode项目的「Signing & Capabilities」面板,点击「+ Capability」,搜索并添加「Multicast Networking」,系统会自动正确配置对应的entitlement,无需手动修改plist。

3. 检查代码中的搜索逻辑

查看旧项目的NSNetServiceBrowser调用:

  • 确保调用searchForServicesOfType:inDomain:时,服务类型参数是@"_services._dns-sd._udp.",域参数是@"local."
  • 如果要搜索具体服务类型,比如HTTP,参数应为@"_http._tcp."和@"local."

额外注意事项

  • iOS 14+要求必须明确声明要搜索的服务类型,不允许模糊匹配
  • 真机测试时,确保iPhone和Bonjour设备处于同一Wi-Fi局域网
  • 部分Bonjour设备仅对应特定服务类型(如打印机对应_ipp._tcp.local.),若要全量发现,需先通过_services._dns-sd._udp.local.获取所有服务类型,再逐个搜索每个类型下的服务

内容的提问来源于stack exchange,提问作者granpaJones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 08:37:16