flutter – flavor


Flavor란?

  • Flavor는 앱의 다양한 빌드 환경(development, staging, production 등)을 관리하기 위한 개념입니다.
  • 앱의 각 환경에 따라 서로 다른 설정 파일, 리소스, API 엔드포인트 등을 사용하여 다양한 버전을 쉽게 빌드할 수 있게 해줍니다.

왜 Flutter에서 Flavor를 사용하는가?

  • 환경별 설정 관리: 개발, 테스트, 프로덕션 환경에 따라 다른 설정(API, 아이콘, 리소스 등)을 쉽게 적용할 수 있습니다.
  • 효율적인 빌드 관리: 다양한 환경을 위한 별도의 빌드 구성을 통해 보다 체계적으로 앱을 관리할 수 있습니다.
  • 자동화: CI/CD 파이프라인에서 특정 Flavor를 빌드하도록 설정하여 환경별로 일관된 배포가 가능합니다.

Android Flavor 설정 방법

  • build.gradle 파일 수정
    • Android에서는 app/build.gradle 파일을 수정하여 Flavor를 설정합니다. 예를 들어, 개발용과 운영용 앱을 만들기 위해 다음과 같은 설정을 추가할 수 있습니다:
android {
    flavorDimensions "environment"
    productFlavors {
        development {
            dimension "environment"
            applicationIdSuffix ".dev"
            versionNameSuffix "-dev"
        }
        production {
            dimension "environment"
            applicationIdSuffix ".prod"
            versionNameSuffix "-prod"
        }
    }
}
  • applicationIdSuffix를 통해 각 Flavor마다 다른 앱 ID를 사용할 수 있어, 같은 기기에 서로 다른 환경의 앱을 동시에 설치할 수 있습니다.
  • versionNameSuffix는 앱의 버전 정보에 접미사를 추가하여 각 환경에 맞는 버전 이름을 제공합니다.

iOS Flavor 설정 방법

  1. Xcode 프로젝트에서 Scheme 추가: Xcode의 Runner 프로젝트에서 각 Flavor에 맞는 Scheme을 설정합니다. 예를 들어, Development, Staging, Production 스키마를 추가할 수 있습니다.
  2. Build Configuration 설정: 각 스키마에 맞는 Build Configuration을 생성합니다.
  3. Info.plist 파일 분리: 각 Flavor별로 Info.plist 파일을 분리하여 서로 다른 설정을 적용할 수 있습니다.

Project > Info 에서 Configurations을 설정합니다.

기본적으로 Debug, Release, Profile이 되어 있는데, 여기서 원하는대로 설정을 변경해주시면 됩니다.

적당한 configuration을 복사하고, 이름을 변경합니다.

설정에 따라 스키마를 만들어줍니다.

Xcode 상단에 프로젝트 이름 부분을 클릭하고 New Scheme를 선택해줍니다. 스키마 이름을 지정해주면, 새로운 스키마가 생성됩니다.

해당 스키마가 선택된 상태에서 Edit Scheme를 누르면 아래와 같이 뜨는데요,

Run, Test, Profile 등에서 스키마와 Build Configuration이 일치하도록 설정해줍니다. 나머지 스키마들에 대해서도 반복적으로 진행해줍니다.

Flavor별로 APK 빌드하기

Flutter CLI를 사용하여 Android의 특정 Flavor를 빌드할 수 있습니다. 이를 통해 각 환경에 맞는 APK를 생성할 수 있습니다.

flutter build apk --flavor development -t lib/main_dev.dart
flutter build apk --flavor production -t lib/main_prod.dart

이렇게 생성된 APK 파일은 각기 다른 환경에 맞게 구분됩니다.

위 명령어에서 -flavor 옵션을 통해 원하는 Flavor를 지정하고, t 옵션으로 해당 Flavor에 맞는 Dart 진입 파일을 지정합니다.