Conéctese a VPN mediante programación en iOS 8
Desde el lanzamiento de iOS 8 beta, encontré un marco de Network Extension en su paquete que permitirá a los desarrolladores configurar y conectarse a servidores VPN mediante programación y sin ninguna instalación de perfil.
El marco contiene una clase principal llamada NEVPNManager. Esta clase también tiene 3 métodos principales que me permiten guardar, cargar o eliminar las preferencias de VPN. Escribí un fragmento de código en el método viewDidLoad de la siguiente manera:
NEVPNManager *manager = [NEVPNManager sharedManager];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(vpnConnectionStatusChanged) name:NEVPNStatusDidChangeNotification object:nil];
[manager loadFromPreferencesWithCompletionHandler:^(NSError *error) {
if(error) {
NSLog(@"Load error: %@", error);
}}];
NEVPNProtocolIPSec *p = [[NEVPNProtocolIPSec alloc] init];
p.username = @“[My username]”;
p.passwordReference = [KeyChainAccess loadDataForServiceNamed:@"VIT"];
p.serverAddress = @“[My Server Address]“;
p.authenticationMethod = NEVPNIKEAuthenticationMethodCertificate;
p.localIdentifier = @“[My Local identifier]”;
p.remoteIdentifier = @“[My Remote identifier]”;
p.useExtendedAuthentication = NO;
p.identityData = [My VPN certification private key];
p.disconnectOnSleep = NO;
[manager setProtocol:p];
[manager setOnDemandEnabled:NO];
[manager setLocalizedDescription:@"VIT VPN"];
NSArray *array = [NSArray new];
[manager setOnDemandRules: array];
NSLog(@"Connection desciption: %@", manager.localizedDescription);
NSLog(@"VPN status: %i", manager.connection.status);
[manager saveToPreferencesWithCompletionHandler:^(NSError *error) {
if(error) {
NSLog(@"Save error: %@", error);
}
}];
También coloqué un botón en mi vista y configuré su acción TouchUpInside para el siguiente método:
- (IBAction)buttonPressed:(id)sender {
NSError *startError;
[[NEVPNManager sharedManager].connection startVPNTunnelAndReturnError:&startError];
if(startError) {
NSLog(@"Start error: %@", startError.localizedDescription);
}
}
Hay dos problemas aquí:
1) Cuando trato de guardar las preferencias, aparece el siguiente error: Error de guardado: Error Domain = Código de dominio NEVPNError = 4 "La operación no se pudo completar. (Error de dominio de NEVPNError 4).” ¿Qué es este error? ¿Cómo puede ¿Resuelvo este problema?
2) [[NEVPNManager sharedManager] .connection startVPNTunnelAndReturnError: & startError]; El método no devuelve ningún error cuando lo llamo, pero el estado de la conexión cambia de Desconectado a Conectando por un momento y luego vuelve al estado Desconectado.
Cualquier ayuda será apreciada :)