在模拟器和设备上进行测试时,此功能可以正确写入钥匙串。安装企业签名标识时,它不起作用。
值得一提的是,应用程序和应用程序的扩展程序中启用了Keychain Sharing。
请注意,使用开发资料构建时,它在设备上的效果非常好。
此外,操作中没有记录任何错误(见下文),因此没有任何关于失败原因的信息。
public class func setToken(token: String, account: String, service: String = "APIrev1") {
var log = XCGLogger.defaultInstance()
log.info("Attempting to set token \(token) to account \(account)")
var secret: NSData = token.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
let objects: Array = [secClassGenericPassword(), service, account, secret]
let keys: Array = [secClass(), secAttrService(), secAttrAccount(), secValueData()]
let query = NSDictionary(objects: objects, forKeys: keys)
var p1 = SecItemDelete(query as CFDictionaryRef)
if (p1 != noErr) {
log.info("SecItemDelete, key not present to delete")
}
var p2 = SecItemAdd(query as CFDictionaryRef, nil)
if (p2 != noErr) {
log.error("SecItemAdd write of token \(token) to account \(account) failed")
}
}
答案 0 :(得分:0)
我认为这是Swift iOS中的一个错误,只发生在64位设备中。该解决方案有效,但我已提交报告: https://stackoverflow.com/a/27721235/737470