뒤로가기

Common

Fastlane을 이용한 앱 자동 배포

선요한 2022.08.23.

Fastlane이란

Fastlane은 ruby 기반 클라이언트 자동 빌드 오픈소스 라이브러리로 Android, iOS, 크로스플랫폼 클라이언트의 배포 과정에서 필요한 모든 지루한 일(인증서 관리, 스크린샷 생성, 테스트, 배포 등)들을 자동화시켜주는 도구입니다.

Fastlane에서 지원하는 기능은 크게 4가지가 있습니다.

  • 앱 서명/인증서 관리 (Code Signing) - iOS의 경우
  • 스크린샷 자동화 (Screenshots)
  • 배포 자동화 (Beta)
  • 앱스토어 배포 자동화 (PlayStore/AppStore)

Fastlane 설치

iOS

  • Fastlane을 위한 Xcode 커맨드라인 툴을 설치합니다

    xcode-select --install
    
  • fastlane을 설치합니다

    brew install fastlane
    

Android

  • fastlane을 설치합니다

    sudo gem install fastlane
    

Fastlane 환경 설정

설치 이후 설정하는 부분은 OS와 상관없이 동일하게 프로젝트 경로에서 진행합니다. Flutter의 경우 iOS는 [프로젝트]/ios 폴더, Android는 [프로젝트]/android 폴더에서 다음 명령어를 입력합니다. iOS와 Android가 크게 다르지 않기 때문에 iOS 기준으로 설명하겠습니다.

fastlane init

image

Fastlane을 어떤 목적으로 사용할지 묻는 질문에는 목적에 따라 번호를 누르면 되지만 이번 글에서는 4번의 수동 방법을 선택하여 Firebase에 업로드하는걸 정리해보도록 하겠습니다.

image

fastlane init 단계에서 앱의 id, 개발자 정보 등의 정보를 입력하고 나면 해당 프로젝트 내에 fastlane 폴더가 생기게 됩니다. fastlane폴더 내에는 Appfile, Fastfile등이 들어있습니다.

  • Appfile은 앱의 ID, (iOS의 경우 apple id, team id 등) 배포시 필요한 환경에 대한 정보를 보관하는 파일로 fastlane은 매번 실행될때마다 Appfile에 기입된 내용을 보고 환경을 세팅하게 됩니다.
  • Fastfile은 fastlane을 통해 어떤 작업을 할지 ‘lane’을 정의하는 파일이고 각 lane은 해당 lane이 어떤 ‘action’ 을 할지 정의하는 것으로 구성되어 있습니다.
  • Matchfile은 원격 저장소에서 모든 인증서를 관리하려고자 할때 인증서의 종류와 원격저장소의 주소등을 입력하는 파일입니다. Fastlane의 match 기능을 사용하는 경우 생성됩니다.
  • Pluginfile은 fastlane의 모든 플러그인을 관리하는 파일입니다.
  • 쏙 앱의 경우 ios_build_and_upload 라는 lane에 build_app()firebase_app_distribution() 이라는 fastlane이 제공하는 action을 사용하여 iOS 앱을 빌드하고 firebase에 배포하도록 설정하였습니다. Fastlane이 제공하는 action들은 여기에서 확인할 수 있습니다.

쏙앱의 iOS Fastlane 구성

default_platform(:ios)

platform :ios do
  desc "iOS build"
    lane :ios_build_and_upload do
        build_app(
            scheme: "Runner",
            archive_path: "./build/Runner.xcarchive",
            export_method: "ad-hoc",
            output_directory: "./build/Runner"
        ) // 앱을 빌드
        firebase_app_distribution(
            app: "앱 아이디",
            groups: "iOS",
            firebase_cli_token: "Firebase 토큰",
            ipa_path: "./build/Runner/Runner.ipa",
            release_notes_file: "../release_notes.txt"
        ) // firebase에 배포
    end
end

Fastlane 사용 방법

fastlane이 속해있는 프로젝트 디렉토리에서 fastlane [정의한 lane 이름] 으로 fastlane을 실행합니다.

fastlane ios_build_and_upload   

결과

image

image

build_app()firebase_app_distribution() 모두 정상적으로 실행된 것을 확인할 수 있습니다.

정리

Fastlane을 통해 앱의 배포를 자동화하는 방법을 알아보았습니다. Fastlane은 버전번호, 빌드번호, 인증서 관리등 다양한 기능이 있기 때문에 필요에 따라 적절하게 사용하면 매우 유용한 도구라고 생각합니다. 앱의 배포 과정이 적게는 20분 많게는 1시간까지도 걸리는 작업이 될 수 있기 때문에 조금의 시간을 투자하여 자동화를 구축해놓으면 앱의 개발 과정동안 많은 시간을 아낄 수 있을 것 같습니다.

참고 자료