iOS 10 Keychain Access with entitlement
iOS Keychain Access
담당하고 있던 앱에서 로그인이 풀리는 이슈가 있어서
f/u 해본 내용을 공유하려고 합니다.
앱에서 AccessToken, refreshToken을
키체인에 저장하고 있었습니다.
iOS10 업데이트 이후에 항상 로그인이 풀리는 이슈가 확인되었네요. ㅠㅠ
- 프리징이라지만, 너무 무관심 했어요.. 반성합니다.
디버깅을 해보니까. KeyChain 쪽에서
* -34018 (errSecMissingEntitlement) osStatus *
코드가 떨어지고 있었습니다.
- 문서화되지 않고, 애플개발자포럼에서 확인인 코드입니다.
-34018 코드는 그동안에도 iOS 메이저 업데이트때마다
종종 보이던 넘입니다.
```
- 이전에 프로비져닝(개발계정)으로 서명된 앱을
마켓버전(스토어계정)으로 설치한 경우에도 발생하고요.
- iOS7과 8 에서 키체인쪽 대규모 변경이 있은 후에 몇 달동안
고통받기도 했었죠.
(내부에서 키체인쪽 동작을 시스템프로세스로 옮겼고,
여기서 동기적인 키체인 API 가 내부에서 비동기로 처리되고,
중간 프록시객체가 메모리워닝을 맞으면,
프록시가 날아가서 발생한 것으로 추정됩니다.)
- iOS10 entitlement 가 지정되지 않으면 발생
(iOS10에서 또다시.. !! 자세한 설명은 아래 이어갑니다.)
```
iOS9 까지 KeyChainAccess 는 별도의 entitlement 를 등록하지 않아도,
자기 자신의 bundleID와 APP SeedID 의 조합은 처리되었습니다.
하지만, iOS10 에서는 Xcode8-Target 설정의 Keychain Sharing 을 켜줘야 합니다.
Keychain Sharing 을 사용하지 않더라도, Keychain Access 를 사용하려면,
반드시 entitlement 에 명시되어야하는 것으로 바뀌었습니다.
짧지 않은 삽질의 시간이 끝나고, entitlement 추가한 후에는
잘 동작하네요.
Xcode8 에서 Keychain Sharing 을 켜는 동작만으로는
별도의 developer.apple.com 의 AccessGroup 등의 설정이 변경되지 않습니다.
- AccessGroup 을 추가하거나 하면, 변경을 것이고요.
따라서, iOS10 이후에 Keychain 에서 -34018 osstatus 가 발생하면,
일단 Keychain Sharing을 먼저 켜주시면,
간단히 해결되실 것으로 기대됩니다.
부디 저와 같이 삽질하지 않으시길...