[iOS] fastlane 이용한 배포 자동화 (match 편)

parkgyurim·2022년 6월 8일
1

iOS 배포

목록 보기
5/5
post-thumbnail

💻 이 글은 Xcode Version 13.3.1, fastlane 2.206.2 를 바탕으로 작성하였습니다.

📌 참고

최근 개발용과 배포용 개발환경을 분리하면서 fastlane을 이용하여 배포시 인증 관련 문제가 발생하였습니다.
문제 해결 방법으로 팀원, 환경에 관계없이 자동으로 인증을 동기화 해주는 match 를 적용해보았고, 이와 관련된 내용을 정리하고자 합니다.

match

Easily sync your certificates and profiles across your team
A new approach to iOS and macOS code signing: Share one code signing identity across your development team to simplify your codesigning setup and prevent code signing issues.

📚 관련 공식 문서

Why match?

iOS 앱 개발 및 배포를 위해서는 CertificateProvisioning profile 이 필요합니다.

Provisioning profile

출처 : [iOS 앱 배포 준비] 애플에 배포하기 위한 4가지 개념 - 김종권의 iOS 앱 개발 알아가기

Provisioning profileAppID 는 모두 동일하지만, 인증서 퍼블릭키디바이스 정보 는 팀원 마다 각각 다른 값을 가지고 있습니다.
그렇다고 모든 개발자가 각각 배포 인증서provisioning profile 을 발급 받게되면, 관리가 굉장히 번거롭고 동작도 제대로 하지 않는 경우가 빈번히 발생합니다. 또한 배포 인증서 는 발급받을 수 있는 개수의 한계가 있습니다.

fastlanematch 를 사용하게 되면 원격저장소에서 CertificateProvisioning profile 를 저장하여 환경에 영향을 받지 않고 인증 을 받을 수 있게 됩니다.

match 설정

remote repository 만들기

인증 관련 파일들을 담을 원격 저장소를 생성해줍니다.
생성될 인증 파일들은 암호화 되어 저장이 되지만 굳이 public으로 만들 필요는 없겠죠? private 으로 생성해주세요

match 초기화

fastlane match init

프로젝트의 루트 폴더에서 match 초기화를 위한 명령어를 실행합니다.

[✔] 🚀 
[12:21:30]: fastlane match supports multiple storage modes, please select the one you want to use:
1. git
2. google_cloud
3. s3
?  1

깃허브 저장소를 이용할 것이기 때문에 1번을 선택했습니다.

[12:21:31]: Please create a new, private git repository to store the certificates and profiles there
[12:21:31]: URL of the Git Repo: https://github.com/ParkGyurim99/FastlaneCert // 📌
[12:21:34]: Successfully created './Matchfile'. You can open the file using a code editor.
[12:21:34]: You can now run `fastlane match development`, `fastlane match adhoc`, `fastlane match enterprise` and `fastlane match appstore`
[12:21:34]: On the first run for each environment it will create the provisioning profiles and
[12:21:34]: certificates for you. From then on, it will automatically import the existing profiles.
[12:21:34]: For more information visit https://docs.fastlane.tools/actions/match/

아까 생성한 저장소의 URL 을 입력해주면 fastlane 폴더 안에 Matchfile 이 생성됩니다.

Matchfile 수정

git_url("https://github.com/ParkGyurim99/FastlaneCert")

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(), username() 을 프로젝트에 맞게 변경해주세요.

match 인증서 생성

우선 match 에 사용할 인증서를 생성하기 전에 기존의 인증서를 삭제 하는 것을 권장하고 있습니다.
인증서가 많아지면 관리가 불편해지고, 인증서의 개수에도 한계가 있기때문에 권장하고 있습니다. (필수는 아닙니다!)

아래 명령어를 통해 인증서를 기존 인증서를 삭제할 수 있습니다.

fastlane match nuke development
fastlane match nuke distribution

Matchfile 설정이 끝났으니 이제 원격저장소에 인증서를 생성해줍니다.

fastlane match appstore

배포용 인증서를 생성할 것이기 때문에 appstore 명령어를 실행합니다.
이제 Matchfile 의 내용을 바탕으로 원격 저장소에 인증서를 생성하기 시작합니다.

[✔] 🚀 
[12:26:45]: Get started using a Gemfile for fastlane https://docs.fastlane.tools/getting-started/ios/setup/#use-a-gemfile
[12:26:47]: Successfully loaded '/Users/ParkGyurim/Documents/GitHub/FastlaneCert/Matchfile' 📄

+--------------+----------------------------------------------+
|             Detected Values from './Matchfile'              |
+--------------+----------------------------------------------+
| git_url      | https://github.com/ParkGyurim99/FastlaneCert |
| storage_mode | git                                          |
| type         | appstore                                     |
+--------------+----------------------------------------------+

...

이때, 만들어진 키를 암호화하기 위해 passphrase 생성을 요구할 수 있는데, 입력 후 해당 값을 기억해놓아야합니다!!
또한, 애플 계정의 자격을 확인하기 위해 애플 계정 메일 주소를 요구할 수 있고, 입력해주면 확인을 진행합니다.

[12:30:24]: All required keys, certificates and provisioning profiles are installed 🙌

잠시 뒤, 위와 같은 로그가 확인되면 원격 저장소에 인증 파일 생성이 완료되었습니다!!

fastlane 설정

match(type: "appstore")

lane 에서 빌드를 진행하기 전에 인증서 연결을 위해 위 코드를 입력해주게되면
이제 fastlane 에서 match 를 통해 자동으로 인증서를 연결해주어 사용자와 환경에 관계없이 개발 및 배포를 진행할 수 있습니다!

ex)

platform :ios do
  desc "Push a new beta build to TestFlight"
  lane :beta do
    match(type: "appstore")
    build_app(workspace: "[target project].xcworkspace", scheme: "[target scheme]")
    upload_to_testflight
  end
  
  ...

마무리

특히 iOS 에서는 인증서, 키, Xcode 등 개발과 직접적인 관계없는 부분에서 항상 부딪히는 부분이 많이 발생하는 것 같습니다..
그렇기에 여러 팀원들과 여러 개발환경에서 인증서 관리를 원격 저장소에서 쉽게 관리할 수 있는 match 를 사용해보니 엄청 간편함을 느낄 수 있었고, 또한 fastlane 의 활용 방향이 무궁무진하다라고 느꼈습니다.

틀린 정보 또는 궁금한 점이 있다면 댓글 부탁드립니다! 읽어주셔서 감사합니다‼️

0개의 댓글