NEVPNErrorDomain尝试启动TunnelProvider网络扩展时出错1
我正在尝试通过从TunnelProvider的XCode模板开始创建自定义TunnelProvider网络扩展,然后将代码添加到主机应用程序以配置它并启动它。
我正在使用一个NETunnelProviderManager实例来配置它,当我调用saveToPreferencesWithCompletionHandler时:我得到了成功(错误= 0)。 但是,当我在(非零)连接上调用startVPNTunnelAndReturnError:时,我总是得到以下错误:
错误域= NEVPNErrorDomain代码= 1“(null)”
我已经阅读了所有相关的Apple文档,并尝试使我的程序看起来尽可能接近SimpleTunnel测试程序,但我无法确定为什么我得到这个“1”(这似乎表明配置问题) 。
我在网上的post中看到过其他一些有同样问题的人,但没有解决方案。
我有所需的特殊权利,我知道这不是问题,因为在使用正确的配置文件后,我能够看到弹出窗口确认我想在运行应用程序时添加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,XCode 4.2)使用Git post-commit hook设置包版本会导致我的项目变成Mac项目
- NSDateFormatter无法将“1988-04-10”解析为iOS 6中的NSDate实例。 这是一个错误吗?
- 如何在closures整个应用程序时closures键盘
- 检查touchend是否在拖动之后
- iOS – 在设置>隐私>动作活动中启用动作活动
- 在.NET服务器中添加APN需要什么东西
- 为iOS模拟器构建,但是为OSX构建的目标文件中的链接,用于Xcode 7中的体系结构x86_64
- 触摸设备(iOS,Android)
- 后台会话不支持从NSData上载任务
- 在UINavigationController中使用modalPresentationStyle = .FormSheet推送时,SFSafariViewController显示不正确
- 在tvOS上构建自定义UI动画,以获取我们的IBM SXSW认知啤酒品尝体验