본문 바로가기

iOS

Apple 인증서 및 CodeSigning

iOS App CI/CD 구현을 위해 공부한 내용 중 애플 디바이스 개발을 위해 필연적인 요소인 코드 사이닝에 대한 기록을 남깁니다.

 

Apple 인증서란?

애플은 오직 자신들의 하드웨어에 앱을 비롯한 프로그램(소프트웨어)이 동작하도록 허락합니다.

따라서 iOS 기준 App이 실행될때 마다 애플로부터 인증을 받았는지 확인합니다.

인증 절차

개발자 ⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤> iOS Developer Program ⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤> Apple

                            인증서                                                                                      신뢰 여부 결정

         <⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤

                                                                     앱 실행 권한 부여

 

인증서란(Certificates)?

  • App을 서명할 수 있음을 Apple로부터 인증받기 위한 수단
  • 기기가 개발자를 신뢰하고 있는지 확인은 불가 → 인증서와 MAC, iOS 기기의 연결이 필요 → Provisioning Profile

 

프로필이란(Provisioning Profile)?

  • App ID(Bundle ID)
  • Cetificates
  • Device
  • 위 3가지 정보를 포함
  • 인증받은 개발자와 개발 기기를 연결

 

인증서의 종류

  • 개발(빌드)을 위한 인증서 (Development Certificates)
  • 빌드 파일(.ipa) 생성 및 배포를 위한 인증서 (Distribution)

 

▶︎ App 배포를 위해 필요한 CodeSiging

개발 인증서 + 개발 프로파일

배포 인증서 + 배포 프로파일

 

프로파일이 포함하는 정보 중 App ID를 제외한 정보들은 개발자 별로 상이합니다.

따라서 개발자 마다 다른 프로파일을 소유하는 상황이 일반적이며,

이러한 상황은 배포과정에서 잦은 컨플릭트가 발생합니다.

 

또한, 이러한 상황을 회피하기 위해 협업하는 iOS개발자가 동일한 인증서와 서로의 디바이스들을 추가한 디바이스 정보로

프로필을 공유하는 경우가 있습니다.

해당 상황이라면 컨플릭트의 발생이 생기지 않기를 기대하지만,

애플의 코드 사이닝은 그 구조가 복잡한만큼 협업과정에서 충돌이 일어날 가능성이 매우 큽니다.

 

 

인증서 생성 방법

(1) CA(인증기관)으로 부터 request 파일 생성

  • 사용자 이메일 주소를 기입
  • 디스크에 저장 선택
  • 계속을 눌러 진행하고 다운 받은 request 파일을 보관합니다.

(2) Apple Developer Web접속 후 Cetificates 추가 버튼 선택

 

(3) 생성하고자 하는 인증서의 종류를 선택합니다.

  • Development와 Distribution으로 나누어집니다.
  • 위에서 설명하였 듯이 Development는 개발을 위한, Distribution은 배포를 위한 인증서입니다.

(4) 새로운 인증서 생성을 위한 (1)에서 다운 받은 request 파일을 선택해줍니다.

 

(5) 인증서 생성이 완료되었습니다.

  • 생성된 인증서를 다운하고 키체인에 추가해 줍니다.
  • 키체인에 추가된 인증서는 아래와 같이 인증서와 개인키로 이루어져 있으며,
  • 백업을 위해선 인증서와 개인키를 모두 포함한 .p12 파일의 형태로 저장합니다.

 

프로파일 생성 방법

(1) 위 방법을 따라 인증서를 생성한 이후, 프로필 탭을 눌러 이동합니다.

  • + 표시를 눌러 프로필 추가 화면으로 이동합니다.

(2)  생성하고자 하는 프로필을 선택합니다.

(3) 프로필을 생성할 App을 선택해줍니다. (App ID)

(4) 프로필 생성을 위한 인증서를 선택해줍니다.

(5) 생성된 프로필을 다운받고 Xcode에서 import 합니다.

'iOS' 카테고리의 다른 글

FCM과 APNs에 관하여  (0) 2022.05.03
(동기/비동기)와 동시성에 대한 개념  (0) 2021.12.21
CI/CD(feat. Fastlane)  (0) 2021.11.29