React Native: 다중 환경 설정(스키마/플레이버)
react-native-config 설치
패키지 설치
// yarn
yarn add react-native-config
// npm
npm install react-native-config --save
iOS의 경우 패키지가 설치된 후 pod install 도 실행합니다.
그리고 플러그인을 적용하기 위한 android/app/build.gradle의 코드 줄 아래
apply plugin: "com.android.application"
apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle" // <- add this line
각 구성에 대한 .env 파일 생성
.env.development
ENV=development
API_URL=https://api.dev.com
.env.staging
ENV=staging
API_URL=https://api.staging.com
.env.production
ENV=production
API_URL=https://api.com
Android용 설정
이제 빌드를 env 파일과 연결하는
build.gradle
에서 envConfigFiles를 정의해야 합니다. 이를 위해 적용 호출 전에 아래 코드를 추가하고 빌드 케이스를 소문자로 두어야 합니다.android/app/build.gradle
apply plugin: "com.android.application"
// add this block
project.ext.envConfigFiles = [
productiondebug: ".env.production",
productionrelease: ".env.production",
developmentrelease: ".env.development",
developmentdebug: ".env.development",
stagingrelease: ".env.staging",
stagingdebug: ".env.staging"
]
// ---
apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradl
라인 아래 프로젝트에 제품 맛 추가
compileSdkVersion
android/app/build.gradle
android {
ndkVersion rootProject.ext.ndkVersion
compileSdkVersion rootProject.ext.compileSdkVersion
// add this block
flavorDimensions "default"
productFlavors {
production {
minSdkVersion rootProject.ext.minSdkVersion
applicationId "com.zenix"
targetSdkVersion rootProject.ext.targetSdkVersion
resValue "string", "build_config_package", "com.zenix"
}
staging {
minSdkVersion rootProject.ext.minSdkVersion
applicationId "com.zenix.staging"
targetSdkVersion rootProject.ext.targetSdkVersion
resValue "string", "build_config_package", "com.zenix"
}
development {
minSdkVersion rootProject.ext.minSdkVersion
applicationId "com.zenix.development"
targetSdkVersion rootProject.ext.targetSdkVersion
resValue "string", "build_config_package", "com.zenix"
}
}
// ---
...
이름은 productFlavors에 따라 일치해야 하므로 이 경우 productiondebug는 디버그와 일치하고 .env.production의 구성으로 앱의 디버그 빌드를 생성합니다.
또한 아래와 같이 buildTypes에 matchingFallbacks를 추가합니다.
android/app/build.gradle
buildTypes {
debug {
signingConfig signingConfigs.debug
matchingFallbacks = ['debug', 'release'] // <- add this line
}
release {
signingConfig signingConfigs.debug
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
}
스크립트 생성
package.json
"android:staging": "react-native run-android --variant=stagingdebug",
"android:staging-release": "react-native run-android --variant=stagingrelease",
"android:dev": "react-native run-android --variant=developmentdebug",
"android:dev-release": "react-native run-android --variant=developmentrelease",
"android:prod": "react-native run-android --variant=productiondebug",
"android:prod-release": "react-native run-android --variant=productionrelease",
Android 앱 이름 및 앱 아이콘 변경
android/app/main 폴더를 복사하고 우리의 경우에 플레이버에 배치된 참조 이름으로 이름을 바꾸십시오.
development
및 staging
.development
또는 staging
로 변경하고 파일 제거java
android/app/src/development/res/values/strings.xml
<resources>
<string name="app_name">zenix dev</string>
</resources>
android/app/src/staging/res/values/strings.xml
<resources>
<string name="app_name">zenix stg</string>
</resources>
iOS용 설정
zenixDev에 zenix 복사
cp "${PROJECT_DIR}/../.env.development" "${PROJECT_DIR}/../.env.development"
스키마 편집 > 빌드 > 사전 작업
development
에서 staging
로 변경하여 스테이징에 대해 동일한 프로세스를 수행해야 합니다.Schema*Dev* > 빌드 설정 > 검색 필터 > info.plist 파일
zenix dev-Info.plist
Schema*Stg* > 빌드 설정 > 검색 필터 > info.plist 파일
zenix stg-Info.plist
Podfile
을 열고 대상을 abstract_target으로 변경하고 다음과 같이 abstract_target의 이름을 ProjectName+CommonPods로 바꿉니다.target 'zenix' do // <- Remove this
abstract_target 'zenixCommonPods' do // <- Add this
target 'zenixDev' do
end
target 'zenixStg' do
end
target 'zenix' do
end
iOS 앱 아이콘 및 앱 이름 변경
소스 코드 보기
https://github.com/LeonArantes/react-native-multilpe-enviroments
Reference
이 문제에 관하여(React Native: 다중 환경 설정(스키마/플레이버)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/leon_arantes/react-native-multiple-environments-setup-schemaflavors-3l7p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)