[Flutter] GitHub Actions과 Fastlane을 사용하여 Flutter 앱 배포하기

2022-11-27 hit count image

Fastlane이 구성된 Flutter 프로젝트를 GitHub Actions를 사용하여 배포하는 방법에 대해서 알아보도록 하겠습니다.

개요

이전 블로그 포스트에서 GitHub Actions를 사용하여 Flutter 프로젝트의 코드를 정적 분석하고, 테스트 코드를 실행하는 방법에 대해서 알아보았습니다.

또한, Flutter 프로젝트에 Fastlane을 구성하여 Flutter 앱을 안드로이드와 iOS의 앱 스토어에 자동으로 배포하는 방법에 대해서도 알아보았습니다.

이번 블로그 포스트에서는 GitHub Actions에서 Fastlane을 실행하여 Flutter로 개발한 앱을 배포하는 방법에 대해서 알아보도록 하겠습니다.

배포를 위한 GitHub Actions 파일

Flutter로 개발한 앱을 iOS와 안드로이드의 앱 스토어에 배포하기 위해 GitHub Actions 파일을 생성해 봅시다. GitHub Actions 파일을 만들기 위해 Flutter 프로젝트 폴더안에 ./.github/workflows/main.yml 파일을 생성하고 다음과 같이 수정합니다.

name: Deploy iOS and Android App to App Store and Play Store
on:
  push:
    tags:
      - 'v*'

GitHub Actions은 Git의 태그에 v로 시작하는 태그(v1.2.3)가 추가되었을 때, 실행되도록 설정하였습니다.

이제 iOSAndroid를 위한 GitHub Actions를 추가하여 Flutter로 개발한 앱을 배포하는 방법에 대해서 알아봅시다.

iOS를 위한 Fastlane을 실행하는 GitHub Actions

Flutter 앱을 iOS의 앱 스토어에 배포하기 위해 구성한 FastlaneGitHub Actions를 사용하여 배포하기 위해 GitHub Actions를 만들어 봅시다. ./.github/workflows/main.yml 파일을 열고 다음과 같이 수정합니다.

name: Deploy iOS and Android App to App Store and Play Store
on:
  ...
jobs:
  release-ios:
    name: Build and release iOS app
    runs-on: macos-latest
    steps:
      - uses: maxim-lobanov/[email protected]
        with:
          xcode-version: latest-stable
      - uses: actions/[email protected]
      - uses: subosito/[email protected]
        with:
          flutter-version: '3.3.8'
      - uses: ruby/[email protected]
        with:
          ruby-version: '3.1.2'
      - name: Install Fastlane
        run: cd ios && bundle install && cd ..
      - name: Install packages
        run: flutter pub get
      - name: Install pods
        run: cd ios && pod install && cd ..
      - name: Prebuild
        run: flutter build ios --release --no-codesign
      - name: Execute Fastlane command
        run: cd ios && fastlane release type:github
        timeout-minutes: 40

이렇게 생성한 GitHub Actions를 좀 더 자세히 살펴보도록 합시다.

...
jobs:
  release-ios:
    name: Build and release iOS app
    runs-on: macos-latest
    ...

GitHub Actions은 최신 macOS(macos-lates) 위에서 실행됩니다.

...
jobs:
  release-ios:
    ...
    steps:
      - uses: maxim-lobanov/[email protected]
        with:
          xcode-version: latest-stable
    ...

이후, Flutter 프로젝트의 iOS 앱을 빌드하고 배포하기 위해 XCode를 설치합니다.

...
jobs:
  release-ios:
    ...
    steps:
      ...
      - uses: actions/[email protected]
      - uses: subosito/[email protected]
        with:
          flutter-version: '3.3.8'
      ...

그런 다음, 코드를 가져오기 위한 checkout과 Flutter 프로젝트를 빌드하기 위해 Flutter를 설치합니다.

...
jobs:
  release-ios:
    ...
    steps:
      ...
      - uses: ruby/[email protected]
        with:
          ruby-version: '3.1.2'
      - name: Install Fastlane
        run: cd ios && bundle install && cd ..
      ...

Fastlane은 Ruby로 개발되었으므로, Fastlane을 설치하고 실행하기 위해서는 Ruby를 설치할 필요가 있습니다. 이렇게 설치한 Ruby를 사용하여 Fastlane과 필요한 라이브러리를 설치합니다.

...
jobs:
  release-ios:
    ...
    steps:
      ...
      - name: Install packages
        run: flutter pub get
      - name: Install pods
        run: cd ios && pod install && cd ..
      ...

이제 Flutter 프로젝트를 빌드하기 위해 필요한 라이브러리를 설치하고, iOS용 라이브러리도 함께 설치해 줍니다.

...
jobs:
  release-ios:
    ...
    steps:
      ...
      - name: Prebuild
        run: flutter build ios --release --no-codesign
      - name: Execute Fastlane command
        run: cd ios && fastlane release type:github
        timeout-minutes: 40

마지막으로, Flutter 명령어를 사용하여 Flutter 프로젝트의 iOS 앱을 배포용으로 빌드합니다. 그리고, Fastlane을 사용하여 앱을 배포합니다.

Fastlane을 사용하여 앱을 배포할 때, 많은 시간이 소요됩니다. 저는 무료로 사용할 수 있는 GitHub Actions 시간을 최대 5번 사용할 수 있도록 보장하기 위해 타임 아웃을 40분으로 설정하였습니다.

안드로이드를 위한 Fastlane을 실행하는 GitHub Actions

Flutter 앱을 안드로이드의 구글 플레이에 배포하기 위해 구성한 FastlaneGitHub Actions를 사용하여 배포하기 위해 GitHub Actions를 만들어 봅시다. ./.github/workflows/main.yml 파일을 열고 다음과 같이 수정합니다.

name: Publish iOS and Android App to App Store and Play Store
...
jobs:
  release-ios:
    ...
  release-android:
    name: Build and release Android app
    runs-on: ubuntu-latest
    steps:
      - uses: actions/[email protected]
      - uses: actions/[email protected]
        with:
          distribution: 'zulu'
          java-version: '12.x'
      - uses: subosito/[email protected]
        with:
          flutter-version: '3.3.8'
      - uses: ruby/[email protected]
        with:
          ruby-version: '3.1.2'
      - name: Install Fastlane
        run: cd android && bundle install && cd ..
      - name: Install packages
        run: flutter pub get
      - name: Prebuild
        run: flutter build appbundle
      - name: Execute Fastlane command
        run: cd android && fastlane release

이렇게 생성한 GitHub Actions를 좀 더 자세히 살펴보도록 합시다.

...
jobs:
  release-ios:
    ...
  release-android:
    name: Build and release Android app
    runs-on: ubuntu-latest
    ...

GitHub Actions은 최신 ubuntu(ubuntu-lates) 위에서 실행됩니다.

...
jobs:
  release-ios:
    ...
  release-android:
    ...
    steps:
      - uses: actions/[email protected]
      - uses: actions/[email protected]
        with:
          distribution: 'zulu'
          java-version: '12.x'
      ...

그런 다음, 코드를 가져오기 위한 checkout과 Flutter 프로젝트의 안드로이드 앱을 빌드하기 위해 Java를 설치합니다.

...
jobs:
  release-ios:
    ...
  release-android:
    ...
    steps:
      ...
      - uses: subosito/[email protected]
        with:
          flutter-version: '3.3.8'
      ...

그런 다음 Flutter 프로젝트를 빌드를 위해 Flutter를 설치합니다.

...
jobs:
  release-ios:
    ...
  release-android:
    ...
    steps:
      ...
      - uses: ruby/[email protected]
        with:
          ruby-version: '3.1.2'
      - name: Install Fastlane
        run: cd android && bundle install && cd ..
      ...

Fastlane은 Ruby로 개발되었으므로, Fastlane을 설치하고 실행하기 위해서는 Ruby를 설치할 필요가 있습니다. 이렇게 설치한 Ruby를 사용하여 Fastlane과 필요한 라이브러리를 설치합니다.

...
jobs:
  release-ios:
    ...
  release-android:
    ...
    steps:
      ...
      - name: Install packages
        run: flutter pub get
      ...

이제 Flutter 프로젝트를 빌드하기 위해 필요한 라이브러리를 설치합니다.

...
jobs:
  release-ios:
    ...
  release-android:
    ...
    steps:
      ...
      - name: Prebuild
        run: flutter build appbundle
      - name: Execute Fastlane command
        run: cd android && fastlane release

마지막으로, Flutter 명령어를 사용하여 Flutter 프로젝트의 안드로이드 앱을 빌드합니다. 그리고, Fastlane을 사용하여 앱을 배포합니다.

전체 GitHub Actions 코드

지금까지 소개한 GitHub Actions 코드는 정리하면 다음과 같습니다. 이 GitHub Actions 코드를 사용하여 Flutter 앱 배포에 활용해 보시기 바랍니다.

name: Deploy iOS and Android App to App Store and Play Store
on:
  push:
    tags:
      - 'v*'
jobs:
  release-ios:
    name: Build and release iOS app
    runs-on: macos-latest
    steps:
      - uses: maxim-lobanov/[email protected]
        with:
          xcode-version: latest-stable
      - uses: actions/[email protected]
      - uses: subosito/[email protected]
        with:
          flutter-version: '3.3.8'
      - uses: ruby/[email protected]
        with:
          ruby-version: '3.1.2'
      - name: Install Fastlane
        run: cd ios && bundle install && cd ..
      - name: Install packages
        run: flutter pub get
      - name: Install pods
        run: cd ios && pod install && cd ..
      - name: Prebuild
        run: flutter build ios --release --no-codesign
      - name: Execute Fastlane command
        run: cd ios && fastlane release type:github
        timeout-minutes: 40
  release-android:
    name: Build and release Android app
    runs-on: ubuntu-latest
    steps:
      - uses: actions/[email protected]
      - uses: actions/[email protected]
        with:
          distribution: 'zulu'
          java-version: '12.x'
      - uses: subosito/[email protected]
        with:
          flutter-version: '3.3.8'
      - uses: ruby/[email protected]
        with:
          ruby-version: '3.1.2'
      - name: Install Fastlane
        run: cd android && bundle install && cd ..
      - name: Install packages
        run: flutter pub get
      - name: Prebuild
        run: flutter build appbundle
      - name: Execute Fastlane command
        run: cd android && fastlane release

실행

이렇게 생성한 GitHub Actions를 실행하기 위해서는 Git의 태그를 생성할 필요가 있습니다. 다음 명령어를 사용하여 Git의 태그를 생성합니다.

git tag -a v1.2.3 -m "release v1.2.3"

그리고 다음 명령어를 사용하여 생성한 태그를 GitHub에 푸시(Push)합니다.

git push origin v1.2.3

그럼 GitHubActions 탭에서 우리가 만든 GitHub Actions가 실행되는 것을 확인할 수 있습니다.

완료

이것으로 Fastlane으로 배포 자동화가 구현된 Flutter 프로젝트를 GitHub Actions를 사용하여 배포하는 방법에 대해서 알아보았습니다. 여러분도 FastlaneGitHub Actions를 사용하여 앱의 배포 자동화를 구현해 보시기 바랍니다.

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

앱 홍보

책 홍보

스무디 한 잔 마시며 끝내는 React Native 책을 출판한지 벌써 2년이 다되었네요.
이번에도 좋은 기회가 있어서 스무디 한 잔 마시며 끝내는 리액트 + TDD 책을 출판하게 되었습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.

스무디 한 잔 마시며 끝내는 React Native, 비제이퍼블릭
스무디 한 잔 마시며 끝내는 리액트 + TDD, 비제이퍼블릭
Posts