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 생성
- Product → Scheme → Manage Schemes
- 기존 Scheme 복제
- 각 Flavor별 Scheme 생성 (dev, stg, prod)
Configuration 추가
- Project → Info → Configurations
- 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