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

iOS 13.2 message: nehelper sent invalid result code [1] for Wi-Fi information request

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

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

Anchorwatch nehelper sent invalid result code [1] for Wi-Fi information request

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

虽然消息似乎没有不利影响,但我通过艰难的方式了解到忽略消息可能是个坏主意。

任何人都可以提示我为什么会收到此消息以及我可以做些什么来抑制它吗?

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

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

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

我按照 here 向应用本身添加 WiFi 访问功能后,错误消息消失了

我在 iOS 13.3 上成功了。这就是我如何做到的。 (编辑 Aug/2020:我已经在 iOS 13.6 上测试过这个并且工作相同)

CNCopyCurrentNetworkInfo 的官方documentation 说如果应用程序

,该功能将提供真实的SSID/BSSID 当前连接
  • 拥有“访问 WiFi 信息权利”(参见 here)并且
  • 是 1) 核心位置,2) 使用 NEHotspotConfiguration 连接当前 Wi-Fi 网络,以及 3) VPN 应用之一。

我已经配置了“接入WiFi信息授权”,所以只满足第一个要求。它适用于 iOS 13.1,但不适用于 iOS 13.3。为了满足后者的要求,我决定在我的 APP 中包含 Core Location。我已经检查了 here 中的代码,但我必须在我的应用 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>

我还需要打电话

manager.requestWhenInUseAuthorization()

之前

manager.requestAlwaysAuthorization()

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

用户需要在首次启动时授予权限。如果允许为“Always”,应用程序可以无错误地使用 CNCopyCurrentNetworkInfo。