Каково значение соответствующего значения kSecAttrAccessControl? В документах указано, что значение будет возвращаемым значением SecAccessControlCreateWithFlags(_:_:_:_:) и может быть использовано при создании запроса для SecItemAdd и т. Д.Соответствующее значение kSecAttrAccessControl?
Однако в Swift 2 это не работает. Я получаю ошибку errSecParam, когда пытаюсь добавить элемент. Понятно, что в Swift 1 вы можете использовать .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)
}
Спасибо @kaspar за то, что вы вернулись к этому. Вы правы, я понял это вскоре после того, как я разместил здесь и закончил свой проект. Вот ссылка на случай, если вы заинтересованы: [https://github.com/NitinJami/keychaineditor](https://github.com/NitinJami/keychaineditor). –
Ваш ответ может быть верным, но ваши рассуждения - нет. В документации только говорится, что 'kSeAttrAccessControl' и' kSecAttrAccess' являются взаимоисключающими. Но 'kSecAttrAccess' - это не то же самое, что' kSecAttrAccessible'. – Mecki