코드사이닝, 인증서, 프로비저닝 프로파일이란?

jinShine
jinshine 기술 블로그
9 min readMar 12, 2019

--

애플 개발자라면 꼭 알아야할 코드사이닝, 인증서, 프로비저닝 프로파일의 개념 및 실행 과정에 대해 알아보도록 하겠습니다.

실제로 Xcode를 열어서 자신의 아이폰에 넣고 빌드 해보고싶은데 처음 접하시는분들의 입장에선 까다롭고 복잡하여 포기하시는 경우를 종종 봤습니다.
그런데 왜 굳이 애플은 인증서를 만들어야될까요? 애플은 자신들의 기기에 어떠한 프로그램이 동작하기위해선 인증을 받아야되는데 이 부분에 대해 인증을 받기 위해서 인증서를 요청해야됩니다.
즉, 실제 자신의 단말기에서 구동을 하고 싶다면 꼭 해야만 하는 절차지요.

또한 앱을 앱스토어에 배포하거나 인앱결제를 할때도 iOS 꼭 필요한 절차이니 알아보도록 하곘습니다.

먼저 애플 인증서가 무엇이고, 어떻게 만드는지에 대해 알아 보도록 하겠습니다.

애플 인증서

애플만이 자신들의 기계(하드웨어)에 소프트웨어(앱, 프로그램 등)이 동작하도록 허락하기 때문입니다.

실제로 앱이 실행될때마다 애플로부터 인증을 받았는지 확인을 합니다. 애플만이 앱을 실행할 수 있다면 매번 애플에 요청하고 관리하기가 번거로워, 개발자가 iOS Developer Program의 개발자 센터에 인증서를 받으면 애플이 개발자를 신뢰하여 애플 대신 앱을 실행 할 수 있는 권한을 부여받기 때문에 인증서가 필요한겁니다!!!!!!

인증서 받는 방법

1. Key 만들기 (인증 사인 요청)

먼저 인증서를 받기 위해서는 키체인 접근 앱에서 CSR(Certificate Signing Request)를 생성해야합니다.

위쪽메뉴에서 키체인 접근 -> 인증서 지원 -> 인증 기관에서 인증서 요청

인증 기관에 인증서 요청을 하게되면 다음과 같은 작업을 수행합니다.
1. 인증서의 공개키개인키를 자동으로 생성합니다. 이는 키체인 앱에서 카테고리의 항목을 확인해 볼 수 있고, 잘 보관해야됩니다.
2. 애플에 보낼 CertificateSigningRequest.certSigningRequest 파일을 생성한다. 이 파일은 이름, 이메일 공개키를 포함하고 있고, 개인키를 이용해서 사인하게 됩니다.

이 과정을 거치면 키 체인앱의 키에 방금 만든 일반 이름으로 공개키, 개인 키가 만들어집니다!

2. Certificate 발급 받기

Apple Developer(https://developer.apple.com) -> Certificates, Identifiers & Profiles 클릭

2–1. Development(개발)와 Distribution(배포)용으로 나뉨

2–2. CSR(CertificateSigningRequest) 등록 후 Continue (위에서 만들었으니 참조)

2–3. 다운로드를 클릭해서 더블클릭 후 KeyChain에 잘 적용됬는지 확인합니다.

위의 과정을 거치게 되면 애플의 노예? 아니 앱을 사인할 수 있는 권한이 생겼습니다.
즉, 애플에서 인증을 한 개발자가 된것입니다.

하지만 앱을 사인(sign)할 수 있도록 허락을 받은 상태이지, 기기가 또 나를(개발자)를 신뢰하고있는지를 알아야만 설치를 시켜줍니다!

지금 만든 애플인증서와 iOS기기를 연결시켜주어야하는데 이것을 프로비저닝 프로파일이라고 합니다.

프로비저닝 프로파일(Provisioning Profile)

프로비저닝 프로파일은 app id, certificate, device정보를 가지고 있어, iOS기기 애플 인증서를 연결 해주는 역할

Provisioning Profile에는 위의 그림처럼 3가지가 들어가게됩니다.

  1. App ID : 앱 스토어에 등록될 Bundle ID가 등록.
  2. Certificate : 위에서 만들었던 인증서.
  3. Device : 디바이스의 UDID

프로비저닝 프로파일을 생성하기 전에 Certificate는 만들었으니 App ID와 Device등록절차가 필요함으로 먼저 AppID를 만들어 보고 Device 등록도 해보겠습니다.

App ID 생성방법

Apple Developer(https://developer.apple.com) -> App IDs클릭

  1. 원하는 형태의 Type(App, App Clip)을 선택해 줍니다.

2. 사용할 Bundle ID를 적어줍니다.

<추천>

We recommend using a reverse-domain name style string (i.e., com.domainname.appname). It cannot contain an asterisk (*).

3. 사용할 Capabilities를 체크해주세요. (나중에도 수정이 가능)

4. Continue -> Register

AppID를 등록했으니 마지막 남은 Device 등록을 해보겠습니다.

Device 등록 방법

Apple Developer(https://developer.apple.com) -> Devices클릭

  1. 상단 위 `+` 클릭
  2. Name을 UUID를 적습니다.

<Note>

예전처럼 디바이스를 연결하고 iTunes를 들어서 쉽게 확인이 됬는데,

요즘에는 Xcode -> window -> Devices and Simulators에 들어가서 Identifier를 적어주시면 됩니다.
또는 Apple Configurator를 다운 받으셔서 이용하시면 쉽게 추출 가능합니다.

3. Continue

이제 준비(App ID, Certificate, Device)가 끝났으니 Provisioning Profile을 만들어봅시다.

Provisioning Profile 생성방법

Apple Developer(https://developer.apple.com) -> Provisioning Profiles 클릭

  1. 개발용, 배포용 선택 후 Continu

2. 방금 만들었던 App ID선택 후 Continue

3. 인증서 선택 후 Continue

4. 디바이스를 선택하고 Continue

5. 프로비저닝 프로파일 이름을 적어주고 Continue

정해진 규칙은 없지만 아래와 같은 유형으로 작성하였습니다.

[<company name>] <app name> <profile type (AdHoc|AppStore)>Apple FaceTime AdHoc
Instagram AppStore

6. 드디어 프로비저닝 파일이 만들어졌습니다. 파일을 다운받아 두세요.

아는 만큼 보인다고 이제 프로젝트의 General 탭에서 Sining이 다르게 보이실겁니다.

Automatically manage signing이 체크가 되어있으면 Provisioning Profile과 Certificate, App ID등 Xcode에서 자동으로 생성됩니다.

위 처럼 자동으로 생성되도록 할 수도 있고, 직접 Developer사이트에서 생성하고, import할 수 있습니다. 다만 Provisioning Profile을 생성하는 도중에 꼬일수도 있는 상황이 있기 때문에 수동으로 관리하는 방법도 알아두면 좋습니다.

Automatically manage signing이 체크를 해제하시면 Singing (Debug)Signing (Release)로 나뉘게 되는데 쉽게 Debug는 개발용, Release는 배포용으로 생각하시면 됩니다.

저희는 지금 개발 환경으로 프로비저닝프로파일을 만들었기 때문에 Singing (Debug)를 보겠습니다.

다운 받아둔 Provisioning Profile을 import 시켜주면 에러가 나지 않고 정상적인 화면을 볼 수 있습니다.

혹시 에러가 나시면 등록한 Bundle Identifier가 맞는지 확인해주세요!

개발자는 복수의 프로비저닝 프로파일을 가질 수 있지만 프로비저닝 프로파일을 생성할때 연동한 App ID와 실제 컴파일하려는 프로젝트의 Bundle ID가 일치해야됩니다. 즉, 각 프로젝트마다 별로의 프로비저닝 프로파일을 만들어 줘야된다는 의미입니다.

지금까지 해왔던 과정을 코드사이닝 작업이라고 볼 수 있습니다.

Signing your app allows iOS to identify who signed your app and to verify that your app hasn’t been modified since you signed it. The Signing Identity consists of a public-private key pair that Apple creates for you.

출처 : https://medium.com/@abhimuralidharan/what-is-a-provisioning-profile-in-ios-77987a7c54c2

--

--