NEHotspotConfigurationManager получает это предупреждение:"Невозможно подключиться к сети<имя сети>", пока ошибка равна нулю
Поэтому я пытаюсь контролировать состояние соединения с помощью доводчиков:
func reconnect(success: @escaping () -> Void, failure: @escaping () -> Void) {
let manager = NEHotspotConfigurationManager.shared
let ssid = CameraManager.camera.uuid
let password = "password"
let isWEP = false
let hotspotConfiguration = NEHotspotConfiguration(ssid: ssid, passphrase: password, isWEP: isWEP)
hotspotConfiguration.joinOnce = true
manager.apply(hotspotConfiguration) { (error) in
if (error != nil) {
if let error = error {
switch error._code {
case 8:
print("internal error")
failure()
case 7:
NotificationCenter.default.post(name: Notification.Name(rawValue: "cancelFromHotSpot"), object: nil)
failure()
self.stopSession()
case 13:
success()
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
self.startSession()
}
default:
break
}
}
if error == nil {
print("success connecting wifi")
success()
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
self.startSession()
}
}
}
}
И все же есть сценарий, что я получаю это предупреждение "Невозможно подключиться к сети", пока ошибка равна нулю, есть идеи?
3 ответа
Я думаю, что это поведение iOS ошибка, и мы не можем избежать.
Эта проблема также обсуждалась на форуме разработчиков Apple, и ответ сотрудников Apple был ниже
"Мне нечего сказать здесь, кроме того, что я сказал 13 февраля. Тот факт, что ошибки из подсистемы Wi-Fi не сообщаются через обработчик завершения, является ожидаемым поведением. Если вам не нравится это поведение - и Чтобы быть ясным, я лично согласен с вами об этом - лучший способ продвинуться - подать отчет об ошибке с просьбой изменить его. Пожалуйста, напишите свой номер ошибки, просто для записи. "
Так что у меня нет прекрасных идей, к сожалению. Все идеи у меня есть две ниже (они не решают эту проблему идеально.)
- Ждите исправления ошибки в будущем выпуске.
- Отдельный код "Применение конфигурации" и код связи, как показано ниже.
@IBAction func setConfigurationButtonTapped(_ sender : Any) {
manager.apply(hotspotConfiguration) { (error) in
if(error != nil){
// Do error handling
}else{
// Wait a few seconds for the case of showing "Unable to join the..." dialog.
// Check reachability to the device because "error == nil" does not means success.
}
}
@IBAction func sendButtonTapped(_ sender : Any) {
self.startSession()
}
iOS 13 - Патч
У меня была такая же проблема, но я решил ее, удалив сначала все существующие записи конфигурации:
NEHotspotConfigurationManager.shared.getConfiguredSSIDs { (wifiList) in
wifiList.forEach { NEHotspotConfigurationManager.shared.removeConfiguration(forSSID: $0) }
// ... from here you can use your usual approach to autoconnect to your network
}
Возможно, это не всегда возможное решение, поскольку оно немного радикально, но для меня сработало как шарм.
PS: Я использую это в приложении, работающем под управлением iOS 13. Насколько я знаю, он должен работать также на iOS 11 и 12, но я не тестировал его.