- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试在 Xcode 中使用 Swift 连接到 VPN。我正在使用 KeychainSwift 来保存钥匙串(keychain)引用。我的代码如下所示:
private func connectVPN(completion: @escaping () -> Void) {
let keychain = KeychainSwift()
keychain.set("<mypassword>", forKey: "passref")
keychain.set("<sharedsecretpassword>", forKey: "secretref")
NEVPNManager.shared().loadFromPreferences { error in
let vpnhost = "<11.11.11.11>"
let username = "<myusername>"
let p = NEVPNProtocolIPSec()
p.username = username
p.localIdentifier = username
p.serverAddress = vpnhost
p.remoteIdentifier = vpnhost
p.authenticationMethod = .sharedSecret
p.disconnectOnSleep = false
p.sharedSecretReference = keychain.getData("secretref")
p.passwordReference = keychain.getData("passref")
var rules = [NEOnDemandRule]()
let rule = NEOnDemandRuleConnect()
rule.interfaceTypeMatch = .any
rules.append(rule)
NEVPNManager.shared().localizedDescription = "My VPN"
NEVPNManager.shared().protocolConfiguration = p
NEVPNManager.shared().onDemandRules = rules
NEVPNManager.shared().isOnDemandEnabled = true
NEVPNManager.shared().isEnabled = true
NEVPNManager.shared().saveToPreferences { error in
if (error != nil) {
print(error!)
} else {
do {
try NEVPNManager.shared().connection.startVPNTunnel()
completion()
} catch {
print("can't connect VPN'")
}
}
}
}
}
我正在使用keychain.getData("secretref")
,因为这个字段需要
A persistent keychain reference to a keychain item containing the IKE shared secret.
更重要的是,
The persistent keychain reference must refer to a keychain item of class kSecClassGenericPassword.
我不太确定,如果我做对了。我没有继承 kSecClassGenericPassword 或以任何方式使用它。
当我在代码中使用此功能时,会显示一个窗口,其中包含此 VPN 没有共享 key 的信息。我认为这意味着此钥匙串(keychain)无法正常工作。
在 iPhone 设置中,它尝试连接,将开关移向绿色,然后开关立即返回“关闭”状态。当我手动输入与代码中相同的数据时,连接正常。
我做错了什么?我应该纠正什么?
最佳答案
好的,我有答案了。在 SecItemCopyMatching 的查询中,我必须选择 kSecReturnPersistentRef 和 kCFBooleanTrue - 而不是 kSecReturnData。
关于swift - NEVPNManager 中使用的 Swift 中的钥匙串(keychain)引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45639312/
我正在尝试创建一个程序,其中字符串的前三个字符重复给定次数,如下所示: foo('Chocolate', 3) # => 'ChoChoCho' foo('Abc', 3) # => 'AbcAbcA
我有以下字符串: std::string str = "Mode:AAA:val:101:id:A1"; 我想分离一个位于 "val:" 和 ":id" 之间的子字符串,这是我的方法: std::st
DNA 字符串可以是任意长度,包含 5 个字母(A、T、G、C、N)的任意组合。 压缩包含 5 个字母(A、T、G、C、N)的 DNA 字母串的有效方法是什么?不是考虑每个字母表 3 位,我们可以使用
是否有一种使用 levenstein 距离将一个特定字符串与第二个较长字符串中的任何区域进行匹配的好方法? 例子: str1='aaaaa' str2='bbbbbbaabaabbbb' if str
使用 OAuth 并使用以下函数使用我们称为“foo”(实际上是 OAuth token )的字符串加密 key public function encrypt( $text ) { // a
我是一名优秀的程序员,十分优秀!