본문 바로가기

개발 코딩 정보 공유/애플 iOS 스위프트 Xcode

알면 알수록 헷갈리는 IOS 환경 1 - 인증서와 프로비저닝(코드서명)

 

 

안녕하세요.

김과자입니다.

그동안 안드로이드에 대한 글만 쓴것 같아서 

IOS도 지식공유를 해보려합니다.

 

IOS 개발을 시작할때 뭐부터 공부하시나요? 

스위프트? Xcode 사용법? 물론 당연히 중요합니다.

그러나 실제 현장에서 문제가 되는 골치거리는 따로 있죠.

그중에서 오늘은 인증서와 프로비저닝 프로파일에 대해서 정리해보려 합니다.

초기와 달리 XCODE 가 좋아지고 ! 개발 환경이 업데이트 되면서 지금은 XCODE 자체의

자동인증 방식을 통해 알아서 인증서와 프로비저닝 프로파일을 셋팅합니다.

아주 세상 편해졌죠.

 

"그럼 뭐가 문제라는 말인가요?"

 

안타깝게도 우리가 작업할 현장은 우리가 원하는 대로 할수있는 정상적인? 환경이 아닙니다.

외부로 연결되는 인터넷이 안 되는 경우도 많고, 계정을 안 주는 경우도 있구요. 

뭘 어떻게 작업해야 하는지 가이드도 없는 경우도 많구요.

아주 난리가 납니다. 물론 나이스한 경우도 있긴 합니다. (가끔;;;)

 

자 그럼 바로 시작해보도록 하겠습니다.

 

주제를 인증서와 프로비저닝프로파일 이라고 했지만

그 안에는 앱 코드 사이닝을 위한 무수히 많은 과정이 함축되어있습니다.

오늘은 심플하게 인증서와, 프로비저닝에 대해서 간단하게 정리해봅시다~

* 자동으로 할 수 있는 환경이면 꼭 자동으로 하세요^^ 제발. 꼭. 하세요. 두번하세요.

 

 

자동셋팅이 되는 환경이라면 꼭 그렇게 하자. 당신의 정신건강을 위해서

 

 

 

<인증서>

그렇다면 인증서는 왜 필요할까요?

IOS개발은 반드시! 꼭! XCODE 를 통해 앱을 개발하고 기기에 설치하고 실행하게 되는데요.

이러한 일련의 과정을 위해 위해서 필요한게 바로 인증서 입니다. (그냥 그렇게 생각하시는게 편합니다 ㅎㅎ)

인증서의 실체? 를 확인 하자면... 맥에서 '어플리케이션' > '키체인' 을 실행해 보면 됩니다.

열어보면 굉장히 다양한 인증서들이 설치된것을 볼 수 있는데요.

아마도 xcode 에서 자동으로 설정해 놓은 사이 알아서 설치되었나 봅니다. (똑똑하네요.)

 

 

 

여러가지 인증서가 설치되어 있네요

 

 

자. 그렇다면 인증서는 용도에 따라서 개발용 인증서 , 배포용가 있을겁니다.(그렇죠?)

- 개발용 인증서 (테스트용) : 앱을 개발하고 시뮬레이터 혹은 USB 를 통해 연결한 기기에서 

테스트 할때 쓴다고 생각하시면 되겠습니다.

 

-배포용 (ad-hoc, testflight, appstore 등) : 처음에는 배포 개념이 조금 생소했는데요.

배포라는 개념 자체를 App Store에 올리는 행위 자체 라고 한정지어서 생각했기 때문입니다.(안드로이드에서 처럼)

그런데 IOS 상에서 배포는 USB로 빌드하여 테스트 하는것 빼고 나머지가 배포의 범주라고 보면 될 것 같습니다.

Ad-hoc 방식으로 테스트 할때도 배포 이구요. Test-Flight를 통한 베타테스트 또한 배포입니다.

엔터프라이즈 계정으로 전달하고 테스트 할때도 배포이구요. App-store에 올리는것도 배포입니다.

아무튼 정리하자면 앱을 개발해서 실행하려면 인증서를 통해 반드시 코드사인 되어야한다. 입니다.

(무조건 있어야 된다. 그게 개발용이든, 배포용이든 애플스토어 인증서든 뭐든...)

 

 

 

코드서명이 필요한 이유

 

 

<프로비저닝>

인증서만 있으면 실행될것 같죠? 절대 아닙니다. 애플이 발급한! ‘인증서’ 로 코드 서명한 앱을 기기에 설치할 때에는 반드시 프로비저닝 프로파일(provisioning profile)이 필요합니다. 

 

이쯤에서 "아니 이건 또 뭐야" 하실겁니다. 

 

프로비저닝 프로파일 또한 XCODE에서 자동으로 해결해 주는데요.

우리는 그럴수 없는 환경에 있다고 가정하고 좀 더 알아보겠습니다.

프로비저닝 프로파일은 쉽게 말해서 하나의 정보 파일 입니다. 나중에 한번 내부를 들여다 보겠습니다.

내부에는 App Id, Certificates, Devices 의 정보가 묶여있습니다.

 

"어라? 뭔가 감이 오시죠?"

 

맞습니다. 

이 정보들을 가지고 해당 인증서로 묶여있는 앱인지, 앱 아이디 는 일치하는지, 기기 정보(테스트를 위해 등록한)는 일치하는지 등등을 판단하여 기준에 부합한 경우만 앱 실행을 하게 됩니다.

내부에서는 우리도 모르는 사이 안에서는 이러한 일들이 일어나고 있네요.

 

 

프로비저닝 프로파일의 구조

 

 

<정리>

잘 이해가 안되시면 예를 들어 보겠습니다. 배포는 둘째치고 일단 개발을 한다고 쳐봅시다. (수동으로 인증 관리한다는 가정)

당연히 개발용 인증서가 있어야 겠죠. 그리고 개발용 프로비저닝프로파일이 있어야합니다.

또 당연히 이 프로파일에는 내가 테스트 할 기기의 ID가 등록되어 있을겁니다.(안 되어있다면 해야겠죠)

 

"해당인증서와 프로파일로 다른폰에서도 테스트 하고 싶은데요?"

 

그렇다면 해당 기기 id 를 개발/테스트 기기로 새로 등록해줘야 겠죠?

 

"등록하면 끝인가요?"

"아뇨."

 

프로비저닝 프로파일을 다시 받아서 셋팅해야 합니다.

즉, 인증서- 프로비저닝프로파일 - 개발/테스트 기기는 묶여있다. 라고 생각하시면 편할겁니다.

여기 까지는 개발용 일때의 인증서와 프로비저닝 프로파일의 얘기 구요.

 

배포용이라면 이야기가 달라집니다. 배포용 인증서는 기기의 아이디 를 등록하지 않는데요.

우리 앱을 스토어 에서 받을때 기기를 등록하나요? 만약에 배포용 프로파일을 사용하여 테스트 하는데

기기를 제한하고 싶다. 라고 한다면 Ad-hoc 방식을 통해서 배포 하면 됩니다. (100대 기준)

(ad-hoc 배포는 기기ID를 등록하는 방식을 사용합니다.)

 

애플의 배포 방식에 대해서는 할 얘기가 많으니 다음 편에서 이야기 해보겠습니다.

오늘은 인증서와 프로비저닝 프로파일에대해 조금 알아보았는데요.

좀 더 깊은 지식을 원하신다면 아래의 문서를 참고 하시면 더 도움이 되겠네요.

그럼 오늘도 즐 코딩! 하세요.

 

 

<참고>

 

https://medium.com/ios-os-x-development/ios-code-signing-provisioning-in-a-nutshell-d5b247760bef

 

https://help.apple.com/xcode/mac/current/#/dev60b6fbbc7

 

https://engineering.linecorp.com/ko/blog/ios-code-signing/