개인앱을 앱스토어에 빌드하고 아카이브 하는 과정이 너무 귀찮아서 배포를 자동화 할 수 있는 방법을 찾아보았음.
CI/CD 도구를 이용하면 배포 자동화를 쉽게 할 수 있는데 이 과정에 대해 단계별로 기록해봄.
다음글 🐥
[iOS] Fastlane + Github Action으로 CI / CD 구축하기(2) - Fastlane Match를 활용한 인증서 관리 및 Github Action 연동
[iOS] Fastlane CI / CD 구축 시 발생 오류 및 해결법
CI / CD란?
CI(Continuous Integration): 지속적인 통합
작업한 코드를 주기적으로 빌드하고 테스트해서 레포지토리에 통합하는 것을 말함
지속적 통합을 통해 개발 생산성을 높이고 코드 퀄리티를 향상시킬 수 있다.
CD(Continuous Delivery/Deployment): 지속적인 제공/배포를 말함
CI 단계에서 빌드되고 테스트된 후에, 배포 준비 상태가 되면 자동으로 배포까지 진행하는 것을 말함
지속적 제공에는 자동 배포기능이 없는 프로세스이며 지속적 배포는 자동 배포를 포함한다.
그래서 CI/CD 파이프라인이라는 건
개발자가 작은 단위의 기능으로 주기적으로 코드를 레포지토리 상에 머지하고
빌드와 테스트를 진행하며 배포 준비 상태를 만든 후, 배포를 하는 일련의 과정을 말한다.
그래서 왜 필요한가?
자동화를 통해서 코드 릴리즈 단축, 코드 오류 방지 등의 장점을 가지게 된다.
결과적으로 코드의 업데이트와 변경사항을 더 빠르게 통합할 수 있어 사용자에게 긍정적 경험을 가져다 주게 된다.
Github Action란?
CI/CD를 도입하고자 Github Action이라는 Github에서 제공하는 CI/CD 툴을 사용하기로 함.
다른 CI/CD 서비스로는 Jenkins, Bitrise 등이 있지만 개인앱에 적용하기에는 별도의 서버를 필요로 하거나 하는 등의 문제가 있어 Github Action을 사용하기로 함.
구성요소는 아래와 같음.
어떤 이벤트(이슈 생성, PR등)이 발생했을 때의 Workflow를 구성할 수 있음.
워크플로우는 하나 이상의 Job을 가지고 이 Job은 가상머신인 Runner에서 수행된다.
그리고 이 Job은 하위 작업은 Step을 가짐.
이 워크플로우는 yml 파일로 관리되는데 Github Repository 상의 Action에서 해당 워크플로우를 생성하고
어떤 이벤트에 어떤 동작을 할 것인지 작성함. 나는 버전에 대한 태그가 푸시되거나 release 브랜치에 푸시되었을 때 동작하도록 설정함.
위의 구성요소처럼 1) 이벤트를 설정하고 2) Job을 설정하고 3) 하위 Step을 설정해 놓은 것을 알 수 있음
on:
push:
branches: [ "release/**" ]
tags: ["v*.*.*"]
jobs:
build:
name: CI/CD By Using Fastlane
runs-on: macos-latest
steps:
- name: Select Xcode version
run: sudo xcode-select -s /Applications/Xcode_16.2.app
# Git Repository Checkout
- name: Checkout Repository
uses: actions/checkout@v3
Fastlane란?
배포를 자동화 하기 위한 iOS 빌드 툴이며 터미널을 통해서 구동할 수 있음.
iOS 배포과정은 아카이브(앱 아카이브) - 업로드(앱스토어 커넥트) - 배포 과정(테스트플라이트 또는 앱스토어)를 거침.
이 일련의 과정을 Fastlane을 통해 이룰 수 있음.
그러면 여기서 Fastlane만 쓰면 되지 왜 Github Action을 쓸까 생각이 들 수 있음.
Fastlane을 터미널로 구동할 수 있지만, 이런 터미널을 구동하는 부분까지 자동화하기 위해서 함께 사용함.
Fastlane은 스크린샷을 자동으로 찍어주기도 하고 슬랙으로 배포 과정을 공유할 수도 있는 여러 기능을 가지고 있음.
이 기능들은 위의 공식문서에서 많이 다루고 있으니 필요할 때 찾아보는 것이 좋을 것 같음.
Fastlane 설치 및 beta 실행
xcode-select --install // xcode command line tools 설치
brew install fastlane // fastlane 설치
프로젝트 폴더 이동
fastlane init
어떤 동작을 할지 입력
2. Automate beta distribution to TestFlight 선택
애플 ID 입력
Apple ID Username: { 입력값 }
앱 이름 입력
App Name: {입력값}
프로그램 설치 후 프로젝트 폴더에서 init을 하면 위의 입력값들을 물어보고, 이에 대해 답을 하면 됨.
이건 환경변수 세팅을 하지 않아서 앱스토어 커넥트에 인증을 할 수 없는 오류임.
애플 계정 사이트 로 가서 앱 암호를 설정한 후 복사해놓은 후(16자)
프로젝트 폴더/fastlane에 .env 파일을 생성 한 후 아래처럼 적어줌.
** 주의 .env 파일은 .gitignore에 표시가 필요함
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD="앱암호"
인증을 끝냈다면 fastlane beta 명령어로 테스트플라이트 업로드를 할 수 있음.
여기까지가 터미널을 통해서 Fastlane을 통해 테스트플라이트 배포하는 방법을 알아보았음.
Fastlane Match를 통해 인증서를 관리하는 부분과 Github Action을 함께 사용하는 부분은 조금 까다롭고 오류도 많이 겪었음..
다음 포스팅에 해당 부분을 다뤄보도록 하겠음
참고자료
https://www.redhat.com/ko/topics/devops/what-is-ci-cd
Fastlane + Github Action
https://jazz-the-it.tistory.com/53
Fastlane 앱스토어 인증 관련 오류 해결
https://jiwift.tistory.com/entry/iOS-fastlane-Unable-to-upload-archive-Failed-to-get-authorization-for-username-%EC%9D%B4%EB%A9%94%EC%9D%BC-and-password
'iOS > iOS 지식' 카테고리의 다른 글
[iOS] Fastlane CI/CD 구축 시 발생 오류 및 해결법 (0) | 2025.03.14 |
---|---|
[iOS] Fastlane + Github Action으로 CI/CD 구축하기(2) - Fastlane Match를 활용한 인증서 관리 및 Github Action 연동 (0) | 2025.03.13 |
Swift Concurrency(3) - Behind the scenes (0) | 2025.02.25 |
[iOS] Keychain으로 민감정보 저장하기 (2) | 2025.02.25 |
[iOS] StackView의 Distribution과 Alignment (0) | 2024.11.28 |