flavor 빌드 변형

topics 500-모바일개발 501 Flutter 507 빌드 & 배포
types 실습 레퍼런스
tags
references velog.io/@tygerhwang/FlutterIOSAndroi...

Flavor 빌드 변형

Flutter에서 개발/스테이징/프로덕션 환경을 분리하는 Flavor 설정 방법이다.

Why Flavor

개발, 테스트, 프로덕션 환경마다 다른 설정이 필요하다.

  • API 엔드포인트
  • Firebase 프로젝트
  • 앱 아이콘
  • 번들 ID / 패키지명
  • OAuth 키

왜 Flavor를 쓸까: 하나의 코드베이스로 여러 환경을 관리할 수 있다. 실수로 개발 중에 프로덕션 DB를 건드리는 일을 방지할 수 있어서 안전하다.

기본 설정

1. Dart 환경 변수 클래스

// lib/config/flavor_config.dart
enum Flavor { dev, stg, prod }

class FlavorConfig {
  final Flavor flavor;
  final String apiBaseUrl;
  final String appName;

  static late FlavorConfig _instance;
  static FlavorConfig get instance => _instance;

  FlavorConfig._({
    required this.flavor,
    required this.apiBaseUrl,
    required this.appName,
  });

  static void init(Flavor flavor) {
    _instance = switch (flavor) {
      Flavor.dev => FlavorConfig._(
          flavor: Flavor.dev,
          apiBaseUrl: 'https://dev-api.example.com',
          appName: 'MyApp DEV',
        ),
      Flavor.stg => FlavorConfig._(
          flavor: Flavor.stg,
          apiBaseUrl: 'https://stg-api.example.com',
          appName: 'MyApp STG',
        ),
      Flavor.prod => FlavorConfig._(
          flavor: Flavor.prod,
          apiBaseUrl: 'https://api.example.com',
          appName: 'MyApp',
        ),
    };
  }
}

2. 엔트리 포인트 분리

// lib/main_dev.dart
void main() {
  FlavorConfig.init(Flavor.dev);
  runApp(MyApp());
}

// lib/main_prod.dart
void main() {
  FlavorConfig.init(Flavor.prod);
  runApp(MyApp());
}

Android 설정

build.gradle

// android/app/build.gradle
android {
    flavorDimensions "default"

    productFlavors {
        dev {
            dimension "default"
            applicationIdSuffix ".dev"
            versionNameSuffix "-dev"
        }
        stg {
            dimension "default"
            applicationIdSuffix ".stg"
            versionNameSuffix "-stg"
        }
        prod {
            dimension "default"
        }
    }
}

iOS 설정

Xcode에서 Scheme 생성

  1. Product → Scheme → Manage Schemes
  2. 기존 Scheme 복제
  3. 각 Flavor별 Scheme 생성 (dev, stg, prod)

Configuration 추가

  1. Project → Info → Configurations
  2. Debug, Release 각각에 대해 Flavor별 Configuration 추가
    • Debug-dev, Debug-stg, Debug-prod
    • Release-dev, Release-stg, Release-prod

빌드 및 실행

# <span id="개발-환경-실행"></span>개발 환경 실행
flutter run --flavor dev -t lib/main_dev.dart

# <span id="프로덕션-빌드"></span>프로덕션 빌드
flutter build apk --flavor prod -t lib/main_prod.dart
flutter build ios --flavor prod -t lib/main_prod.dart

관련 문서