본문 바로가기
프로그램 개발(분석, 설계, 코딩, 배포)/2. 개발

[iOS/Swift] 디바이스 고유넘버(device uuid) 구하기

by 3604 2023. 12. 6.
728x90

iOS4까지는 iOS 기기의 고유 넘버로 udid를 사용하였으나, 개인정보 문제로 iOS5부터는 udid가 사라지고 uuid(임의로 생성한 고유값)를 사용합니다.

 

디바이스 고유넘버(device uuid)를 구하는 방법

 

uuidString(디바이스의 고유 넘버 구하는 함수.)

func getDeviceUUID() -> String {
return UIDevice.current.identifierForVendor!.uuidString
}

사용 예제

# 공통적으로 사용하는 변수 및 함수들을 Utils라는 공통 클래스를 생성하여 관리하는 예시
# Utils.getDeviceUUID()는 필요한 곳 어디서든 생성한 함수를 호출하여 사용

import UIKit 
class Utils{  
/**
# getDeviceUUID
- Note: 디바이스 고유 넘버 반환
*/
static func getDeviceUUID() -> String {
   return UIDevice.current.identifierForVendor!.uuidString
  }
} 

주의 사항
- uuid는 앱을 삭제하면 새롭게 생성 됩니다.
- 앱을 재설치해도 고유한 번호가 필요한 경우에는 최초 uuid 생성 시점에 keychain에
  저장하는 방법을 사용해야 합니다.
 

iOS 디바이스의 고유 ID

UID와 keyChain을 이용한 방법을 활용할 수 있다.

원래 apple에서는 iOS 디바이스마다 고유 값인 udid를 제공했다.
하지만 어떤 앱을 쓰더라도 udid는 같다는 보안 문제 때문에 애플은 iOS5 버전부터 더이상 udid를 제공하지 않기로 했다.
이를 해결하기 위해 uuid를 생성, 키체인에 저장하는 방식을 활용하고 있다.
uuid는 공장 초기화를 하지 않는 이상 지워지지 않고,
중복될 확률(2,710,000,000,000,000,000분의 1)은 초당 10억 개의 uuid를 85년동안 생성해야 중복 건이 1건 발생할 수 있다고 한다.

UUID + KeyChain

  swift 언어를 이용하여 UUID를 생성하고 그것을 keyChain에 저장하는 절차는 다음과 같다  

1. 우선 라이브러리를 설치한다. podfile이나 carthage를 이용하자.

   • Podfilepod'TAKUUID'orpod'TAKUUID',:git=>'https://github.com/taka0125/TAKUUID.git'
   • Carthagegithub "taka0125/TAKUUID"

2. 프로젝트.xcworkspace 파일을 열고, 프로젝트 설정 창에서 Capability를 추가한다.

 

3. UUID를 생성하고 출력해본다.

import TAKUUID

class ViewController: UIViewController{

    @IBOutlet weak var uuidInTheKeychain: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        initUUID()
    }    
    private func initUUID() {
        TAKUUIDStorage.sharedInstance().migrate()
        uuidInTheKeychain.text = TAKUUIDStorage.sharedInstance().findOrCreate()
    }
}

결과 확인

1. 최초 실행

2. 앱 삭제

3. 다시 설치 후 실행

확인 결과, 키체인에 저장해둔 UUID는 앱을 삭제했다가 다시 설치해도 유지된다.

출처
https://sunidev.tistory.com/16
https://42kchoi.tistory.com/386

참고
https://github.com/taka0125/TAKUUID
https://blog.naver.com/PostView.naver?blogId=writer0713&logNo=221040662262&redirect=Dlog&widgetTypeCall=true&directAccess=false


728x90