iOS 배포를 위한 핵심 개념


iOS 배포를 위한 certificate, AppID, Device, Provisioning Profile 에 대해 알아보자.


Xcode에서 코딩해서 빌드하고 싶은데 certificate나 provisioning profile과 같이 처음 듣는 용어들이 난무해서 너무 복잡하게 느껴졌다. 그래서 이를 한 번 쭉 정리해보려고 한다.

Certificate

먼저 항상 뭘 하든 ‘인증’이라는 개념이 빌드와 배포에서 중요하게 적용된다. 애플이 인증서를 만들라고 하는 이유는 애플은 자신들의 기기에 어떤 프로그램이 동작하기 위해서 인증을 받아야 하는데 이를 위해 인증서가 필요한 것이다. 그래서 내 프로그램을 애플의 기기에서 구동을 하고 싶으면 꼭 필요하다. 앱을 실행할 때마다 애플에 요청하고 이를 관리하기가 번거롭기 때문에 개발자 센터에 인증서를 받으면 애플이 개발자를 신뢰하여 애플 대신 앱을 실행할 수 있는 권한을 부여받는다.

이 인증서를 통해 애플이 개발자를 신뢰할 수 있다는 보증을 하는 것이다. 이 인증서를 통해 개발자가 certificates를 생성하고 실행해서 xcode에 설치하면, 애플의 신뢰 대상이 되어서 개발한 소프트웨어를 기기에서 실행할 수 있다.

Certificate에는 development와 distribution certificate로 나뉘는데, 왜 development와 distribution로 certificate를 또 나누는지 궁금해졌다.

  • Developer certificate 같은 경우는 Xcode를 이용해서 앱을 설치할 때, 즉 개발할 때 필요하다.
  • Distribution certificate 같은 경우는 앱을 앱스토어에 올리거나 테스터들에게 AdHoc 빌드를 보내고 싶을 때(Xcode를 사용하지 않고 설치할 수 있게끔) 사용한다.

Certificate를 받으면 앱을 sign할 수 있도록 허락을 받은 상태이지, 기기가 나(개발자)를 또 신뢰하고 있는지를 알아야지만 설치를 할 수 있다. 만든 애플인증서와 iOS 기기를 연결시켜줘야 하는데 이를 프로비저닝 프로파일이라고 한다.

프로비저닝 프로파일을 보기 전에 더 봐야 할 개념들이 있다.

AppID

애플에서 앱을 구분하는 구별자다.

Device

테스트할 단말기의 UDID를 등록하는 것이다.

Provisioning Profiles

위에서 말했듯이, 소프트웨어를 신뢰하는 것은 Certificate가 담당하고, 디바이스가 개발자를 신뢰할 수 있는지를 확인해야 한다. 앱을 앱스토어/ 테스트 배포하기 위해 Certificate, Devices, AppID를 하나로 묶어 관리한다. iOS 기기와 애플 인증서를 연결해주는 역할을 한다. 앱을 디바이스에 컴파일 하는데 사용한다.

image

  1. AppID : 앱스토어에 등록될 Bundle ID가 등록 (무엇을)
  2. Certificate : 인증서 (누가)
  3. Device : 디바이스의 UDID (어디서)

개발자는 여러개의 프로비저닝 프로파일을 가질 수 있지만 프로비저닝 프로파일을 생성할 때 연동한 AppID와 실제 컴파일하려는 프로젝트의 BundleID가 일치해야 한다. 그래서 각 프로젝트마다 별도의 프로비저닝 프로파일을 만들어줘야 한다.

프로비저닝 같은 경우에는 헷갈리는게 In House와 Ad Hoc이 있다.

  • Ad-Hoc은 특정 기기들에 적용할 수 있는 것이다. 한 계정에서 한 타입당(아이폰, ipad 등등) 100개의 기기를 등록할 수 있다.
  • In-House는 어떤기기에나가능하다.

지금까지 한 과정을 Code signing 작업이라고 한다.

출처

  • https://medium.com/jinshine-%EA%B8%B0%EC%88%A0-%EB%B8%94%EB%A1%9C%EA%B7%B8/%EC%BD%94%EB%93%9C%EC%82%AC%EC%9D%B4%EB%8B%9D-%EC%9D%B8%EC%A6%9D%EC%84%9C-%ED%94%84%EB%A1%9C%EB%B9%84%EC%A0%80%EB%8B%9D-%ED%94%84%EB%A1%9C%ED%8C%8C%EC%9D%BC%EC%9D%B4%EB%9E%80-2bd2c652d00f
  • https://ios-development.tistory.com/246
  • https://stackoverflow.com/questions/14858266/what-is-the-difference-between-in-house-versus-ad-hoc-distribution-for-enterpris