尝试使用 SecItemAdd() 将项目添加到钥匙串会导致 -50



当我尝试使用带有命令行 Swift 应用程序中参数kSecAttrSynchronizableSecItemAdd()将项目添加到 macOS 钥匙串时,我收到错误-50 (One or more parameters passed to the function were not valid).如果我删除kSecAttrSynchronizable,它可以正常工作.我尝试使用钥匙串访问,并尝试手动完成(使用 macOS 提供的钥匙串服务 API),结果是一样的。

import Foundation
let account = "username"
let password = "password".data(using: String.Encoding.utf8)!
var query: [String: Any] = [kSecClass as String: kSecClassInternetPassword,
kSecAttrAccount as String: account,
kSecAttrServer as String: "nabeelomer.me",
kSecAttrSynchronizable as String: kCFBooleanTrue,
kSecValueData as String: password]
let status = SecItemAdd(query as CFDictionary, nil)
print(status)

应用程序是否需要未记录的权限?

Swift 4.0, macOS 10.13.3, Xcode 9.1

kSecValueData需要Data,而不是String

尝试

kSecValueData: password.data(using: .utf8)!

最新更新