Created
April 4, 2021 22:18
-
-
Save gromwel/c340bb5fa787396cfd06d8bf154edce5 to your computer and use it in GitHub Desktop.
Keychain manager set get delete update
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
final class KeychainManager { | |
static func set(data: Data, service: String, account: String) { | |
// Данные для сохранения | |
let item = [ | |
kSecClass: kSecClassGenericPassword, | |
kSecValueData: data, | |
kSecAttrService: service, | |
kSecAttrAccount: account, | |
] as CFDictionary | |
// Статус записи | |
let status = SecItemAdd(item, nil) | |
// Разбираем статус записи | |
if status == errSecSuccess { | |
#if DEBUG | |
NSLog("[KeychainManager] setting \(service):\(account) was successful") | |
#endif | |
} else { | |
#if DEBUG | |
NSLog("[KeychainManager] error: \(status)") | |
#endif | |
} | |
} | |
static func get(service: String, account: String) -> Data? { | |
// Запрос на получение данных | |
let query = [ | |
kSecClass: kSecClassGenericPassword, | |
kSecAttrService: service, | |
kSecAttrAccount: account, | |
kSecReturnData: true, | |
] as CFDictionary | |
// Место для сохранения результатов | |
var ref: AnyObject? | |
// Статус получения данных | |
let status = SecItemCopyMatching(query, &ref) | |
// Разбираем статус получения данных | |
if status == errSecSuccess { | |
return ref as? Data | |
} else { | |
#if DEBUG | |
NSLog("[KeychainManager] error: \(status)") | |
#endif | |
return nil | |
} | |
} | |
static func update(service: String, account: String, newData: Data) { | |
// Запрос для поиска обновляемого элемента | |
let query = [ | |
kSecClass: kSecClassGenericPassword, | |
kSecAttrService: service, | |
kSecAttrAccount: account, | |
] as CFDictionary | |
// Данные которые обновляем | |
let update = [ | |
kSecValueData: newData, | |
] as CFDictionary | |
// Статус обновления данных | |
let status = SecItemUpdate(query, update) | |
// Разбираем статус обновления | |
if status == errSecSuccess { | |
#if DEBUG | |
NSLog("[KeychainManager] updation \(service):\(account) was successful") | |
#endif | |
} else { | |
#if DEBUG | |
NSLog("[KeychainManager] error: \(status)") | |
#endif | |
} | |
} | |
static func delete(service: String, account: String) { | |
// Запрос на удаление | |
let query = [ | |
kSecClass: kSecClassGenericPassword, | |
kSecAttrService: service, | |
kSecAttrAccount: account, | |
] as CFDictionary | |
// Статус удаления данных | |
let status = SecItemDelete(query) | |
// Разбираем статус удаления | |
if status == errSecSuccess { | |
#if DEBUG | |
NSLog("[KeychainManager] deletion \(service):\(account) was successful") | |
#endif | |
} else { | |
#if DEBUG | |
NSLog("[KeychainManager] error: \(status)") | |
#endif | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment