Я создаю приложение 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")
}
}
}
}
}