0

从 iOS 15(可能还有 iOS 14)开始,我一直无法让 Bonjour 正常工作(现在可以正常工作了)。我正在使用MCSession,MCAdvertiserAssistantMCNearbyServiceBrowser. 我的委托方法都没有被触发。那是无线电静默。(之前的 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、、、NSBluetoothPeripheralUsageDescriptionNSLocalNetworkUsageDescription

4

0 回答 0