https://blog.naver.com/writer0713/221040662262


가장 좋은건 회원가입 기반의 서비스를 만드는 것이다.
하지만, 회원가입 기능의 경우 개발, 보안, 유지보수 등에 상당한 시간이 걸린다. 
그렇다면 회원가입 기반의 앱이 아닌 경우는 어떻게 기기 식별을 할까?

여러 자료를 찾아보니, 아주 오래전에는 UDID라는 기기 식별 값을 제공했다고 한다.
이 값을 사용하면 아주 쉽고 간편하게 기기 식별이 가능하지만,
이 값을 역으로 추적하여 기기의 주인을 알수있기 때문에 신상정보의 문제가 있다고 판단한것 같다.
그리하여 UDID 대신 UUID를 사용하도록 조치했다. (선택이 아닌 필수. UDID 사용 불가)

문제는 UUID는 앱을 실행할때마다 바뀌기 때문에 실질적으로 기기 식별을 하는데 도움이 안된다.
이러한 문제를 해결할 수 있는 방안이 UUID + keychain 방식이다.

최초 생성한 UUID 값을 keychain에 저장을 하고, 그 후로는 이 값을 가져다 사용하게 하는 것이다.

키체인의 경우, 앱을 지워도 유지되기 때문에 나중에 앱을 다시 재설치 해도 똑같은 UUID 값을 가질수 있다.
하지만, 공장 초기화 등을 통해 기기를 초기화 시키면 불가능하다.(이정도는 감안 할수있다고 본다)

우선 스위프트의 경우, 여러가지 오픈소스가 있는데, 본인은 가장 최근에 업데이트 된 오픈소스를 사용해 보았다.

링크 : https://github.com/taka0125/TAKUUID

# AppDelegate에 아래 코드 추가 private func initUUID() { TAKUUIDStorage.sharedInstance().migrate() self.UUID = TAKUUIDStorage.sharedInstance().findOrCreate() }

keychain sharing on 관련 포스팅 : (위 오픈소스를 사용하기 위해선 키체인 설정을 해줘야한다. 아래 포스팅을 참고하자.)