728x90
반응형
let keychainKey = "com.ex.uniqueDeviceIdentifier"
// UUID를 가져오는 메서드 (없으면 생성 후 저장)
func getDeviceIdentifier() -> String {
// 먼저 Keychain에서 UUID 불러오기 시도
if let uuid = getUUIDFromKeychain() {
return uuid
} else {
// 없으면 새로 생성 후 Keychain에 저장
let newUUID = UUID().uuidString
saveUUIDToKeychain(uuid: newUUID)
return newUUID
}
}
// Keychain에서 UUID 불러오기
private func getUUIDFromKeychain() -> String? {
var query: [String: Any] = [kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: keychainKey,
kSecReturnData as String: kCFBooleanTrue!,
kSecMatchLimit as String: kSecMatchLimitOne]
var item: AnyObject?
let status = SecItemCopyMatching(query as CFDictionary, &item)
if status == errSecSuccess, let data = item as? Data, let uuid = String(data: data, encoding: .utf8) {
return uuid
}
return nil
}
// Keychain에 UUID 저장하기
private func saveUUIDToKeychain(uuid: String) {
let data = uuid.data(using: .utf8)!
let query: [String: Any] = [kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: keychainKey,
kSecValueData as String: data]
// 중복 방지를 위해 이미 저장된 데이터 삭제 후 새로 저장
SecItemDelete(query as CFDictionary) // 중복 방지
SecItemAdd(query as CFDictionary, nil)
}
UUID를 생성하여 키체인에 저장하고 그다음부터는 키체인에서 불러와서 저장된 UUID를 사용합니다.
단 공장초기화를 진행하면 값이 바뀐다는 점은 참고 바랍니다.
728x90
반응형
'IOS' 카테고리의 다른 글
Xcode linker command failed with exit code 1 (use -v to see invocation) 에러 (0) | 2023.10.30 |
---|---|
Xcode 15버전 Sandbox: bash(43130) deny(1) file-write-create 에러 (1) | 2023.10.24 |
Xcode AVFoundation,AVKit import 에러 (0) | 2023.06.20 |
Xcode 아카이브 에러 PhaseScriptExecution failed with a nonzero exit code (0) | 2023.06.13 |
iOS Swift의 생명주기 (0) | 2023.05.03 |
댓글