从 iOS 15(可能还有 iOS 14)开始,我一直无法让 Bonjour 正常工作(现在可以正常工作了)。我正在使用MCSession
,MCAdvertiserAssistant
和MCNearbyServiceBrowser
. 我的委托方法都没有被触发。那是无线电静默。(之前的 iOS 版本一切正常。)
最终,我发现我必须Local Network
在设备设置中打开我的应用程序的开关。没有关于此的文档,Apple 也没有为应用程序提供检测开关是否关闭的简单方法。
我找到了一篇关于 Bonjour 的论坛帖子,Local Network Privacy FAQ,
由 Quinn “The Eskimo!”撰写。(Apple 开发人员技术支持)。 https://developer.apple.com/forums/thread/663858。常见问题解答 #9,标题为How do I tell whether I’ve been granted local network access?,
提供了解本地网络开关是否关闭的间接方法。该常见问题解答说:
如果您使用的是 Bonjour,如果您的 Bonjour 操作因您没有本地网络访问权限而失败,您将收到 kDNSServiceErr_PolicyDenied (-65570) 错误。
我能找到的所有返回错误的方法(例如 MCSession's sendData:toPeers:withMode:error:
)都取决于我传递本地对等 ID,但我没有任何对等 ID(除了我自己的),因为我的委托方法都没有返回任何信息(这就是我了解附近同行的方式)。如果我没有提供 peerID,那么我从该方法得到的错误是关于没有提供有效的附近对等 ID,而不是kDNSServiceErr_PolicyDenied
我正在寻找的错误。
FAQ线程被锁定,所以我不能在那里问这个问题。
我使用什么方法来获取kDNSServiceErr_PolicyDenied
错误?
我正在使用 Objective-C 和 Xcode 13.2.1。
仅供参考,我的 Info.Plist 包括以下键:(NSBonjourServices
带有 _MyServiceType._tcp 和 _MyServiceType._udp 的数组)NSBluetoothAlwaysUsageDescription
、、、NSBluetoothPeripheralUsageDescription
和NSLocalNetworkUsageDescription
。