kSecAttrAccessControl对应的值?
Corresponding value of kSecAttrAccessControl?
kSecAttrAccessControl对应值的类型是什么?从文档中,它表示该值将是 SecAccessControlCreateWithFlags(_:_:_:_:) 的 return 值,可用于为 SecItemAdd 等创建查询
然而,在Swift2中,这似乎不起作用。当我尝试添加项目时出现 errSecParam 错误。据了解,在Swift1中,可以使用.takeRetainedValu()来解决。但是,在 Swift 中似乎并非如此 2.
这是伪代码:
func addItem() -> String {
// Build a query for adding a keychain item.
let account: String! = "testAccount"
let service: String! = "testService"
let accessible: String! = kSecAttrAccessibleWhenUnlocked as String
let data: NSData! = "test data".dataUsingEncoding(NSUTF8StringEncoding)
let acl: SecAccessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, kSecAttrAccessibleWhenUnlocked, .UserPresence, nil)!
let query = [
kSecClass as String : kSecClassGenericPassword as String,
kSecAttrAccount as String : account,
kSecAttrService as String : service,
kSecAttrAccessible as String: accessible,
kSecAttrAccessControl as String : acl, //errSecParam because of acl!
kSecValueData as String : data
] as NSDictionary
status = SecItemAdd(query, nil)
if status != errSecSuccess {
print("[addItem::SecItemAdd] \(osstatusToHumanReadable(status))")
}
return osstatusToHumanReadable(status)
}
我认为这可能是您的问题。 kSecAttrAccessible 和 kSecAttrAccessControl 似乎是相互排斥的,这意味着两者不能共存。
尝试删除一个并使用另一个(您的选择,因为我对两者的了解不足以提供建议)。
希望对您有所帮助!
kSecAttrAccessControl对应值的类型是什么?从文档中,它表示该值将是 SecAccessControlCreateWithFlags(_:_:_:_:) 的 return 值,可用于为 SecItemAdd 等创建查询
然而,在Swift2中,这似乎不起作用。当我尝试添加项目时出现 errSecParam 错误。据了解,在Swift1中,可以使用.takeRetainedValu()来解决。但是,在 Swift 中似乎并非如此 2.
这是伪代码:
func addItem() -> String {
// Build a query for adding a keychain item.
let account: String! = "testAccount"
let service: String! = "testService"
let accessible: String! = kSecAttrAccessibleWhenUnlocked as String
let data: NSData! = "test data".dataUsingEncoding(NSUTF8StringEncoding)
let acl: SecAccessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, kSecAttrAccessibleWhenUnlocked, .UserPresence, nil)!
let query = [
kSecClass as String : kSecClassGenericPassword as String,
kSecAttrAccount as String : account,
kSecAttrService as String : service,
kSecAttrAccessible as String: accessible,
kSecAttrAccessControl as String : acl, //errSecParam because of acl!
kSecValueData as String : data
] as NSDictionary
status = SecItemAdd(query, nil)
if status != errSecSuccess {
print("[addItem::SecItemAdd] \(osstatusToHumanReadable(status))")
}
return osstatusToHumanReadable(status)
}
我认为这可能是您的问题。 kSecAttrAccessible 和 kSecAttrAccessControl 似乎是相互排斥的,这意味着两者不能共存。
尝试删除一个并使用另一个(您的选择,因为我对两者的了解不足以提供建议)。
希望对您有所帮助!