var query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrService as String:
"my service"
,
kSecAttrAccount as String:
"my-key"
]
func storeString(value: String) -> Bool {
if
let
data = value.data(using: .utf8) {
//
delete data
if
exist
SecItemDelete(query as CFDictionary)
//
add value to query
query[kSecValueData as String] = data
//
add to keychain
let
status = SecItemAdd(query as CFDictionary, nil)
return
status == noErr
}
return
false
}
func readString() -> String? {
//
update query
query[kSecReturnData as String] = kCFBooleanTrue
query[kSecMatchLimit as String] = kSecMatchLimit
var result: AnyObject?
//
fetch items from keychain
let
status: OSStatus = withUnsafeMutablePointer(to: &result) {
SecItemCopyMatching(query as CFDictionary, UnsafeMutablePointer($0))
}
//
I always get error -50 here
if
status == noErr {
if
let
resultData = result as? Data {
if
let
strVal = String(data: resultData, encoding: .utf8) {
return
strVal
}
}
}
return
nil
}