SystemConfiguration.CaptiveNetwork не работает на iOS 12

У меня есть функция, которая определяет текущий SSID от пользователя. К сожалению, это больше не работает с iOS 12. Это означает, что он просто перескакивает через if let interfaceInfo = CNCopyCurrentNetworkInfo(interface as! CFString) as NSDictionary? { часть. Возможно, это просто ошибка или она устарела. Я ничего не нашел в Apple Docs. На старых устройствах iOS 11, 10 и 9 он работает хорошо.

Вот мой код:

func getWiFiSsid() -> String? {
    if let interfaces = CNCopySupportedInterfaces() as NSArray? {
        for interface in interfaces {
            if let interfaceInfo = CNCopyCurrentNetworkInfo(interface as! CFString) as NSDictionary? {

                ssid = interfaceInfo[kCNNetworkInfoKeySSID as String] as? String


            }
        }
    }
    return ssid
}

person Victor Lobe    schedule 08.06.2018    source источник
comment
Кстати - использование if let для приведения к необязательному не имеет смысла. И не используйте NSArray или NSDictionary в Swift.   -  person rmaddy    schedule 08.06.2018
comment
Вы видели это большое примечание в документации для CNCopyCurrentNetworkInfo: Чтобы использовать эту функцию в iOS 12 и более поздних версиях, включите возможность добавления информации о WiFi для своего приложения в Xcode. Когда вы включаете эту возможность, Xcode автоматически добавляет разрешение «Добавить информацию о WiFi» в ваш файл полномочий и добавляет соответствующую функцию к вашему идентификатору приложения.   -  person rmaddy    schedule 08.06.2018
comment
@rmaddy О, хорошо, спасибо, я займусь этим   -  person Victor Lobe    schedule 08.06.2018
comment
@rmaddy Теперь я вижу   -  person Victor Lobe    schedule 08.06.2018
comment
@VictorLobe Это устранило проблему?   -  person stackunderflows    schedule 06.08.2018


Ответы (1)


Чтобы использовать эту функцию в iOS 12 и более поздних версиях, включите возможность доступа к информации Wi-Fi для своего приложения в Xcode. Когда вы включаете эту возможность, Xcode автоматически добавляет право доступа к информации Wi-Fi в ваш файл прав и идентификатор приложения.

https://developer.apple.com/documentation/systemconfiguration/1614126-cncopycurrentnetworkinfo?language=objc

введите описание изображения здесь

person Ckwanted    schedule 18.09.2018
comment
Чтобы включить возможность доступа к информации Wi-Fi, перейдите в Настройки проекта - ›Выберите цель приложения -› Вкладка «Возможности». Есть переключатель для включения доступа к информации Wi-Fi. - person Drew H; 19.09.2018
comment
Я не вижу этого в списке возможностей, перечисленных в Xcode 10. Есть идеи? - person Ryan Mendoza; 21.09.2018
comment
Обратите внимание: чтобы запустить его на устройстве, вам понадобится профиль подготовки для AppID с включенной опцией. Это не может быть подстановочный AppID. - person Florian Burel; 02.10.2018
comment
После этого мне также пришлось перейти в консоль разработчика и включить Доступ к информации Wi-Fi для моего идентификатора приложения. Затем мне пришлось заново создать профиль подготовки, поскольку он был помечен как недействительный. После всего этого я смог снова заставить его работать. - person kwahn; 17.10.2018
comment
Конфигурация беспроводного аксессуара не является информацией о доступе к Wi-Fi. Не устанавливайте неправильную возможность. - person Harrison Xi; 21.02.2019
comment
Чтобы это работало, убедитесь, что вы запрашиваете авторизацию местоположения. Информация ssid не будет работать, если приложение не авторизовано для использования местоположения. - person Ashwini Shahapurkar; 31.07.2020