2016-02-12 2 views
0

Каково значение соответствующего значения 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) 
} 

ответ

0

Я думаю, что это может быть вашей проблемой. Оба kSecAttrAccessible и kSecAttrAccessControl кажутся взаимоисключающими, что означает, что оба они не могут сосуществовать.

Попробуйте удалить один и использовать другой (на ваш выбор, так как моих знаний обоим недостаточно, чтобы дать совет).

Apple documentation

Надеется, что это помогает!

+0

Спасибо @kaspar за то, что вы вернулись к этому. Вы правы, я понял это вскоре после того, как я разместил здесь и закончил свой проект. Вот ссылка на случай, если вы заинтересованы: [https://github.com/NitinJami/keychaineditor](https://github.com/NitinJami/keychaineditor). –

+0

Ваш ответ может быть верным, но ваши рассуждения - нет. В документации только говорится, что 'kSeAttrAccessControl' и' kSecAttrAccess' являются взаимоисключающими. Но 'kSecAttrAccess' - это не то же самое, что' kSecAttrAccessible'. – Mecki

Смежные вопросы