[Flutter] Flavor

찐흙덩어리·2024년 6월 5일

Flavor란?

빌드 변형을 통해 다른 환경의 앱을 만드는 것.

예를들어 이런 경우에 사용할 수 있다.

  • prod/dev
  • 무료/유료
  • UI만 변경하여 다양한 앱의 출시가 필요할 때

환경 설정을 직접할 수 있지만, 제대로 학습이 된 경우가 아니라면 시간이 오래 소요될 수 있으므로 패키지 사용도 유용하다.

만약, 직접 설정하고 싶은 경우에는 Flutter 공식문서를 통해 참조.
https://docs.flutter.dev/deployment/flavors

Flavor 패키지는 주로 2가지가 사용되는데,
1. flutter_flavor
2. flutter_flavorizr

1번의 경우 현재 Android만 지원이 되고 있다.
IOS까지 출시를 해야 한다면 flutter_flavorizr를 사용해야 한다.

flutter_flavorizr

https://pub.dev/packages/flutter_flavorizr

해당 패키지를 사용하기 위해선 전제조건이 있다. (IOS, macOS 프로젝트 사용의 경우)

참고사항:

  • 일부 프로세서는 일부 기존 파일과 특정 기본 구조를 참조하므로 깨끗한 Flutter 프로젝트에서 사용하길 권장
  • 즉, 프로젝트를 생성하고 초기에 환경설정을 하라는 뜻이다.

전제조건

  1. Flutter Flavorizr를 실행하기 전 다음과 같은 소프트웨어를 설치해야 한다.
  • Ruby (루비)
  • Gem (보석)
  • Xcodeproj
  1. ios/macOS 하위에 Podfile이 있는지 확인

이 패키지는 Flutter 프로젝트 개발을 지원하기 위한 것이므로
dev_dependencies에 추가를 해줘야 한다.

pubspec.yaml에 flavor 정의를 할 수도 있고, 별도의 flavorizr.yaml 파일을 프로젝트 루트 하위에 생성하여 정의할 수 있다.

pubspec.yaml 파일에 정의하는 방식은 >=3.0.0 부터 폐지된다.

나는 관리의 편의성을 위해 별도의 yaml파일을 생성했다.
공식문서에도 나와있지만 예제는 이렇다.

flavors:
 apple:
   app:
     name: "Apple App"

   android:
     applicationId: "com.example.apple"  
   ios:
     bundleId: "com.example.apple"
   macos:
     bundleId: "com.example.apple"  
 banana:
   app:
     name: "Banana App"
 
   android:
     applicationId: "com.example.banana"
   ios:
     bundleId: "com.example.banana"
   macos:
     bundleId: "com.example.banana"

추가적인 옵션값들은 너무 많으므로 공식문서를 참조한다.

구정 정의를 모두 맞췄으면 스크립트를 실행하여 적용을 진행한다. (fvm 사용의 경우 스크립트 앞 fvm 명시)

flutter pub run flutter_flavorizr

해당 스크립트를 실행하면 적용에 필요한 모든 프로세서들이 추가되는데,
상황에 따라 불필요한 경우가 있다.

그런 경우에는 사용자 정의 프로세서로 실행할 수 있다.

// 형식
flutter pub run flutter_flavorizr -p <processor_1>,<processor_2>

// 예
flutter pub run flutter_flavorizr -p assets:download
flutter pub run flutter_flavorizr -p assets:download,assets:extract

이제 flavor가 생성되었다면 빌드를 해봐야 한다.
flvor가 생성되었다면 각 main_${flavor}.dart 파일이 생성되었을 것이다.

그냥 실행하면 안 되고 해당 build target을 정해줘야 한다.

명령어로 실행하는 경우

// 형식
flutter run --flavor <flavorName> -t lib/main_<flavorName>.dart

// 예
flutter run --flavor apple -t lib/main_apple.dart
flutter run --flavor banana -t lib/main_banana.dart

IDE로 빌드하는 경우

  • Run/Debug Configurations
  • Dart entrypoint : 해당 main_${flavor}.dart 경로 설정
  • Additional run args: --flavor 브랜드명 또는 Build flavor: 브랜드명
  • 실행
profile
메모장용

0개의 댓글