목차

티스토리 뷰

728x90
반응형

 

안녕하세요 🐾 

제가 현재 다니는 회사에서는 앱 배포를 위한 내부 테스트 버전 관리도구로 Firebase Distribution을 사용하고 있습니다. 

앱 출시를 앞둔 날이면 QA 관련 이슈를 정신없이 처리하며 앱 출시 또한 빈번하게 일어나는데요.

 

마지막_최종 버전, 찐_마지막_최종 버전의 굴례를 돌며 앱을 배포하다보니 배포 자동화 툴의 필요성을 느꼈고,  Fastlane을 적용하고 커피 한 잔의 여유를 찾게 되었습니다. ☕️

 

휘발되기 직전인 iOS Fastlane 설정 관련 과정을 복기하기 위해 포스트를 작성하였습니다.

혹시나 틀린 곳이 있다면 알려주세요!

 


 

1. Setup

먼저 Fastlane 설치 전 프로젝트 디렉토리에서 터미널을 열어 아래의 명령어를 입력합니다.

xcode-select --install

fastlane은 엑스코드의 커맨드라인 툴을 이용합니다.

 

Fastlane 설치를 위해 아래의 명령어를 입력합니다.

# Using RubyGems
sudo gem install fastlane -NV

# Alternatively using Homebrew
brew install fastlane

 

fastlane 설치가 완료되었다면 관련 파일을 만들기 위해 아래의 명령어를 입력합니다.

fastlane init
1. 📸 Automate screenshots 
2. 👩‍✈️ Automate beta distribution to TestFlight 
3. 🚀 Automate App Store distribution 
4. 🛠 Manual setup - manually setup your project to automate your tasks

여러 자동화 옵션을 제공합니다. 3을 입력하여 배포 자동화 설정을 진행합니다.

Setup이 완료 되었다면 프로젝트 루트 디렉토리 내 fastlane 폴더로 이동하여 환경변수 설정을 시작해봅시다!

 

1.1 .env

fastlane에는 기본적으로 .env 를 쓸 수 있도록 라이브러리에 포함되어있습니다.

.env 를 이용해 아래의 정보를 환경변수로 관리하려 합니다. 환경변수로 관리할 경우 다수의 인원이 Fastlane을 사용할 때 

이 .env 파일만 찾아 본인의 정보에 맞게 바꾸어 주면 편리하겠죠?

APP_IDENTIFIER="[Your App Bundle Identifier]"
APPLE_ID="[Your Apple ID]"

// Firebase 앱 배포가 필요한 경우 아래의 정보까지 같이 입력
FIREBASE_APP_TOKEN="[Your Firebase App Token]"
FIREBASE_APP_ID="[Your Firebase App Id]"

- .env 파일이 보이지 않을 경우, CMD + SHIFT + . 키를 눌러 숨겨진 파일 표시

-  env 파일 내에 본인의 APPLE ID로 바꿔 넣어 환경 변수로 별도 관리

저와 같은 경우엔 Firebase Distribution을 통해 테스트 앱 배포환경도 필요하기 때문에 Firebase 관련 정보를 .env에 기입하였지만 필요하지 않을 경우엔 입력하지 않아도 됩니다.

❗  FIREBASE TOKEN, ID 얻기는 목차의 2. Setup - Firebase Distribution을 참고해주세요!

 

1.2 Appfile

디렉토리의 Appfile을 열어 .env에 기입한 정보를 연결해줍니다.

여기서 따옴표(") 안에 들어가는 변수 이름은 .env 파일에서 입력한 Key name과 같은 값입니다.

 

tic_team_id는 App Store Connect Team ID,

team_id엔 Developer Pertal Team ID 값을 찾아 넣어줍니다. 

app_identifier(ENV["APP_IDENTIFIER"]) # The bundle identifier of your app
apple_id(ENV["APPLE_ID"]) # Your Apple email address

itc_team_id("000000000") # App Store Connect Team ID
team_id("0000000000") # Developer Portal Team ID

# For more information about the Appfile, see:
#     https://docs.fastlane.tools/advanced/#appfile

메소드들의 인자를 env 환경 변수로 연결

 

1.3 Fastfile

앱스토어 쪽에 앱을 배포할건지, 테스트 앱을 배포할건지 등의 특정 작업에 대한 명령은 Fastfile에서 작성해야 합니다.

아래 파일 내 lane: [작업이름]으로 시작하여 do로 끝나는 블록 구조가 보이시나요?

해당 블록 구조 내에 순차적으로 필요한 작업을 명령어로 기입해 넣는 방식입니다.

추후 완성된 블록 구조를 실행 할 때엔 터미널에서 fastlane [작업이름]을 입력하여 해당 작업을 수행하게 됩니다.

 

여기서 Fastfile내에 ENV["환경변수"]로 입력된 부분은 위에 입력된 ./env 파일 내의 Key로 정의된 Value를 사용한다는 것을 의미합니다.

 

저와 같은 경우엔 Firebase Distribution을 통해 테스트 앱을 배포하고 사내 메신저로 Teams를 사용하기 때문에 앱 배포 후 팀즈로 배포 관련 메세지를 전송하는 부분까지 입력해놓았는데요.

이를 사용하지 않는 경우라면 lane: send_teams do ~ end , lane: distribute to ~ end 블록은 사용하지 않습니다.

# 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 # 앱스토어로 앱 배포
    get_certificates
    get_provisioning_profile
    # cocoapods(use_bundle_exec: false)
    build_app(workspace: "[APP_NAME].xcworkspace", scheme: "[APP_NAME]")
    upload_to_app_store
    version = get_version_number
    send_teams(method:"app-store")
  end

  lane :send_teams do |options| #앱 배포 후 팀즈로 배포 관련 메세지 전송
   version = get_version_number
   build = get_build_number

   case options[:method]
   when "ad-hoc"
     msg = "Firebase distribution - [APP_NAME]#{version}.#{build} 배포 완료되었습니다."
   when "app-store"
     msg = "AppStore - [APP_NAME] - #{version}.#{build} 업로드 완료되었습니다."
   end

   case options[:method]
   when "ad-hoc"
     titleMsg = "[iOS][AppDistrituion] App release complete for Version: Bello#{version}.#{build}"
   when "app-store"
     titleMsg = "[iOS][AppStore] App upload complete for Version: Bello#{version}.#{build}"
   end

   teams(
     title: titleMsg,
     message: msg,
     theme_color: "FFFF22",
      facts:[
       {
         "name"=>"Platform",
         "value"=>"iOS"
       },
       {
         "name"=>"Reporter",
         "value"=>ENV["APPLE_ID"]
       }
     ],
     teams_url: ENV["TEAMS_WEBHOOK_URL"]
   )
  end

  lane :distribute do #파이어베이스로 테스트 앱 배포
    version = get_version_number
    build = get_build_number
   
    build_app(workspace: "[APP_NAME].xcworkspace", scheme: "[APP_NAME]", export_method: "ad-hoc")
    
    firebase_app_distribution(
      app: ENV["FIREBASE_APP_ID"],
      firebase_cli_token: ENV["FIREBASE_APP_TOKEN"],
      testers: "[Your Email]",
      groups: "[Group Name]",
      release_notes: "App release complete for Version: #{version}.#{build}"
    )
    send_teams(method:"ad-hoc")
  end
end

get_certificates, get_provisioning_profile - 인증서, 프로비져닝 파일 가져오는 메소드입니다cocoapods(use_bundle_exec: false) - 빌드 전 pod install을 해주도록 했습니다.(현재 비활성 상태)
build_app(workspace: "[APP_NAME].xcworkspace", scheme: "[APP_NAME]") - 앱을 빌드하는 메소드 입니다.
upload_to_app_store(skip_metadata: true, skip_screenshots: true) - 빌드가 성공하면, 앱스토어에 업로드하는 메소드 입니다.
send_teams(method:"ad-hoc" or "app-store") - 배포 후 Webhook URL을 가진 특정 Teams 채널에 메세지를 전송합니다.

 


2. Setup - Firebase Distribution

이미 연동된 프로젝트에 새 머신에서 플러그인을 설치하려고 할 경우에, Firebase Distribution 플러그인이 깔려 있으므로, 아래 커맨드로 새 머신에서 플러그인을 설치합니다.

fastlane install_plugins

 

만약 처음부터 설정을 원하시는 경우엔 아래의 과정을 진행해야 합니다. iOS 프로젝트의 루트에서 다음 명령어를 실행합니다.

fastlane add_plugin firebase_app_distribution

fastlane add_plugin firebase_app_distribution

명령어 실행 이후 path 설정에 관해 물어보면 y를 입력합니다.

설치 진행이 되지 않을 경우 링크 참고

 

설치 이후 Firebase 인증이 필요한데, 터미널을 이용한 플러그인 로그인 방법을 수행하였습니다.

bundle exec fastlane run firebase_app_distribution_login

이 명령어는 인증 링크를 출력합니다.

출력 된 링크를 브라우저에서 열고 Google 계정에 로그인 한 뒤 결과 코드를 복사하여 터미널 명령 줄에 붙여넣습니다.

 

추후에 빌드 자동화 진행에서 위의 재인증 과정을 생략하기 아래의 과정을 통해 갱신 토큰을 환경 변수에 저장하여야 합니다.

$ curl -sL firebase.tools | bash 

Install firebase tools

 

$ firebase login:ci 

In this step you can getting `FIREBASE_APP_TOKEN`

출력받은 FIREBASE_APP_TOKEN을 .env 파일에 입력

※ 작성된 Fastfile 내 lane: distribute do 블록 참고하시면 됩니다.


3. Setup - Teams

앱 배포후 Teams를 통해 배포 관련 작업에 대한 알림 메세지를 보내고 싶을 경우 이 작업을 수행합니다.

이미 연동된 프로젝트에 새 머신에서 플러그인을 설치하려고 할 경우에, Firebase Distribution 플러그인이 깔려 있으므로, 아래 커맨드로 새 머신에서는 받아옵니다.

이전 목차인 Setup - Firebase Distribution 에서 아래의 명령을 수행하였을 경우 Setup - Teams 작업은 생략됩니다.

fastlane install_plugins

이미 설정된 Fastlane에 install_plugins를 진행하는 것이 아니라, 만약 처음부터 설정을 원하시는 경우엔 아래의 과정을 진행해야 합니다. iOS 프로젝트의 루트에서 다음 명령어를 실행합니다.

 

Install teams plugin

설치 완료 이후 작성된 Fastfile 내 lane :send_teams do |options| 블록 참고하시면 돕니다.

 

아래의 코드로 플러그인에 대한 테스트를 진행할 수 있습니다.

rake

테스트와 코드 스타일 유효성 검사를 모두 실행

 

rubocop -a

스타일 문제를 자동으로 수정

 


4. Execution

모든 Setup이 완료되었다면, 프로젝트의 루트 디렉토리에서 터미널로 아래의 명령을 통해 앱배포를 수행합니다.

// 앱스토어 앱 배포
fastlane release

// 파이어베이스 앱 배포
fastlane distribute

 

5. 참고

반응형
댓글
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함