iOS Widget 개발: Keychain Access Group 으로 Data Share하기

Kwak seo hyun
3 min readDec 30, 2019

--

위젯을 개발할때 본 앱과 위젯 간의 data를 공유하는 방법에는 UserDefault를 사용하는 방법도 있지만 keychain을 통해 공유하는 방법도 있습니다. 특히 비밀번호 같은 credential한 정보는 keychain을 통해 공유 하는 것을 추천합니다. 주의할 점은 키체인은 앱을 삭제해도 남아 있기 때문에 어떤 용도로 사용할 지 잘 생각해야 합니다.

keychain을 위젯과 앱이 공유 하려면 keychain access group을 만들어야 합니다. 앱과 위젯 둘다 같은 keychain access group을 추가해 주어야 합니다. XCode의 프로젝트 페이지에 가서 타겟을 앱또는 위젯으로 선택하고 Signing&Capabilites>+Capability 를 누릅니다. Capabilities를 선택할 수 있는 팝업창이 뜨는데 Keychain Sharing을 선택하여 추가해 줍니다.

프로젝트 페이지 상단 메뉴
Capability를 검색하고 추가할 수 있는 팝업

그럼 프로젝트 페이지에 Keychain Sharing 섹션이 추가되고 Keychain Groups를 추가할 수 있게됩니다. + 를 눌러서 키체인 그룹을 추가해 줍니다. 디폴트로 bundle id가 추가 됩니다. 변경해서 써도 되고 그냥 써도 됩니다. 키체인 용도에 따라 다양한 그룹으로 나누어 사용할 수도 있겠네요.

키체인 그룹을 추가하고 나면 ProjectName.entitlements에 Keychain Access Groups가 추가된 것을 확인할 수 있습니다. array를 열어서 확장시켜 보면 아이템에 $(AppIdentifierPrefix)com.bundle.id 라고 써있는 것을 볼 수 있습니다. 이때 AppIdentifierPrefix는 apple developer 페이지에서 확인할 수 있습니다.

AppleDeveloper > Certificates, IDs & Profiles > Identifiers > 사용하는 아이디를 클릭 하면 App ID Prefix 가 나옵니다. App ID Prefix는 Provisioning file에 의해 결정되기 때문에 이 값을 직접 사용하기 보다는 info.plist를 이용하는 것을 권장합니다.

<key>AppIdentifierPrefix</key>
<string>$(AppIdentifierPrefix)</string>

코드에서 가져다 쓸때는 이런식으로 하면됩니다.

let appIdentifierPrefix =
Bundle.main.infoDictionary!["AppIdentifierPrefix"] as! String

keychain access group id를 info.plist에 넣고 쓰는 방법도 있습니다.

--

--