앱의 설정값을 저장하고 복원하기 위해 iOS에서 흔히 사용되는 방법 중 하나는 키체인(Keychain)을 이용하는 것입니다. 키체인은 보안을 위해 디바이스에 데이터를 안전하게 저장하는 용도로 사용됩니다. 이번 블로그 포스트에서는 Swift에서 키체인을 사용하여 설정값을 백업하고 복원하는 방법에 대해 알아보겠습니다.
키체인에 값 저장하기
import Foundation
import Security
func saveValueToKeychain(value: String, forKey key: String) {
let valueData = value.data(using: .utf8)
guard let serviceIdentifier = Bundle.main.bundleIdentifier else {
return
}
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrService as String: serviceIdentifier,
kSecAttrAccount as String: key,
kSecValueData as String: valueData,
]
SecItemDelete(query as CFDictionary)
let status = SecItemAdd(query as CFDictionary, nil)
if status != errSecSuccess {
print("Failed to save value to Keychain")
}
}
위의 코드는 saveValueToKeychain
이라는 함수를 정의합니다. 이 함수는 원하는 값을 키체인에 저장하는 역할을 합니다. 주어진 키와 값으로 query
딕셔너리를 만들고, SecItemDelete
를 사용하여 이미 저장된 값이 있다면 삭제한 후 SecItemAdd
를 통해 새로운 값으로 저장합니다. 저장에 실패한 경우 오류 메시지를 출력합니다.
키체인에서 값 복원하기
import Foundation
import Security
func getValueFromKeychain(forKey key: String) -> String? {
guard let serviceIdentifier = Bundle.main.bundleIdentifier else {
return nil
}
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrService as String: serviceIdentifier,
kSecAttrAccount as String: key,
kSecMatchLimit as String: kSecMatchLimitOne,
kSecReturnData as String: true,
]
var result: CFTypeRef?
let status = SecItemCopyMatching(query as CFDictionary, &result)
if status == errSecSuccess, let data = result as? Data, let value = String(data: data, encoding: .utf8) {
return value
}
return nil
}
위의 코드는 getValueFromKeychain
이라는 함수를 정의합니다. 이 함수는 주어진 키에 대한 값을 키체인에서 찾아서 반환합니다. query
딕셔너리를 만들고, SecItemCopyMatching
을 사용하여 키체인에서 값을 찾습니다. 찾은 값이 있다면 이를 데이터로 변환하여 반환하며, 값이 없거나 찾는 과정에서 오류가 발생한 경우 nil
을 반환합니다.
사용 예시
let key = "userToken"
let userToken = "XYZ123"
saveValueToKeychain(value: userToken, forKey: key)
if let retrievedToken = getValueFromKeychain(forKey: key) {
print("Retrieved token: \(retrievedToken)")
} else {
print("Token not found in Keychain")
}
위의 예시 코드는 saveValueToKeychain
함수를 사용하여 userToken
을 key
에 대해 키체인에 저장하고, getValueFromKeychain
함수를 사용하여 key
에 저장된 값을 가져와 출력합니다.
키체인을 사용하여 설정값을 백업하고 복원하는 것은 앱의 설정을 안전하게 관리하고 사용자 데이터를 보호하는 데 매우 유용합니다. 키체인은 iOS 앱 개발에서 자주 사용되는 보안 메커니즘 중 하나이므로 앱의 설정값을 안전하게 보관하기 위해 꼭 사용해보시기 바랍니다.