сканирование доступного Wi-Fi с помощью HotspotHelper

#swift4 #wifi #xcode10.1 #nehotspothelper

#swift4 #Wi-Fi #xcode10.1 #nehotspothelper

Вопрос:

Я новичок в Swift. Я долго искал этот вопрос, но все еще не могу найти решение. Я узнал, что он может получить доступ к Wi-Fi для iOS 12, но я также видел, как некоторые люди говорили, что невозможно получить все доступные названия сетей Wi-Fi и информацию…

Теперь он может получить имя подключенного Wi-Fi в моем коде, но я хочу также указать все доступные названия Wi-Fi поблизости, например, на странице настроек в iPhone. Я уже воспользовался возможностями «Доступ к информации Wi-Fi», «Настройка точки доступа», «Расширение сети», «Персональный VPN» и «Настройка беспроводных аксессуаров». Но я обнаружил, что NEHotspotHelper.register() все время возвращает false. Кто-нибудь может сказать мне, почему это происходит или как это исправить? или он может перейти на страницу настроек iPhone в приложении? большое спасибо. Кроме того, я не являюсь носителем английского языка, мой английский довольно плохой, спасибо, что прочитали мой вопрос.

Вот мой код:

 import UIKit
import NetworkExtension
import SystemConfiguration
import SystemConfiguration.CaptiveNetwork

class SearchVC: UIViewController {
    @IBAction func SearchAction(_ sender: UIButton) {
        print(fetchSSIDInfo())
        let targetSsid = fetchSSIDInfo()
        let targetAnnotation: String = targetSsid!

    NSLog("Started wifi list scanning.")
    let options: [String: NSObject] = [
        kNEHotspotHelperOptionDisplayName: targetAnnotation as NSString
    ]

    let queue = DispatchQueue(label: "com.example.test")

    let isAvailable = NEHotspotHelper.register(options: options, queue: queue) { (command) in
        switch command.commandType {
        case .evaluate,
             .filterScanList:
            let originalNetworklist = command.networkList ?? []
            let networkList = originalNetworklist.compactMap { network -> NEHotspotNetwork? in
                print("networkName: (network.ssid); strength: (network.signalStrength)")
                if network.ssid == targetSsid {
                    network.setConfidence(.high)
                    //network.setPassword(targetPassword)
                    return network
                }
                return nil
            }
            let response = command.createResponse(.success)
            response.setNetworkList(networkList)
            response.deliver()
        default:
            break
        }
    }
    if isAvailable{
        print("isAvailable")
    }else{print("notAvailable")}
}

func fetchSSIDInfo() -> String? {
    var ssid: 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
                break
            }
        }
    }
    return ssid
}
}