Skip to content

Instantly share code, notes, and snippets.

@skyofdwarf
Created December 20, 2022 15:24
Show Gist options
  • Save skyofdwarf/00c04380fb77d9555a5092f8964c5fba to your computer and use it in GitHub Desktop.
Save skyofdwarf/00c04380fb77d9555a5092f8964c5fba to your computer and use it in GitHub Desktop.
키체인 아이템 공유 방법의 차이점

키체인 아이템 공유 방법의 차이점

  • Keychain Sharing
  • App Groups

여러 앱에서 키체인 아이템을 공유하기 위해서 Keychain Sharing 또는 App Groups 기능을 활성화하고 keychain access group 또는 app group을 지정한다.

기능 차이

  • 일반 데이터 공유
  • kSecAccessGroup 기본 값

일반 데이터 공유

2개의 기능 차이는 App Groups이 Keychain Sharing을 지원함과 동시에 UserDefaults?(suiteName:)을 통한 일반 데이터 공유도 지원한다는 것이다.

App Groups 에 등록되지 않은 값으로 UserDefaults?(suiteName:)를 호출해도 초기화함수가 실패하지는 않는다. 데이터 공유만 안될 뿐

kSecAccessGroup 기본 값

추가적으로 kSecAccessGroup 미지정 시 Keychain 동작에 차이가 있으니 알고 가자.

kSecAccessGroup 미지정 시

  • Keychain Sharing: 등록된 access group 목록 중 첫번째 항목이 기본값으로 사용된다.
  • App Groups: 원래의 private access group을 사용한다.(Keychain sharing, App Groups 없이 그냥 사용하는 것 처럼)

Keychain Sharing의 경우 kSecAccessGroup 지정없이 아이템을 추가해도 기본값으로 설정된 accesss group이 적용되기 때문에 다른 앱과 공유가 가능하다. 기본적으로 공유가 된다면 공유가 목적인 데이터는 어떻게 저장할까? 공유하지 않을 데이터는 access group 값으로 app ID를 사용해야 한다.(kSecAttrAccess 참고)

app ID: team-id 와 bundle-id의 조합으로 MYTEAMID.com.company.app의 형식의 값

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment