A colossal Dreamer: GR鐵塔-天生我材

iOS 10 Keychain Access with entitlement 본문

Development/아이폰

iOS 10 Keychain Access with entitlement

江多林 2016. 9. 28. 15:03

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을 먼저 켜주시면,

간단히 해결되실 것으로 기대됩니다.



부디 저와 같이 삽질하지 않으시길...