什么触发了iOS 14上的“想要查找并连接到本地网络上的设备”权限通知?

798qvoo8  于 2023-04-22  发布在  iOS
关注(0)|答案(8)|浏览(874)

除了Bonjour之外,哪些实际方法调用会触发iOS 14上的“想要查找并连接到本地网络上的设备”权限通知?
这是这个新权限的WWDC会话的屏幕截图。这只是一个概述。我更感兴趣的是弄清楚所有的方法调用都触发了什么。

qzwqbdag

qzwqbdag1#

如果你在调试配置中使用react native,那么你包含了所有负责与开发机器通信的代码,所以你可以忽略这个消息。
但是最好检查一下你没有其他的库也需要访问。要做到这一点,只需要构建一个发布版本,看看消息是否仍然存在。

w8f9ii69

w8f9ii692#

简而言之,Bonjour。它的使用不再是“透明的”。更多信息请参见https://developer.apple.com/videos/play/wwdc2020/10110/
如果您的应用与使用Bonjour或其他本地网络协议的设备交互,则必须在iOS 14中添加对本地网络隐私权限的支持。
即使是现有的应用程序也要遵守这一规则;第一次尝试使用Bonjour会触发授权警报。

6za6bjd0

6za6bjd03#

Apple(Dev Forums上的Eskimo)发布了一个常见问题解答,提供了有关此警报的更多细节:https://developer.apple.com/forums/thread/663858
特别是,提供更多的信息,什么触发此警报是常见问题解答-2:https://developer.apple.com/forums/thread/663874

哪些操作需要访问本地网络?

一般规则是,要向本地网络地址发送流量,用户需要授予您的应用本地网络访问权限。常见场景包括:

  • 建立传出TCP连接-是
  • 侦听和接受传入的TCP连接-否
  • 发送UDP单播-是
  • 发送UDP多播-是
  • 发送UDP广播-是
  • 接收传入UDP单播-否
  • 接收传入的UDP多播-是
  • 接收传入的UDP广播-是

这些TCP和UDP检查是在系统的最底层完成的,因此适用于所有网络API。这包括网络框架,BSD套接字,NSStream,NSURLSession和WKWebView,以及您在这些之上的任何其他协议。

重要提示接收传入的UDP多播或广播目前不需要本地网络访问,但因为我们希望在未来的更新中更改此情况,所以我们现在的建议是您编写代码时要像这样做(r. 69792887,70017649)。

解析链路本地DNS名称(根据RFC 6762,以local结尾的DNS名称)需要本地网络访问。同样,此检查适用于各种API,包括<dns_sd.h>、<net_db.h>、Network framework、NSStream和NSURLSession。
最后,所有Bonjour操作都需要本地网络访问:

  • 在卓悦注册服务-是
  • 浏览Bonjour服务-是
  • 解决Bonjour服务-是

同样,这些检查适用于使用Bonjour的所有API,包括<dns_sd.h>Network framework、NSNetService和Multipeer Connectivity。

注意您必须在Info. plist中声明您使用的Bonjour服务类型。有关详细信息,请参阅如何将多对等连接服务类型Map到Bonjour服务属性中的条目?。

基于Bonjour的服务,您看不到任何网络详细信息,不需要本地网络访问。这些服务包括:

  • AirPlay -否
  • 通过UIKit打印-否
ztmd8pv5

ztmd8pv54#

我的一个应用程序在我们的互联网多人模式下意外触发了这个提示。我们使用RakNet进行网络连接(这是一个使用BSD套接字发送/接收UDP的C++库),我能够跟踪问题到RNS2_Berkley::BindShared函数here
在创建UDP套接字后,RakNet通过让它向自己发送一个小测试包来测试套接字的健康/有效性。iOS 14将这种发送给自己的行为标记为本地网络上的通信。我不确定这种发送给自己的行为是套接字编程中的常见模式,还是RakNet的特殊怪癖。令人沮丧的是,操作系统提示符实际上并没有出现,直到后来当套接字被用于真实的的,这使得问题很难跟踪。
我认为这是操作系统的误报,并向Apple(FB 8802121)提出了这一点。不过我不会屏住呼吸,所以我刚刚禁用了iOS的RakNet行为,并希望它不是太重要。
编辑:为了更直接地回答原始问题:sendto是一个可以触发此提示的方法调用。

j0pj023g

j0pj023g5#

我被苹果的应用审查拒绝了。我使用的是GCDWebServer,它在我的应用中创建了一个嵌入式http服务器。
我想我应该在info.plist中提供一个消息来告诉用户我的应用程序想要做什么。
我想更新,如果这将通过应用程序的审查。

<key>NSLocalNetworkUsageDescription</key>
<string>xxx uses the local network to connect with devices around you.</string>
6qftjkof

6qftjkof6#

关于iOS 14:权限请求:我想找到并连接到您的本地网络上的设备,经过无数次部署到我的物理设备,我已经找出了是什么原因导致这在我的情况下。
我有一个Xamarin.Forms应用程序
1.调用localhost:xxxx来进行一些本地日志记录
1.我使用一个名为LiveSharp的产品,它可以为XAML和C#代码更改进行本地热重载。
所以Livesharp实际上也与我本地主机上的服务器进行了通信。在禁用了这两个服务器并在我的物理设备上进行了全新的安装之后,权限请求已经消失了..耶
注意:我不得不从我的项目中完全删除LiveSharp nuget包。此外,我试图重新启用我的本地主机日志记录,由于某种原因,权限请求没有出现..:headscratch
所以:删除应用程序中发生的任何本地主机通信,或者至少在它周围放一个if语句,允许它在appsettings中设置为true

qxgroojn

qxgroojn7#

我也有一个Xamarin应用,我使用了LiveXaml包,删除后消息就没有了。

mnemlml8

mnemlml88#

如果在您的Entitlements.plist中有一个空字符串条目用于com.apple.developer.associated-domains,那么这也将触发“would like to find and connect to devices…”权限弹出窗口

相关问题