Conéctate a VPN mediante progtwigción en iOS 8

Desde el lanzamiento de iOS 8 beta, encontré un marco de Extensión de networking en su package que permitirá a los desarrolladores configurar y conectarse a serveres VPN mediante progtwigción y sin ninguna installation de perfil.

El marco contiene una class principal llamada NEVPNManager. Esta class también tiene 3 methods principales que me permiten save, cargar o eliminar las preferences de VPN. He escrito un fragment de código en el método viewDidLoad de la siguiente manera:

NEVPNManager *manager = [NEVPNManager shanetworkingManager]; [[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 button en mi vista y configuré su acción TouchUpInside en el siguiente método:

 - (IBAction)buttonPressed:(id)sender { NSError *startError; [[NEVPNManager shanetworkingManager].connection startVPNTunnelAndReturnError:&startError]; if(startError) { NSLog(@"Start error: %@", startError.localizedDescription); } } 

Hay dos problemas aquí:

1) Cuando trato de save las preferences, se lanzará el siguiente error: Error de guardado: Error Domain = NEVPNErrorDomain Code = 4 "La operación no se pudo completar. (NEVPNErrorDomain error 4.)" ¿Qué es este error? ¿Cómo puede ¿Resuelvo este problema?

2) [[NEVPNManager shanetworkingManager] .connection startVPNTunnelAndReturnError: & startError]; método no devuelve ningún error cuando lo llamo, pero el estado de la connection cambia de Desconectado a Conexión por un momento y luego regresa a estado Desconectado.

Cualquier ayuda será apreciada 🙂

El problema es el error que Save error: Error Domain=NEVPNErrorDomain Code=4 al save: Save error: Error Domain=NEVPNErrorDomain Code=4

Si observa el file de encabezado NEVPNManager.h, verá que el código de error 4 es "NEVPNErrorConfigurationStale". La configuration es obsoleta y debe cargarse. Debe llamar a loadFromPreferencesWithCompletionHandler: y en el manejador de finalización, modifique los valores que desea modificar y luego llame a saveToPreferencesWithCompletionHandler: El ejemplo de su pregunta está modificando la configuration antes de que se complete la carga, por lo que recibe este error.

Más parecido a esto:

 [manager loadFromPreferencesWithCompletionHandler:^(NSError *error) { // do config stuff [manager saveToPreferencesWithCompletionHandler:^(NSError *error) { }]; }]; 

Publicé una publicación de blog con respecto a esta publicación. Es un tutorial completo sobre la administración de conexiones VPN en iOS 8 que se puede encontrar aquí