PacketTunnelProvider 网络扩展不称为 Swift 3

2024-04-18

我正在尝试将 PacketTunnerProvider 网络扩展添加到我的项目中。方法 startTunnelWithOptions(options: [String : NSObject]?,completionHandler: (NSError?) -> Void) 永远不会被调用

但是,我能够使用提供商 BundleIdentifier 的网络扩展包 ID 成功建立 VPN 连接

这是我用来建立连接的代码

let vpnManager = NETunnelProviderManager.shared()

 func initVPNTunnelProviderManager() {

    let config = NETunnelProviderProtocol()

    config.providerBundleIdentifier = self.tunnelBundleId
    config.providerConfiguration = ["lol": 1]
    config.serverAddress = self.serverAddress
    config.username = self.username
    config.passwordReference = passwordRef

    vpnManager.loadFromPreferences {
        (error: Error?) in

        self.vpnManager.protocolConfiguration = vpnProtocol
        self.vpnManager.localizedDescription = "Connect_1.0.0"
        self.vpnManager.isEnabled = true

        self.vpnManager.saveToPreferences {
            (error: Error?) in
            do {
                try self.vpnManager.connection.startVPNTunnel()
            } catch let error as NSError {
                print("Error: \(error.localizedDescription)")
            }
        }
    }
}

这是我的 PacketTunnel 权利文件

`<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.developer.networking.vpn.api</key>
    <array>
        <string>allow-vpn</string>
    </array>
    <key>com.apple.security.application-groups</key>
    <array>
        <string>group.touchcore.Connectionapp</string>
    </array>
    <key>keychain-access-groups</key>
    <array>
        <string>$(AppIdentifierPrefix)touchcore.Connectionapp.PacketTunnel</string>
    </array>
    <key>com.apple.developer.networking.networkextension</key>
    <array>
        <string>packet-tunnel-provider</string>
        <string>app-proxy-provider</string>
        <string>content-filter-provider</string>
    </array>
</dict>
</plist>`

方法 startTunnelWithOptions(options: [String : NSObject]?,completionHandler: (NSError?) -> Void) 永远不会被调用

但是,我能够使用提供商 BundleIdentifier 的网络扩展包 ID 成功建立 VPN 连接

你到底是什么意思它永远不会被调用?如果您能够成功建立连接startTunnelWithOptions正在被呼叫。

如果您试图确定它是通过使用NSLog(),请记住,只有当您将调试器附加到提供程序而不是容器应用程序时,这才会显示在调试日志中。

这将很困难,因为提供者已经初始化并且startTunnelWithOptions在您有机会附加调试器之前调用函数。

在这种情况下,一个有用的解决方法是休眠,以便为调试器提供附加时间。

- (void) startTunnelWithOptions:(NSDictionary *) options
          completionHandler:(void (^)(NSError *)) completionHandler
{
    
    // Give debugger time to attach, 10 seconds is usually enough
    // Comment this out before you release the app or else you 
    // will be stuck with a 10 second delay on all connections.
    sleep(10); 

    // Continue with execution
    . . .
}

然后,当您初始化 PacketTunnelProvider 时,它将等待 10 秒,然后再完全进入您的逻辑内部startTunnelWithOptions功能。

所以,这段时间在XCode中你可以去Debug->Attach To Process->YourVPNProviderProcess并等待它完全初始化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PacketTunnelProvider 网络扩展不称为 Swift 3 的相关文章

  • MKMapView 未在平移上调用 RegionDidChangeAnimated

    我有一个带有 MKMapView 的应用程序和每次地图更改位置 在 RegionDidChangeAnimated 中 时调用的代码 当应用程序最初加载时 在显式更新地图坐标的平移 滑动 捏合 点击和按钮上调用regionDidChange
  • 来自 Popover 的 UIActionSheet 和 iOS8 GM

    有人在尝试从弹出窗口显示 UIActionSheet 时收到此消息吗 您的应用程序呈现了 UIAlertController 样式的 UIAlertControllerStyleActionSheet 具有此样式的 UIAlertContr
  • Swift3:如何处理优先组现在运算符应该用主体声明?

    以前的 Swift 3 运算符代码是 infix operator associativity left precedence 150 但现在 根据 Xcode 8 beta 6 这会生成以下警告 operator should not b
  • Xcode:将信息从 UITableViewController 传递到 UIViewController

    我有一个 UIViewController 它应该根据 UITableViewController 中按下的单元格向我显示详细信息 目前我正在给他们讲一个续集 override func prepare for segue UIStoryb
  • Swift 返回类型说明

    我看到一个 Swift 函数写如下 func calculation imageRef CGImage gt red UInt green UInt blue UInt 我需要知道上面函数的返回类型是什么 我无法将它与任何已知类型联系起来
  • 应用程序在后台时远程推送通知 swift 3

    我有一个可以接收远程推送通知的应用程序 我已经实施了didReceiveRemoteNotification这样 func application application UIApplication didReceiveRemoteNoti
  • 检测 iPhone 上的长按

    我正在开发一个 iPhone 应用程序 它要求我检查是否已点击按钮并按住 6 秒 然后触发一个播放某种声音的动作 我应该如何检测这个 6 秒的点击 另一方面 用户还可以持续点击按钮 6 秒 然后会触发相同的操作 我应该如何处理多次点击 我怎
  • 滚动 swiftUI 列表时,未调用单元格的任务修改器。怎么修?

    我写了一个异步图像视图 with swiftui 并在列表单元格中使用 AsyncImgView 使用任务修饰符在 Img 出现时从缓存或网络下载 Img 在 iOS16 之前一切正常 但在iOS16我发现当我滚动列表新细胞的AsyncIm
  • UITableView:popViewController 并将行索引保留到父控制器中?

    我有以下配置 一个视图控制器父控制器包含一个TableView父表带有自定义单元格 每个单元格显示 2 个标签 一个视图控制器子控制器包含一个TableView子表 当用户单击controllerParent的某个单元格时 会显示此视图 c
  • 如何在 swift 3 中将毫秒转换为日期字符串[重复]

    这个问题在这里已经有答案了 我正在尝试在 swift 3 中将毫秒转换为日期字符串 我尝试设置日期格式 但我没有获取当前日期字符串 var milliseconds 1477593000000 let date NSDate timeInt
  • ios ScheduledTimerWithTimeInterval 的时间量

    我想使用 ScheduledTimerWithTimeInterval 来执行一定时间的定期任务 比如说一小时 但我如何在我的代码上实现 这是我的代码 timer NSTimer scheduledTimerWithTimeInterval
  • Phonegap html5视频无法播放

    我正在尝试在 iPad 上的phonegap 应用程序中播放视频 该视频给了我错误 MEDIA ERR SRC NOT SUPPORTED 我尝试播放的视频不是本地的 当我在该视频上使用curl I 时 这是它带来的信息 HTTP 1 1
  • 检查与 NSURLConnection 连接的有效 IP

    我目前有一个应用程序 它尝试根据我正在与之通信的某些服务器打开网络视图 但是 我允许用户输入自己的服务器 IP 以防 iphone ipad 和服务器 或其他设备 不在同一网络上 但是 我尝试使用 NSURLConnection 来检测是否
  • 如何使用 NavigationStack 和 SwiftUI 发送额外数据?

    我有三个viewsA B 和 C 用户可以从 A 导航到 B 也可以从 A 导航到 C 用户可以从 B 导航到 C 现在我想区分用户是从 A 到 C 还是从 B 到 C 所以我在寻找如何在 NavigationStack 中传递额外的数据
  • Elasticsearch:如何查询连接数?

    如何询问我的 Elasticsearch 服务器现在有多少个连接 这与插座数量相同吗 我也不知道如何获得这些数字 这与客户端的数量不同 对吧 因为每个客户端可能打开多个连接 找不到任何相关信息 但我确实发现您可以在 Elasticsearc
  • 获取沙箱用户的 App Store 收据失败,并显示密码错误消息

    我在 Mac App Store 中分发了一个商业 macOS 应用程序 现在 在启动时 我会检查 App Store 收据 如果不存在 则以代码 173 退出 这将打开 App Store 登录对话框以获取收据 我一直使用沙盒帐户对此进行
  • 为 MoonAPNS 创建 p12 文件时卡住了

    我在创建 p12 证书时遇到一些问题 我之前创建了一个带有推送通知的应用程序 效果很好 应用程序获取用户设备 ID 并将其保存到数据库中 我已将代码添加到我的新应用程序中 并进行了与新应用程序一起使用的修改 从日志来看 它的工作方式似乎与我
  • 基于动态集合视图的 UITableView 的动态高度

    我必须添加一个UICollectionView里面一个UITableViewCell The collectionView可以有不同数量的项目 所以collectionView应在内部适当调整tableView 我已经在我的项目中实现了这个
  • UITabBar 显示更多图标而不是“更多”选项

    我目前正在尝试使用UITabBar对于包含 7 个的 iOS 应用程序tabBar Items 当我使用故事板时 我能够实现所有 7 个目标tabBarItems 当我以编程方式添加tabBarItems 它强制 更多 按钮访问其他 tab
  • 是否可以在 iOS 应用程序中使用 rsync?

    是否可以在 iPhone 或 iPad 应用程序中使用 rsync lib 或者也许有任何适合通过 sftp 进行远程文件同步的替代方案 Acrosync库是一个不错的选择 我已经为它做了一个演示 它根据 RPL 许可证进行许可 并提供商业

随机推荐