gpt4 book ai didi

ios - 在 iOS 8 中以编程方式连接到 VPN

转载 作者:IT王子 更新时间:2023-10-29 07:59:15 33 4
gpt4 key购买 nike

自 iOS 8 beta 发布以来,我在其 bundle 中发现了一个网络扩展框架,它可以让开发人员以编程方式配置和连接到 VPN 服务器,而无需安装任何配置文件。

该框架包含一个名为 NEVPNManager 的主要类。此类还有 3 个主要方法,可让我保存、加载或删除 VPN 首选项。我在viewDidLoad方法中写了一段代码如下:

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);
}
}];

我还在 View 中放置了一个按钮,并将其 TouchUpInside 操作设置为以下方法:

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

这里有两个问题:

1) 当我尝试保存首选项时,会抛出以下错误: Save error: Error Domain=NEVPNErrorDomain Code=4 "The operation couldn't be completed. (NEVPNErrorDomain error 4.)” 这是什么错误? 我该如何解决这个问题?

2) [[NEVPNManager sharedManager].connection startVPNTunnelAndReturnError:&startError];当我调用该方法时,它没有返回任何错误,但连接状态从 Disconnected 变为 Connecting 片刻,然后又回到 Disconnected 状态。

任何帮助将不胜感激:)

最佳答案

问题是您在保存时遇到的错误:保存错误:Error Domain=NEVPNErrorDomain Code=4

如果查看 NEVPNManager.h 头文件,您会看到错误代码 4 是“NEVPNErrorConfigurationStale”。配置已过时,需要加载。您应该调用 loadFromPreferencesWithCompletionHandler:在完成处理程序中修改您要修改的值,然后调用saveToPreferencesWithCompletionHandler:。您问题中的示例是在加载完成之前修改配置,这就是您收到此错误的原因。

更像这样:

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

关于ios - 在 iOS 8 中以编程方式连接到 VPN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24970280/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com