NE***Manager 在 Swift 中连接到 ***

Posted

技术标签:

【中文标题】NE***Manager 在 Swift 中连接到 ***【英文标题】:NE***Manager Connect to *** in Swift 【发布时间】:2017-01-03 06:33:31 【问题描述】:

我找不到关于如何做到这一点的明确答案,所以这就是我创建这个线程的原因。 我正在开发一个 Swift 应用程序 (Swift 2),我想在其中使用一个函数连接一个 *** 服务器。所以我想创建一个

func connect() 
    //Handle the connection to the *** 

我从创建 *** 的开发人员那里收到了这个 https://gist.github.com/matthijsotterloo/cedf256f7f1c2a9a8f624481b7083afd 文件(当然我替换了证书、密钥、url 和登录名。现在我的问题是如何在函数中连接到这个 *** 服务器?我已经找到了我必须使用 NE***Manager,但我真的不知道如何构建它。

希望有人可以帮助我。

谢谢!

【问题讨论】:

【参考方案1】:

这有点令人困惑,但是您使用所需的参数设置了配置,然后将该配置保存到 NE***Manager。之后启动 *** 隧道。

所以你会有类似的东西:

    NE***Manager.sharedManager().loadFromPreferencesWithCompletionHandler  error in
        // setup the config:
        let password = ***Account!.***Password          
        let ***host = ***Account!.***Host
        let p = NE***ProtocolIKEv2()
        p.username = username
        p.localIdentifier = username
        p.serverAddress = ***host
        p.remoteIdentifier = ***host
        p.authenticationMethod = .None
        p.passwordReference = passwordRef
        p.useExtendedAuthentication = true
        p.serverCertificateIssuerCommonName = ***host
        p.disconnectOnSleep = false


        var rules = [NEOnDemandRule]()
        let rule = NEOnDemandRuleConnect()
        rule.interfaceTypeMatch = .Any
        rules.append(rule)

        NE***Manager.sharedManager().localizedDescription = "My ***"
        NE***Manager.sharedManager().protocolConfiguration = p
        NE***Manager.sharedManager().onDemandRules = rules
        NE***Manager.sharedManager().onDemandEnabled = true
        NE***Manager.sharedManager().enabled = true
        NE***Manager.sharedManager().saveToPreferencesWithCompletionHandler  error in
            guard error == nil else 
                print("NE***Manager.saveToPreferencesWithCompletionHandler failed: \(error!.localizedDescription)")
                return
            
            ***Manager.sharedManager.start***Tunnel()
        
     

正确嵌套完成处理程序也是不明显但很重要的:

    loadFromPreferencesWithCompletionHandler 
        ...
        saveToPreferencesWithCompletionHandler 
            start***Tunnel 
        
    

密码参考是:

                let password = ***Account!.***Password
                ***Account!.setPersistenRef(username, password: password!)
                let passwordRef = ***Account!.persistentRef

而 ***Account.persistentRef 是:

class func persistentRef(_ key: String) -> Data? 
    let query: [AnyHashable: Any] = [
        kSecClass as AnyHashable: kSecClassGenericPassword,
        kSecAttrGeneric as AnyHashable: key,
        kSecAttrAccount as AnyHashable: key,
        kSecAttrAccessible as AnyHashable: kSecAttrAccessibleAlways,
        kSecMatchLimit as AnyHashable: kSecMatchLimitOne,
        kSecAttrService as AnyHashable: Bundle.main.bundleIdentifier!,
        kSecReturnPersistentRef as AnyHashable: kCFBooleanTrue
    ]

    var secItem: AnyObject?
    let result = SecItemCopyMatching(query as CFDictionary, &secItem)
    if result != errSecSuccess 
        return nil
    

    return secItem as? Data

我不记得细节,但似乎记得上面对于创建 NE***Manager 正在寻找的 ref 非常重要。

【讨论】:

+1。对此还有两点说明。它在几个地方提到。好的做法是在保存后重新加载首选项(它解决了一些问题)。还有start***Tunnel会抛出,也需要处理。 这里的“passwordRef”是什么? 我是 Swift 的菜鸟,你能告诉我 ***Account 的定义在哪里吗? 大家好,你们有没有找到任何 *** 解决方案。我需要在我的受监督设备中触发 *** 连接。需要帮助吗?

以上是关于NE***Manager 在 Swift 中连接到 ***的主要内容,如果未能解决你的问题,请参考以下文章

无法在新的自定义类 Xcode 11 中连接到 IBOutlet

在 asp.net 和 Join 语句中连接到 Access 数据库

在自定义视图中连接到 UIButton 的 AddTarget 不起作用。 (斯威夫特 5,iOS)

在spring boot中连接到多个数据库

在 Java 中连接到 websocket

在 Python 中连接到 MS Access