[CI/CD] Match로 인증서를 공유해보자

강대훈·2025년 10월 19일

CI/CD

목록 보기
2/4
post-thumbnail

해당 포스트를 이해하기 위해서 Certificate, Provisioning Profile에 대한 이해가 필요합니다.
해당 세션을 적극 추천드립니다.

개인으로 프로젝트를 진행할 때에 인증서가 필요한 경우에는 Cert, Sigh으로도 충분합니다.

Cert, Sigh 방법을 사용한다면 다음과 같은 방식으로 인증을 진행합니다.

로컬 키체인에 인증서를 등록해뒀다면, Fastlane이 알아서 Certificate를 읽고 인증을 진행합니다. 로컬 키체인에 인증서가 없다면, Cert, Sigh 방식이 Certificate & Provisioning Profile을 다운로드 받아서 진행합니다.

만약 Automatically manage signing 을 선택했다면 Cert, Sigh 작업도 필요가 없습니다.

하지만 팀 프로젝트의 경우에는 어떻게 해야 할까요?

그냥 Automatically Signing 하면 별 문제 없이 편리하게 작업할 수 있지 않을까요?

하지만 다음과 같은 문제가 발생할 수 있습니다.

  • 로컬 외에서 작동하는 CI/CD를 구축하기 어렵다.
  • 인증서의 개수 제한과 충돌이 발생할 여지가 있다.
  • 다중 타겟의 경우 충돌이 일어날 확률이 크다.

이런 문제 때문에 팀 프로젝트의 경우에서는 인증서를 공유하는 방식을 자주 사용하는데, 이것을 수동으로 공유하는 것은 매우 번거로운 작업입니다.

Fastlane에서는 이 문제를 해결하기 위해서 Match 방식이라는 인증서 공유 방식을 제공합니다.

Match 방식을 한 줄로 정의한다면 다음과 같이 정의할 수 있을 거 같습니다.

팀 전체가 동일한 인증서와 프로비저닝 프로파일을 Git 리포지토리를 통해 안전하게 공유하는 방식

그럼 이제 사용하는 방법에 대해서 알아보겠습니다.


1️⃣ 먼저 Private Repository를 하나 생성합니다.

해당 Repository에 Certificate & Provisioning Profile을 저장하기 때문에 반드시 비공개로 생성해야 합니다.


2️⃣ 생성을 완료했다면 Match를 사용할 팀 프로젝트 저장소에서 명령어를 입력합니다.

fastlane match init

명령어를 입력하면 다음과 같이 1 번을 입력하고 Match 저장소 HTTPS URL을 입력합니다.


3️⃣ Matchfile이 생성되는데 다음과 같이 기입합니다.

git_url("https://github.com/***.git") # HTTPS Repo URL
storage_mode("git") # Git
app_identifier(["com.***"]) # Bundle Identifier
username("***@icloud.com") # Apple ID (인증서를 생성하는데 필요합니다.)

4️⃣ 기존에 존재하던 Certificate & Provisioning Profiles를 제거합니다. (선택)

Match를 사용하기 전에 기존에 겹치던 Certificate & Provisioning Profiles를 제거하는 작업입니다.

해당 작업을 진행하면 Matchfile username 에 기입했던 Apple Developer 계정의 인증서가 모두 파기되기 때문에 신중히 생각하고 결정해야 하는 작업입니다.

만약 완전히 초기화하고 깨끗한 상태로의 작업을 원한다면 해당 작업을 진행하시면 됩니다.

fastlane match nuke development # Developer 모두 날림
fastlane match nuke appstore # Distribution 모두 날림

5️⃣ Match 저장소에 Certificate & Provisioning Profiles를 저장합니다.

fastlane match developer # 빌드용 Developer Certificate & Provisioning Profiles
fastlane match appstore # 배포용 Distribution Certificate & Provisioning Profiles

다음과 같이 명령어를 입력하면 fastlane이 자동으로 Certificate & Provisioning Profiles를 생성하거나 가져온 뒤에 로컬에 설치하고 Match 저장소에 암호화한 형태로 저장합니다.

🚨🚨🚨
그렇기 때문에 직접 Apple Developer에서 Certificate & Provisioning Profiles를 발급받을 필요가 없습니다!

여기까지 진행하면 다음과 같이 저장소에 Certificate & Provisioning Profiles가 저장됩니다.

또한 로컬 키체인에도 Certificate가 등록되어 있는 것을 확인할 수 있으실 겁니다.


6️⃣ Match를 통해 팀원에게 인증서 공유하기

fastlane match development --readonly true
fastlane match appstore --readonly true

다음과 같은 명령어로 간단하게 Certificate & Provisioning Profiles를 받아올 수 있습니다.

명령어에 --readonly true 가 추가되었는데, 해당 명령어는 Match 저장소에 있는 기존 인증서를 받아오는 옵션입니다.

해당 명령어를 입력하지 않으면 Match 저장소에 새로운 인증서를 생성하기 때문에 빌드가 깨질 수 있습니다.


7️⃣ Xcode와 키체인에서 확인

이렇게 match 로 시작하는 Provisioning Profiles 가 생성되었고 키체인에 Certificate가 정상적으로 등록되었다면 성공입니다!


여기까지가 Match 저장소를 활용한 인증서 공유 작업이었습니다.

해당 작업은 모두 로컬에 해당하는 작업이었는데, Github Actions과 같은 가상환경에서는 어떻게 해야 할까요?

또 CI/CD 작업에서 어떻게 Match를 활용할까요?

최근에 해당 작업을 완료했고, 조만간 포스팅해보도록 하겠습니다 감사합니다! 🙂


참고자료

https://green1229.tistory.com/478

https://ho8487.tistory.com/149

0개의 댓글