Open vpn не работает должным образом. После запуска функции configureVPN часть connection.startVpn запускается, но ничего не происходит. Но я бы поставил ниже
Я также проверил, что PacketTunnelProvider plist всегда выглядит идеально.
Функция readFile возвращает данные, полученные из файла ovpn. .
Также добавлены права на расширение сети. Любая помощь будет великолепна.
<dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.networkextension.packet-tunnel</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).PacketTunnelProvider</string>
</dict>
class ViewController: UIViewController {
var providerManager: NETunnelProviderManager!
override func viewDidLoad() {
super.viewDidLoad()
self.loadProviderManager {
self.configureVPN(serverAddress: "127.0.0.1", username: "uid", password: "pw123")
}
}
func loadProviderManager(completion:@escaping () -> Void) {
NETunnelProviderManager.loadAllFromPreferences { (managers, error) in
if error == nil {
self.providerManager = managers?.first ?? NETunnelProviderManager()
completion()
}
}
}
func configureVPN(serverAddress: String, username: String, password: String) {
guard let configData = self.readFile(path: "serverfile.ovpn") else { return }
print("configData\(configData)")
self.providerManager?.loadFromPreferences { error in
if error == nil {
let tunnelProtocol = NETunnelProviderProtocol()
tunnelProtocol.username = username
tunnelProtocol.serverAddress = serverAddress
tunnelProtocol.providerBundleIdentifier = "com.bgnmobi.openDeneme.Packet" // bundle id of the network extension target
tunnelProtocol.providerConfiguration = ["ovpn": configData, "username": username, "password": password]
tunnelProtocol.disconnectOnSleep = false
self.providerManager.protocolConfiguration = tunnelProtocol
self.providerManager.localizedDescription = "GuardillaVPN" // the title of the VPN profile which will appear on Settings
self.providerManager.isEnabled = true
self.providerManager.saveToPreferences(completionHandler: { (error) in
if error == nil {
self.providerManager.loadFromPreferences(completionHandler: { (error) in
do {
print("aSDFs34dasdsadsa")
try self.providerManager.connection.startVPNTunnel() // starts the VPN tunnel.
} catch let error {
print(error.localizedDescription)
}
})
} else {
print("asdasdsadsa")
print(error)
}
})
}
}
}
func readFile(path: String) -> Data? {
let mypath = Bundle.main.path(forResource: "serverfile", ofType: ".ovpn")
if let dir = FileManager.default.urls(for: .downloadsDirectory, in: .userDomainMask).first{
let fileURL = dir.appendingPathComponent(mypath!)
//reading
do{
let text2 = try String(contentsOfFile: mypath!,encoding: String.Encoding.utf8)
print(text2)
let gerekliURL = URL(fileURLWithPath: mypath!)
print(gerekliURL)
return try Data(contentsOf: gerekliURL, options: .uncached)
}catch{
// print("can t read")
}
}
return nil
}
}