ios - 尝试启动 TunnelProvider 网络扩展时出现 NEVPNErrorDomain 错误 1

标签 ios ios9 tunnel ios-extensions networkextension

我正在尝试通过从 TunnelProvider 的 XCode 模板开始,然后将代码添加到主机应用程序来配置并启动它来创建自定义 TunnelProvider 网络扩展。

我正在使用 NETunnelProviderManager 的实例来配置它,当我调用 saveToPreferencesWithCompletionHandler 时:我获得成功(错误 = 0)。但是,当我在(非零)连接上调用 startVPNTunnelAndReturnError: 时,我总是收到以下错误:

Error Domain=NEVPNErrorDomain Code=1 "(null)"

我已经阅读了所有相关的Apple文档,并尝试让我的程序看起来尽可能接近SimpleTunnel测试程序,但是我无法确定为什么我得到这个“1”(这似乎表明一个配置问题)。

我在网上的帖子中看到其他一些人也遇到了同样的问题,但没有解决方案。

我有所需的特殊权利,我知道这不是问题,因为使用正确的配置文件后,我能够在运行应用程序时看到弹出窗口,确认我要添加 VPN,然后将其添加到VPN 下的设置。

这是我的代码,以防相关:

NETunnelProviderManager * man = [[NETunnelProviderManager alloc] init];       
NETunnelProviderProtocol *protocol = [[NETunnelProviderProtocol alloc] init];

[protocol setServerAddress:@"aaa.bbb.ccc.ddd"]; // not actual value
[protocol setUsername:@"testuser"];

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];

NSData *data = [[NSData alloc] init];
[dictionary setObject:@"UUID" forKey:(id)kSecAttrService];
[dictionary setObject:data forKey:(id)kSecValueData];
[dictionary setObject:(__bridge id)kSecAttrAccessibleAlways forKey:(id)kSecAttrAccessible];
[dictionary setObject:(__bridge id)kSecClassGenericPassword forKey:(id)kSecClass];
[dictionary setObject:(__bridge id)kCFBooleanTrue forKey:(id)kSecReturnPersistentRef];

CFTypeRef passwordRef = nil;

OSStatus delStatus = SecItemDelete((__bridge CFDictionaryRef)dictionary);
OSStatus status = SecItemAdd((__bridge CFDictionaryRef)dictionary, &passwordRef);

[protocol setPasswordReference:(__bridge NSData * _Nullable)(passwordRef)];

man.protocolConfiguration = protocol;
man.localizedDescription = @"My VPN";
man.onDemandEnabled = false;  
man.enabled = true;

[man saveToPreferencesWithCompletionHandler:^(NSError *err) {
    NSLog(@"saved preferences: error = %@", err);
    [man.connection startVPNTunnelAndReturnError:&err];        
    NSLog(@"after start tunnel: error = %@", err);
}];

最佳答案

我发现,如果我在尝试启动隧道之前调用 loadFromPreferencesWithCompletionHandler: (但在 saveToPreferencesWithCompletionHandler 之后),此错误就会消失,我可以让事情进展得更远一些。

但是之后我遇到了更多问题。因此,我暂时将进一步分析 SimpleTunnel 程序。

关于ios - 尝试启动 TunnelProvider 网络扩展时出现 NEVPNErrorDomain 错误 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35325487/

相关文章:

macos - 在 OSX 上管理 ssh 隧道的好工具

python - 运行 fork 脚本时 SSH session 保持打开状态

ios - e :Core data self referential relationships lost after application relaunch

iphone - 错误 : Method 'methodName' not defined in Plugin 'plugin' - Phonegap 3. 0 iOS

ios9 - 通用链接 - UIAlertController 不允许在解除分配时尝试加载 View Controller 的 View

ios - SWRevealViewController 上的 didselect tableview 出错

javascript - 在显示我的index.html 之前显示动画

ios - 如果健康应用程序尚未设置,如何使用 healthkit?

ios - 如何在 ios 中限制特定国家/地区的 google maps API

ios - regionDidChangeAnimated 不工作