아요 개발 일기

[iOS] Fastlane - AppStoreConnect 자동 배포 설정하기 본문

iOS

[iOS] Fastlane - AppStoreConnect 자동 배포 설정하기

김망복 2023. 10. 26. 11:52
반응형

안녕하세여'-'

오늘은 fastlane을 설정해보겠습니다!

fastlane은 앱의 베타 배포 및 릴리스를 자동화시켜주는 프로그램입니다

 

일반적으로 배포를 할때에는

Xcode -> Archive -> Xcode Upload -> AppStoreConnect Metadata 정보 업데이트 ... 등

여러가지 작업이 필요한데,

이 긴 작업을 간단하게 코드 한 줄로 배포할 수 있도록 해줍니다

 

아주아주 간편하겠죠???

같이 설정해봅시다!

 

자세한 설명은 아래 공식 사이트를 참고해주세요 :)

https://docs.fastlane.tools/getting-started/ios/setup/

 


 

Fastlane 설치

Fastlane을 설치하는 방법은 다양하게 있어요!

가장 선호되는 방법은 Bundler을 통한 방법이고,

macOS의 경우 Homebre를 통해서도 설치가 가능합니다!

 

! macOS의 시스템 Ruby를 사용할 수도 있지만, 종속성을 관리하기 어렵고 충돌을 일으킬 수 있으므로 권장하지 않습니다 !

 

Bundle

bundler와 Gemfile을 이용해서 fastlane 의존성 관리를 합니다

 

우선 bundler을 설치에 주어야 겠죠??

bundler은

최신버전의 Ruby를 다운 받은 후에 설치해주어야 오류가 없이 잘 설치 됩니다! 

 

그렇다면.. 먼저 최신 버전의 Ruby를 Homebrew를 이용해 받아주도록하겠습니다

아래 코드를 순차적으로 입력해줍니다

 

brew update // brew 업데이트
brew install rbenv ruby-build // rbenv 설치
rbenv versions // rbenv가 잘 설치 되었는지 확인

 

 

 

위 이미지처럼 잘 다운 되었는지 확인한 후,

최신 버전을 선택하여 다운 받아주겠습니다!!

이번에도 아래코드를 순차적으로 따라해주세요 :)

 

rbenv install -l // Ruby 버전 번호 확인
rbenv install 3.2.2 // 최신 버전 설치(2023.10.25 기준)
rbenv versions // 버전 확인

 

 

짠! 버전을 확인해보면 아래에 3.2.2라고 잘 뜨죠??ㅎㅎ

 

rbenv global 3.2.2

 

Ruby 글로벌 버전을 3.2.2로 변경해줍니다.

 

글로벌 버전으로 변경하는 이유는 다양한데요!

 

Fastlane의 호환성과 안정성을 보장하고, 일관된 개발 환경을 유지,

CI/ CD 환경에서 Ruby 버전에 의존하는 경우, 글로벌로 버전을 설정해두면

모든 빌드(프로젝트)가 동일한 환경에서 안정적으로 실행할 수 있다고 해요!

 

 

마지막으로 아래 명령어를 통해 내부 쉘 설정파일을 열어주고,

설정 코드를 작성해줍니다.

 

 vim ~/.zshrc  

 

 

export PATH=/opt/homebrew/bin:$PATH

 

 

 

/opt/homebrew/bin을 현재 PATH 변수의 맨 앞에 추가하여

Homebrew로 설치된 프로그램들이 다른 경로보다 우선적으로 실행되도록 합니다.

 

Homebrew로 설치한 최신, 안정적인 프로그램들을 우선적으로 실행하면

개발 환경을 최신 상태 유지 및 사용자 정의 버전의 프로그램을 손쉽게 사용할 수 있습니다

 

 

[[ -d ~/.rbenv  ]] && \ # ~/.rbenv 디렉터리가 존재하는지 확인(~d)하는 조건문
  export PATH=${HOME}/.rbenv/bin:${PATH} && \ # '~/.rbenv/bin 경로를 PATH 변수의 맨 앞에 추가 (터미널에서 rebenv 명령어 바로 사용 가능)
  eval "$(rbenv init -)" # rbenv가 터미널에서 올바르게 작동하도록 설정 (터미널에서 rbenv을 사용하여 Ruby 버전을 선택하거나 변경할 수 있음)

 

 

 

 

전체 코드 

export PATH=/opt/homebrew/bin:$PATH
[[ -d ~/.rbenv  ]] && \
  export PATH=${HOME}/.rbenv/bin:${PATH} && \
  eval "$(rbenv init -)"

 

 

ESC -> :wq 를 눌러주면 저장끝!

이제 아래에 적힌 코드를 이용하여

해당 소스코드를 실행/ 적용해주면 Ruby 설정은 완료됩니다!

 

source ~/.zshrc

 

이제 bundler을 설치해볼까요!?!

 

gem install bundler

 

 

짜란 bundler가 잘 설치된 것을 볼 수 있습니다!

 

 

Fastlane 설치

 

프로젝트 폴더 내부 ./Gemfile 파일에 아래 내용을 입력해줍니다

(저는 입력되어있었어요 ㅎㅎ)

 

source "https://rubygems.org"

gem "fastlane"

 

저장해준 후 bundle update를 실행하고

./Gemfile과 ./Gemfile.lock 파일을 버전 컨트롤에 추가해줍니다

 

이제 본격적으로 Fastlane을 설정해보려고 하는데

CI나 처음 fastlane을 돌리는 경우에는 먼저 bundle install을 실행해주세요 ㅎㅎ

 

 

Fastlane 설정

아래 코드를 입력해서 fastlane을 설정해봅시다

 

fastlane init

 

1. Fastlane 사용 목적 선택

이미지 아래 부분 보면 fastlane 사용 목적을 물어보죠??

원하시는 사용 목적의 번호를 입력해줍니다!!

저는 앱 배포가 목적이라 3번을 선택했습니다ㅎㅎ

 

 

2. Apple 로그인/ 비번/ 이중인증

 

3. Metadata 관리를 fastlane을 이용할것이냐?

y를 눌러서 쭉 진행합시다!!

 

 

 

중간중간 Enter를 눌러주면서 진행하면

설정 완료!!!

 

후하.. 얼마 안 남았습니다

 

Fastfile에 Lane 추가

 

프로젝트 내부파일을 보면 fastlane이 생겼을텐데,

해당 파일을 타고 들어가면 Fastfile이 있습니다!

이 부분을 수정해주면됩니다!

 

제가 작성한 코드를 같이 봅시다ㅎㅎ

 

release 버전 업데이트

  desc "Push a new release build to the App Store" # release lane에 대한 설명 정의
  lane :release do # lane(release) 이름 정의
    increment_build_number(xcodeproj: "프로젝트명.xcodeproj") # 빌드 넘버 1 증가
    build_app(scheme: "프로젝트명") # 앱 빌드

    upload_to_app_store( # App Store에 업로드
      force: true, # HTML 보고서 검증을 건너뛰고, 강제로 업로드를 진행
      skip_metadata: true, # 앱 메타데이터(앱 설명, 키워드 등)를 업로드하지 않도록 설정
      skip_screenshots: true, # 앱 스크린샷을 업로드하지 않도록 설정
    )

 


upload_to_app_store에 포함되어있는

매개변수에 관련 정보는 아래 홈페이지 하단에 자세히 설명되어있습니다!

참고해주세용

https://docs.fastlane.tools/actions/upload_to_app_store

 

upload_to_app_store - fastlane docs

<!-- This file is auto-generated and will be re-generated every time the docs are updated. To modify it, go to its source at https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/actions/upload_to_app_store.rb --> upload_to_app_store Uploa

docs.fastlane.tools


 

api_key 구성

  api_key = app_store_connect_api_key(
    key_id: "-", # Apple Developer 계정에서 생성한 개별 API 키의 고유 ID
    issuer_id: "-", # 팀 키의 ID
    key_filepath: "-", # 다운로드한 .p8 파일 경로
    duration: 500, # 토큰의 유효 기간 (maximum 1200)
    in_house: false # Enterprise 계정을 사용하는 경우 true로 설정
  )
  pilot(api_key: api_key) # 생성된 API 키 객체를 사용해 TestFlight에 앱을 업로드하거나 관리
  end

 

key_id 찾는 법

 

issure ID 찾는법

 

 

.p8 파일 다운로드 받는 법

 

자세한 설명은 아래 링크를 참고해주세요!

https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file

 

Using App Store Connect API - fastlane docs

App Store Connect API Introduction The App Store Connect API (which Apple announced at WWDC18 and is continuously working on) is an official public API used to manage app metadata, pricing and availability, provisioning, and more. This API follows the JSON

docs.fastlane.tools

 

 

 

beta 버전 업데이트

  desc "Push a new beta build to TestFlight"
  lane :beta do # beta라는 lane 이름 정의
    increment_build_number(xcodeproj: "프로젝트명.xcodeproj") # build 번호 1 증가
    build_app(scheme: "프로젝트명.xcodeproj") # 앱 빌드
    upload_to_testflight(skip_submission: true, skip_waiting_for_build_processing: true) # testflight에 업데이트 / skip_submission: true: 업로드된 빌드를 자동으로 제출하지 않음. skip_waiting_for_build_processing: true: 빌드가 처리될 때까지 기다리지 않고 다음 작업으로 즉시 넘어감. 
  end

 

전체 코드

# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
#     https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
#     https://docs.fastlane.tools/plugins/available-plugins
#

# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane

default_platform(:ios)

platform :ios do
  desc "Push a new release build to the App Store"
  lane :release do
    increment_build_number(xcodeproj: "프로젝트명.xcodeproj")
    build_app(scheme: "프로젝트명")

    upload_to_app_store(
      force: true, # Skip HTMl report verification
      skip_metadata: true,
      skip_screenshots: true,
    )

  api_key = app_store_connect_api_key(
    key_id: "key_id값",
    issuer_id: "issuer_id값",
    key_filepath: "-",
    duration: 500,
    in_house: false
  )

  pilot(api_key: api_key)
  end

  desc "Push a new beta build to TestFlight"
  lane :beta do
    increment_build_number(xcodeproj: "프로젝트명.xcodeproj")
    build_app(scheme: "프로젝트명.xcodeproj")
    upload_to_testflight(skip_submission: true, skip_waiting_for_build_processing: true)
    
  end
end

 

위의 코드를 Fastlane에 입력해주고 저장해줍니다 (command + s)

lane에 대해서는 Fastlane Lane에서 자세하게 다루도록하겠습니다!!

 

드디어!! 이제 배포해봅시다!!

 

 

배포하기

 

아래 명령어를 입력해줍니다

 

bundel exec fastlane + platform + lane 이름

or

fastlane ios

 

bundle exec fastlane ios release

 

잘 진행되는걸 확인해줍니다!

 

이때!! 갑자기 Applecation-specific Password를 물어보는데..

어디서 알 수 있느냐?!!

 

우선 https://appleid.apple.com/account/manage 에 접속해줍니다

 

앱 암호에 들어가줍니다!

Gernerate an app-specific password 클릭!

 

암호 이름을 자유롭게 적어줍니다!

생성을 눌러주면 앱 암호가 뜨면서 완료!!

이 암호를 복사해서 입력해줍니다!

 

배포 완료  🎉

 

 

정말 고생하셨습니다!!!

틀린부분이나 수정할 부분이 있으면 댓글 달아주시면 반영하겠습니다!

감사합니다 ㅎㅎ

 

GitHub Action과 연결하기

Slack으로 TestFlight 알림보내기

 

반응형