Data
는 저장하고 싶은 정보, Attribute
는 데이터에 대한 접근성을 제어하고 검색을 위한 공개된 속성, keychainItem
은 이 두 값을 모두 포함한 아이템kSecClass
를 정해준 뒤 kSecValueData
에 저장하고 싶은 데이터를 Data
타입으로 변환하여 Item query
를 만듬kSecClass
는 저장하는 데이터의 종류kSecAttrAccount
는 계정이름static func addPassword(password: String) {
let password = password.data(using: .utf8)
let addquery: [String: Any] = [kSecClass as String: kSecClassGenericPassword,
kSecValueData as String: password]
let status = SecItemAdd(addquery as CFDictionary, nil)
if status == errSecSuccess {
print("비밀번호 등록 성공")
} else {
print("등록 실패")
}
}
Data
를 검색하고 접근하는데 사용Data
를 저장할때 사용된 Attribute
를 포함static func receivePassword() -> String? {
let getquery: [String: Any] = [kSecClass as String: kSecClassGenericPassword,
kSecReturnData as String: true]
var password: AnyObject?
let status = SecItemCopyMatching(getquery as CFDictionary, &password)
if status == errSecSuccess {
guard let password = password as? Data, let password = String(data: password, encoding: .utf8) else {
print("가져오기 실패")
return nil
}
print("비밀번호 가져오기 성공")
return password
} else {
print("가져오기 실패")
return nil
}
}
static func updatePassword(_ changePassword: String) -> Bool {
let changePassword = changePassword.data(using: .utf8)
let changequery: [String: Any] = [kSecValueData as String: changePassword]
let genericQuery: [String: Any] = [kSecClass as String: kSecClassGenericPassword]
let status = SecItemUpdate(genericQuery as CFDictionary, changequery as CFDictionary)
if status == errSecSuccess {
print("비밀번호 변경 성공")
return true
} else {
print("비밀번호 변경 실패")
return false
}
}
🍎 Storing Keys in the Keychain
🍎 Searching for Keychain Items
🍎 Updating and Deleting Keychain Items
🍎 Keychain Items
🍎 Item Attribute Keys and Values
https://velog.io/@eddy_song/alan-kay-OOP