func configureVPN(serverAddress: String, username: String, password: String) { var configData:Data = Data.init() self.getCertificate{certificate in configData = certificate! guard //If we want to read from a file // let configData = self.readFile(name: "vtest2"), let providerManager = self.providerManager else { return } self.providerManager?.loadFromPreferences { error in if error == nil { let tunnelProtocol = NETunnelProviderProtocol() tunnelProtocol.username = username tunnelProtocol.serverAddress = serverAddress tunnelProtocol.providerBundleIdentifier = self.providerId // bundle id of the network extension target tunnelProtocol.providerConfiguration = ["ovpn": configData] tunnelProtocol.disconnectOnSleep = false providerManager.protocolConfiguration = tunnelProtocol providerManager.localizedDescription = "Slyfone Guard" // the title of the VPN profile which will appear on Settings providerManager.isEnabled = true providerManager.saveToPreferences(completionHandler: { (error) in if error == nil { providerManager.loadFromPreferences(completionHandler: { (error) in do { try providerManager.connection.startVPNTunnel(options: nil) // starts the VPN tunnel. } catch let error { print(error.localizedDescription) } }) } }) } } } }