Сообщение iOS 13.2: nehelper отправил недопустимый код результата [1] для запроса информации Wi-Fi
Мое приложение использует службы определения местоположения для отслеживания и геозон в фоновом режиме.
Теперь с iOS 13.2 я каждую секунду вижу в консоли следующее сообщение:
Anchorwatch nehelper sent invalid result code [1] for Wi-Fi information request
Мое приложение ничего не делает с системой Wi-Fi, и когда я отключаю Wi-Fi на устройстве, сообщение исчезает.
Хотя сообщение, похоже, не вызывает никаких побочных эффектов, я на собственном опыте понял, что игнорирование сообщения может быть плохой идеей.
Может ли кто-нибудь намекнуть мне, почему приходит это сообщение и что я могу сделать, чтобы подавить его?
4 ответа
В конце концов выяснилось, что сторонняя структура, которую использует мое приложение, запускает эти вызовы CNCopyCurrentNetworkInfo.
После того как я добавил в приложение возможности доступа к Wi-Fi, как описано здесь, сообщение об ошибке исчезло.
Мне удалось сделать это на iOS 13.3. Вот как я это делаю. (РЕДАКТИРОВАТЬ август /2020: я тестировал это на iOS 13.6 и работал так же)
В официальной документации CNCopyCurrentNetworkInfo говорится, что функция предоставляет реальный SSID/BSSID текущего соединения, если приложение
- имеет "Право доступа к информации Wi-Fi" (см. здесь) и
- является одним из 1) основного местоположения, 2) использования NEHotspotConfiguration для подключения к текущей сети Wi-Fi и 3) приложения VPN.
Я уже настроил "Право доступа к информации Wi-Fi", поэтому выполняю только первое требование. Он работает на iOS 13.1, но не работает на iOS 13.3. Чтобы соответствовать последнему требованию, я решил включить Core Location в свое приложение. Я проверил код здесь, но мне нужно добавить несколько констант ниже в 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()
для отображения диалогового окна при первом запуске приложения пользователем.
Пользователю необходимо разрешить разрешение при первом запуске. Если разрешено "Всегда", приложение может использовать CNCopyCurrentNetworkInfo без ошибок.
Ознакомьтесь с сеансом 713 WWDC 19. Это происходит потому, что в iOS13 для получения сведений о Wi-Fi вы должны разрешить разрешение на определение местоположения, каждый раз, когда вы пытаетесь извлечь данные CNCopyCurrentNetworkInfo из массива CNCopySupportedInterfaces, вы получите этот журнал.
глупым решением может быть попытка включить разрешение местоположения, и вы больше не получите эту ошибку
Как упомянул пользователь 784625, это видео решило для меня проблему. Я не осознавал, что при использовании вы можете получить обратно значения только в том случае, если активная сеть — это та, которую вы настроили вNEHotspotConfiguration
. Это предпочтительнее, чем запрашивать разрешения на определение местоположения, если все, что вам нужно, — это подтвердить, что вы подключились к настроенной сети.