목차
개요
이전 블로그 포스트에서 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
)가 추가되었을 때, 실행되도록 설정하였습니다.
이제 iOS
와 Android
를 위한 GitHub Actions
를 추가하여 Flutter로 개발한 앱을 배포하는 방법에 대해서 알아봅시다.
iOS를 위한 Fastlane을 실행하는 GitHub Actions
Flutter 앱을 iOS의 앱 스토어에 배포하기 위해 구성한 Fastlane
을 GitHub 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/setup-xcode@v1
with:
xcode-version: latest-stable
- uses: actions/checkout@v3
- uses: subosito/[email protected]
with:
flutter-version: '3.3.8'
- uses: ruby/setup-ruby@v1
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/setup-xcode@v1
with:
xcode-version: latest-stable
...
이후, Flutter 프로젝트의 iOS 앱을 빌드하고 배포하기 위해 XCode
를 설치합니다.
...
jobs:
release-ios:
...
steps:
...
- uses: actions/checkout@v3
- uses: subosito/[email protected]
with:
flutter-version: '3.3.8'
...
그런 다음, 코드를 가져오기 위한 checkout
과 Flutter 프로젝트를 빌드하기 위해 Flutter
를 설치합니다.
...
jobs:
release-ios:
...
steps:
...
- uses: ruby/setup-ruby@v1
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 앱을 안드로이드의 구글 플레이에 배포하기 위해 구성한 Fastlane
을 GitHub 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/checkout@v3
- uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: '12.x'
- uses: subosito/[email protected]
with:
flutter-version: '3.3.8'
- uses: ruby/setup-ruby@v1
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/checkout@v3
- uses: actions/setup-java@v3
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/setup-ruby@v1
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/setup-xcode@v1
with:
xcode-version: latest-stable
- uses: actions/checkout@v3
- uses: subosito/[email protected]
with:
flutter-version: '3.3.8'
- uses: ruby/setup-ruby@v1
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/checkout@v3
- uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: '12.x'
- uses: subosito/[email protected]
with:
flutter-version: '3.3.8'
- uses: ruby/setup-ruby@v1
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
그럼 GitHub
의 Actions
탭에서 우리가 만든 GitHub Actions
가 실행되는 것을 확인할 수 있습니다.
완료
이것으로 Fastlane
으로 배포 자동화가 구현된 Flutter 프로젝트를 GitHub Actions
를 사용하여 배포하는 방법에 대해서 알아보았습니다. 여러분도 Fastlane
과 GitHub Actions
를 사용하여 앱의 배포 자동화를 구현해 보시기 바랍니다.
제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!
앱 홍보
Deku
가 개발한 앱을 한번 사용해보세요.Deku
가 개발한 앱은 Flutter로 개발되었습니다.관심있으신 분들은 앱을 다운로드하여 사용해 주시면 정말 감사하겠습니다.