# Build 및 Flavor 세팅
# 목표
- Dev 환경과 Prod 환경을 분리하여 환경 변수나 패키지 이름 등을 Flavor에 맞게 자동으로 설정 후 빌드
# 용어 정리
- Debug : 핫 리로드가 가능하고 에뮬레이터에서 실행 가능한 빌드 모드
- Release : 실제 기기에서만 실행 가능하고 스토어 게시용 빌드 모드
- Dev : 개발 서버 환경
- Prod : 실서버 환경
- ex) Debug-Dev 환경 : 개발 서버를 활용하는 디버깅 모드 환경
# 사용법
# 기본 명령어 형태
- flutter run|build (run이면 공백)|apk|appbundle|ios --debug|release --flavor dev|prod
# 실행 (Android Studio)
- Edit Configurations... 클릭
- 항목에 맞게 수정
- Name : flavor에 맞게 작명
- Dart entrypoint : main.dart
- Additional run args : --debug 또는 --release
- Build Flavor : dev 또는 prod
# 빌드
# Android (Dev 서버 Test용)
- Debug-Dev : flutter build apk --debug --flavor dev
# Android (실서버 Test용)
- Release-Prod(APK) : flutter build apk --release --flavor prod
# Android (실서버 스토어 제출용)
- Release-Prod(Appbundle) : flutter build appbundle --release --flavor prod
# iOS
- iOS는 XCode를 이용하여 빌드
- Product - Archive 과정 통하여 dev와 prod에 맞게 빌드
# 빌드번호 및 버전
- 빌드할 때마다 빌드번호를 수정하는 것이 좋음 (스토어 및 TestFlight 제출용은 반드시 수정, 그 외는 권장)
- pubspec.yaml에서 수정 (iOS에서 반영이 안 될 경우 XCode에서 수동으로 수정)
# 주요 파일 및 설정 과정
# 공통
# config.dart
Config._internal() {
PackageInfo.fromPlatform().then((PackageInfo packageInfo) {
switch (packageInfo.packageName) {
case "com.clnk.ios":
case "com.clnk":
isDev = false;
isProd = true;
_setProd();
break;
default:
isDev = true;
isProd = false;
_setDev();
}
});
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- 패키지 이름이 com.clnk이거나 com.clnk.ios인 경우에는 실서버, 그 외는 개발 서버 설정
- flavor dev로 빌드했을 경우에는 패키지 이름 뒤에 .dev가 붙음 (com.clnk.dev, com.clnk.ios.dev)
# Android
# app/build.gradle
{
flavorDimensions "flavors"
productFlavors {
dev {
dimension "flavors"
applicationId "com.clnk.dev"
}
prod {
dimension "flavors"
applicationId "com.clnk"
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- 패키지 이름을 dev인 경우 com.clnk.dev, prod인 경우 com.clnk로 변경
# app/src/dev 및 app/src/prod, AndroidManifest.xml
<!-- Dev 환경 -->
<!-- app/src/dev/res/values/string.xml -->
<resources>
<string name="app_name">클링크-DEV</string>
<string name="deep_link"></string>
<string name="facebook_app_id">162540044397262</string>
<string name="fb_login_protocol_scheme">fb162540044397262</string>
<string name="facebook_client_token">4f8ca92787cab29bbaae96f265ce6985</string>
</resources>
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
- 설정에 맞게 google-services.json과 string.xml 작성
<!-- app/src/main/AndroidManifest.xml -->
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />
<meta-data
android:name="com.facebook.sdk.ClientToken"
android:value="@string/facebook_client_token"/>
1
2
3
4
5
6
7
2
3
4
5
6
7
- string.xml에 넣은 facebook_app_id와 facebook_client_token을 이용
- dev 환경이면 dev 폴더의 string.xml이, prod 환경이면 prod 폴더의 string.xml이 적용됨
# iOS
# Configurations
- XCode의 Runner Project - Info - Configurations에서 환경과 모드에 맞게 세팅
# Scheme
- Product - Scheme - Manage Schemes에서 dev, prod라는 이름으로 스키마 설정
# Build Setting
- Build Setting에서 패키지 이름이나 환경에 따른 변수들(User-Defined) 설정