일반적인 개발환경과 빌드타입 구분은 다음과 같다.
- dev (개발)
- stage (QA)
- prod (운영)
- debug (디버깅용)
- release (배포용)
빌드환경은 개발환경과 빌드모드를 결합한 각 환경으로 구분된다. 위와 같은 구분이라면 총 6가지 빌드 환경이 가능.
devDebug
: dev (개발) + debug 모드
stageDebug
: stage (QA) + debug 모드
prodDebug
: prod (운영) + debug 모드
devRelease
: dev (개발) + release 모드
stageRelease
: stage (QA) + release 모드
prodRelease
: prod (운영) + release 모드
npm install react-native-config cd ios && pod install # iOS 추가 설정
.env.development
, .env.staging
, .env.production
)apply plugin: "com.android.application" // 각 빌드 환경에서 사용할 env 파일 정의 project.ext.envConfigFiles = [ devDebug: ".env.development", stageRelease: ".env.staging", prodRelease: ".env.production", anothercustombuild: ".env", ] // dotenv.gradle을 적용하여 위 env 파일 설정을 처리 apply from: project(':react-native-config').projectDir.getPath() + '/dotenv.gradle' android { ... defaultConfig { ... // 환경 변수를 BuildConfig에 포함 resValue 'string', "build_config_package", "com.poin.app" flavorDimensions "version" productFlavors { develop { } stage { } product { } } }
💡
apply from: project(':react-native-config').projectDir.getPath() + '/dotenv.gradle'
가 각 env 파일 정의 후에 적용되어야 하므로project.ext.envConfigFiles = ...
뒤에 위치해야 한다..!
💡 resValue로 여러 설정을 할 경우 각 설정을 분리해서 호출해야 한다. 한 번에 하나의 key-value 쌍 하나만 설정 가능 (타입, 키, 값 3개의 인자만 받음)
ex)
defaultConfig { ... resValue 'string', "CODE_PUSH_APK_BUILD_TIME", String.format("\"%d\"", System.currentTimeMillis()) resValue 'string', "build_config_package", "com.poin.app"
include ':react-native-config' project(':react-native-config').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-config/android')
#include? "tmp.xcconfig"
Config
선택)cp "${PROJECT_DIR}/../.env.development" "${PROJECT_DIR}/../.env" echo ".env.development" > /tmp/envfile "${SRCROOT}/../node_modules/react-native-config/ios/ReactNativeConfig/BuildXCConfig.rb" "${SRCROOT}/.." "${SRCROOT}/tmp.xcconfig"