Ма c Catalyst VPN-соединение не было предоставлено общего секрета - PullRequest
0 голосов
/ 22 января 2020

Я создаю приложение VPN, которое состоит из NepvnManager и некоторых других необходимых классов.

Для сохранения файла конфигурации VPN я использую KeyChain, как показано ниже. Мое приложение работало гладко.

Но я портировал на iOS приложение для настольного приложения macOs с Ma c Catalyst.

После этого времени VPN не подключается от macOS Catalina, но все же работает на iOS приложениях.

Я проверил доступ к цепочке для ключей от моей мамы c, кажется, ничего плохого. После того, как я нажал кнопку подключения, пароль VPN и общий секретный ключ появляются в Key Chain Access безо всякой ошибки.

А также я видел VPN-соединение в сети из системных настроек в моей Ma c, но, похоже, не подключен .

Я получаю сообщение об ошибке при нажатии кнопки подключения в сетевой части. Общий секрет не был предоставлен, он появляется мгновенно.

Это так странно, что VPN работает в iOS приложениях, но Desktop не работает.

Любая помощь приветствуется.

   public func connectIKEv2(config: Configuration, onError: @escaping (String)->Void) {
        let p = NEVPNProtocolIPSec()
        if config.pskEnabled {
            p.authenticationMethod = NEVPNIKEAuthenticationMethod.sharedSecret
        } else {
            p.authenticationMethod = NEVPNIKEAuthenticationMethod.none
        }
        p.serverAddress = config.server
        p.disconnectOnSleep = false
        p.username = config.account
        p.passwordReference = config.getPasswordRef()
        p.sharedSecretReference = config.getPSKRef()

        p.useExtendedAuthentication = true

        // two lines bellow may depend of your server configuration
        p.remoteIdentifier = config.server
        //  p.localIdentifier = config.account

        loadProfile { _ in
            self.manager.protocolConfiguration = p
            if config.onDemand {
                self.manager.onDemandRules = [NEOnDemandRuleConnect()]
                self.manager.isOnDemandEnabled = true
            }
            self.manager.isEnabled = true
            self.saveProfile { success in
                if !success {
                    onError("Unable to save vpn profile")
                    return
                }
                self.loadProfile() { success in
                    if !success {
                        onError("Unable to load profile")
                        return
                    }
                    let result = self.startVPNTunnel()
                    if !result {
                        onError("Can't connect")
                    }
                }
            }
        }
    }
...