React Native) fastlane match를 이용해 signing하기 (IOS)

2ast·2022년 11월 9일
0

cert를 match로 대체하기

fastlane에는 cert와 sigh를 이용해 사이닝하는 방법과 match를 이용해 사이닝하는 방법이 있다. 간단하게 설명하자면 cert와 sigh는 로컬 인증서를 기반으로 하고, match는 원격 저장소에 저장된 인증서를 기반으로 한다. 일반적인 경우 cert와 sigh보다는 match를 활용하도록 권장한다고 한다. 그 이유에 대해서는 cert 문서match 문서에 잘 나타나 있으니 참고해보면 좋을 것 같다.

그래서 이번에는 cert와 sigh를 match로 대체해보려고 한다. 먼저 match를 이용하기 위해서는 인증서를 저장할 원격 저장소를 만들어야 한다. 원격 저장소에는 git외에도 s3, google cloud 등을 지원하지만 개인적으로 git이 익숙하므로 git으로 진행해보겠다.

사전 준비: github에 비공개 저장소 만들기

github에 접속해 인증서를 저장할 새로운 저장소를 만들어준다. 이때 이름은 아무렇게나 지어도 상관 없지만, 인증서가 저장되는 만큼 보안을 위해 꼭 Private으로 설정해주어야 한다.

프로젝트에 Matchfile 설정하기

Matchfile 초기화

내 react native 프로젝트로 이동해서 match를 초기화해주어야 한다. 아래 커멘드를 입력하자

cd ios && fastlane match init

그러면 어떤 저장소를 이용할 것이냐고 물어보는 문구가 뜨는데, 이때 git(1번에 해당)을 선택해주면 된다. 그 이후 repo의 주소를 입력하라는 문구가 나오면 아까 만들어둔 비공개 저장소의 주소를 입력해주자.

Matchfile 수정

모든 과정이 끝나면 ios/fastlane 경로에 Matchfile이라는 파일이 만들어진 것을 볼 수 있다. 기본적으로 생성된 Matchfile 안쪽의 코드는 다음과 같다.

git_url("연동해준 repo url")

storage_mode("git")

type("development") # The default type, can be: appstore, adhoc, enterprise or development

# app_identifier(["tools.fastlane.app", "tools.fastlane.app2"])
# username("user@fastlane.tools") # Your Apple Developer Portal username

# For all available options run `fastlane match --help`
# Remove the # in the beginning of the line to enable the other options

# The docs are available on https://docs.fastlane.tools/actions/match

사실상 이 파일을 수정하지 않아도 무관하다. Matchfile에서 type과 app_identifier 등 옵션에 default value를 지정해줄 수 있기 때문에 Fastfile에서 match 액션을 실행할 때 코드를 줄일 수 있다는 장점은 있다. 일단은 수정하지 않고 넘어가겠다.

기존 인증서 폐기

match를 사용했을 때의 장점이 바로 인증서 관리가 깔끔해진다는 것이다. 기존에는 협업하는 상황에서 각각의 참여자들이 각각의 인증서를 발급받아 사용하는 케이스가 발생했기 때문에 인증서 관리에 어려움이 있었(다고한)다. 하지만 match를 사용하면 목적에 따라 하나의 인증서만을 발급해 원격저장소에 저장하고, 모든 참여자들이 이 저장소에 접근하는 방법으로 사이닝을 하기 때문에 관리가 수월해진다. 이를 위해서 우선 기존에 발급된 인증서들을 모두 폐기하는 과정이 동반될 수 있다. 그렇기 때문에 match는 자체적으로 기존 인증서들을 일괄 폐기해주는 기능을 제공한다.
(인증서를 폐기하더라도 나중에 match인증서를 발급하는 과정에서 mac의 키체인에도 자동으로 등록해준다고 하니 걱정말고 삭제해도 된다.)

개발용 인증서 폐기

프로젝트의 ios폴더에서 아래 명령어를 실행하면 이전에 발급된 개발용 인증서의 폐기가 진행된다. 처음 실행하는 것이라면 추가 인증을 요구할 수도 있다.

// 경로: project_root/ios

fastlane match nuke development

질문에 잘 대답하다보면 마지막에 모두 삭제할 것인지 물어보는데, 이때 'y'를 누르면 폐기가 완료된다.

배포용 인증서 폐기

아래 명령어를 입력하면 배포용 인증서 폐기를 진행할 수 있다. 전체 과정은 개발용 인증서 폐기 절차와 동일하다.

// 경로: project_root/ios

fastlane match nuke distribution

match 인증서 발급

이제 새로운 인증서를 발급받을 차례다. appstore, adhoc, enterprise, development 네 종류의 인증서를 발급받을 수 있는데, 이 중 가장 많이 쓰는 appstore와 development만 발급받아 보려고 한다.

개발용 인증서 발급

// 경로: project_root/ios

fastlane match development

위 명령어를 입력하면 개발용 인증서 발급이 진행된다. 성공적으로 발급이 완료되었다는 메시지가 나온 뒤에 github의 해당 저장소에 들어가보면 새로운 인증서 파일들이 저장되어 있는 것을 확인할 수 있다.

배포용 인증서 발급

// 경로: project_root/ios

fastlane match appstore

명령어는 위와 같고, 그 외애는 모두 개발용 인증서 발급과 동일하다.

Xcode 설정

xcode에서 프로젝트를 열고 Signing 설정을 해준다. 사진에 빨간색으로 체크한 경로를 따라 Signing & Capabilities 설정에 접근한다. 그러면 빌드 타입에 따라 어떤 인증서를 사용할 것인지 선택할 수 있다. (Automatically manage signing 항목에 체크 해제를 해야 노출된다.) 여기서 각 케이스에 따라 Provisioning Profile을 선택해준다. 정상적으로 match 인증서가 만들어 졌다면 선택지에 match로 시작하는 이름이 보일 것이다. Release는 배포용 인증서인 'match AppStore ~'를 선택해줬고, Staging은 'match Development ~' 인증서를 선택해주었다.
(Staging같은 경우는 codepush 배포를 위해 내가 추가로 설정해준 타입이므로, 다른 사람들에게는 안보일 수 있다.)

Fastfile 설정

이제 모든 준비가 끝났다 Fastfile에서 cert와 sigh를 지우고 match로 대체해보자.

  # 기존 방식
  
  desc "cert & sigh 사용"
  lane :beta do 
    cert
    sigh(force: true)
    
    ...
    
  end
  
  # match 사용 방식
  desc "match 사용"
  lane :beta do 
    match(
      type: "development", # 스토어 배포라면 appstore
      app_identifier: '내 앱 bundle identifier 입력',
      readonly: true
    )
    
    ...
    
  end

아까도 언급했듯이 Matchfile을 수정하면 type과 app_identifier의 초기값을 설정해줄 수 있기 때문에 생략해줄 수도 있다.

profile
React-Native 개발블로그

0개의 댓글