빌드 변형을 통해 다른 환경의 앱을 만드는 것.
예를들어 이런 경우에 사용할 수 있다.
- prod/dev
- 무료/유료
- UI만 변경하여 다양한 앱의 출시가 필요할 때
환경 설정을 직접할 수 있지만, 제대로 학습이 된 경우가 아니라면 시간이 오래 소요될 수 있으므로 패키지 사용도 유용하다.
만약, 직접 설정하고 싶은 경우에는 Flutter 공식문서를 통해 참조.
https://docs.flutter.dev/deployment/flavors
Flavor 패키지는 주로 2가지가 사용되는데,
1. flutter_flavor
2. flutter_flavorizr
1번의 경우 현재 Android만 지원이 되고 있다.
IOS까지 출시를 해야 한다면 flutter_flavorizr를 사용해야 한다.
https://pub.dev/packages/flutter_flavorizr
해당 패키지를 사용하기 위해선 전제조건이 있다. (IOS, macOS 프로젝트 사용의 경우)
참고사항:
- 일부 프로세서는 일부 기존 파일과 특정 기본 구조를 참조하므로 깨끗한 Flutter 프로젝트에서 사용하길 권장
- 즉, 프로젝트를 생성하고 초기에 환경설정을 하라는 뜻이다.
- Flutter Flavorizr를 실행하기 전 다음과 같은 소프트웨어를 설치해야 한다.
- Ruby (루비)
- Gem (보석)
- Xcodeproj
- ios/macOS 하위에 Podfile이 있는지 확인
- "파일 목록의 내용을 로드할 수 없습니다."라는 에러가 발생할 수 있음
- https://github.com/AngeloAvv/flutter_flavorizr/blob/master/doc/troubleshooting/unable-to-load-contents-of-file-list/README.md
이 패키지는 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: 브랜드명
- 실행