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 :)

Respuestas a la pregunta(2)

Su respuesta a la pregunta