iOS 13.2 消息:nehelper 为 Wi-Fi 信息请求发送了无效的结果代码 [1]

Mic*_*onz 6 networking background wifi ios ios13.2

我的应用程序在后台使用位置服务进行跟踪和地理围栏。

现在使用 iOS 13.2,我每秒都会在控制台中看到以下消息:

Anchorwatch nehelper sent invalid result code [1] for Wi-Fi information request
Run Code Online (Sandbox Code Playgroud)

我的应用程序对 WiFi 系统没有任何作用,当我在设备上禁用 WiFi 时,消息消失。

虽然这条消息似乎没有任何不利影响,但我艰难地了解到忽略消息可能是一个坏主意。

任何人都可以暗示我为什么会出现这条消息以及我可以做些什么来压制它?

Hay*_*oon 8

我已经设法在 iOS 13.3 上做到了。这是我如何做到的。(编辑 2020 年 8 月:我已在 iOS 13.6 上对此进行了测试,并且效果相同)

CNCopyCurrentNetworkInfo的官方文档说该功能提供当前连接的真实 SSID/BSSID,如果应用程序

  • 拥有“访问 WiFi 信息权利”(请参阅此处)和
  • 是 1) 核心位置之一,2) 使用 NEHotspotConfiguration 连接当前的 Wi-Fi 网络,以及 3) VPN 应用程序。

我已经配置了“访问WiFi信息授权”,因此只满足第一个要求。它适用于 iOS 13.1,但不适用于 iOS 13.3。为了满足后一个要求,我决定在我的 APP 中包含核心位置。我已经检查了这里的代码,但我必须在我的应用程序的 Info.plist 下面添加一些常量以避免错误。

    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>Application requires user’s location for better user experience.</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>Application requires user’s location for better user experience.</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>Application requires user’s location for better user experience.</string>
Run Code Online (Sandbox Code Playgroud)

我也需要打电话

manager.requestWhenInUseAuthorization()

前

manager.requestAlwaysAuthorization()

当用户第一次启动应用程序时弹出对话框。

用户需要在第一次启动时允许权限。如果允许为“始终”,则应用程序可以无错误地使用 CNCopyCurrentNetworkInfo。


use*_*625 6

查看 WWDC 19 会议 713,发生这种情况是因为在 iOS13 中为了获取 WiFi 详细信息,您应该允许位置权限,每次您尝试从 CNCopySupportedInterfaces 数组中提取 CNCopyCurrentNetworkInfo 数据时,您都会收到此日志。

愚蠢的解决方案可能是尝试启用位置权限,您将不会再收到此错误


Mic*_*onz 6

最终证明,我的应用程序使用的第三方框架启动了对 CNCopyCurrentNetworkInfo 的调用。

在我将此处描述的 WiFi 访问功能添加到应用程序本身后,错误消息消失了