본문 바로가기
IOS

iOS Swift 디바이스 uuid 받아오기 (앱 재설치 후 값 동일하게)

by 일용직 코딩노동자 2024. 10. 23.
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
반응형

댓글