DEV Community

Cover image for React Native: Multiple Environments Setup (Schemas/Flavors)

React Native: Multiple Environments Setup (Schemas/Flavors)

Leon Arantes on May 18, 2022

Many times when developing an application, we developers need to create different builds with different configurations. Facilitating the maintenanc...
Collapse
 
thangvannguyen profile image
ThangVanNguyen • Edited

In IOS, I add in file Podfile:

  pod 'react-native-config', :path => '../node_modules/react-native-config'
  # For extensions without React dependencies
  pod 'react-native-config/Extension', :path => '../node_modules/react-native-config'
Enter fullscreen mode Exit fullscreen mode

=================================AND======================

cp "${PROJECT_DIR}/../.env.development" "${PROJECT_DIR}/../.env.development"
Enter fullscreen mode Exit fullscreen mode

change to

echo ".env.development" > /tmp/envfile
Enter fullscreen mode Exit fullscreen mode

so this run well ^^

Collapse
 
dinhduongson profile image
dinhduongson

thank you so much, it works

Collapse
 
quincodes profile image
Quin

Great help!

Collapse
 
gautham495 profile image
Gautham Vijayan

Extremely Informative article!!!!!!!

Collapse
 
gamble2020 profile image
gamble2020 • Edited

As per the documentation for react-native-config the line...

cp "${PROJECT_DIR}/../.env.development" "${PROJECT_DIR}/../.env.development"

should be...

cp "${PROJECT_DIR}/../.env.development" "${PROJECT_DIR}/../.env"

Because...react-native-config reads the .env file by default.

Collapse
 
sammysmart95 profile image
sammysmart95 • Edited

Please i'm having issues running the the IOS. I keep getting this error

cp: /Users/samueladeoye/Documents/open_source/client/infotech-mobile/ios/../.env.development and /Users/samueladeoye/Documents/open_source/client/infotech-mobile/ios/../.env.development are identical (not copied).
I followed all the steps but still having issues

What could be the possible solution?

Collapse
 
itsme_prakash profile image
Prakash Chandra Awal • Edited

I did the same as mentioned above. But, its not working when i build app from xcode. It only take dev environment even if i chose staging enviornment. However, it works fine when i build app from terminal.

Collapse
 
sobanarshad85 profile image
Sarcasm

Video explaination if anybody interested in it.

I was also going through this issue, this video helped me alot. Though still you'll have to manage env variables separately but flavours are well explained in this video in a very simple way. youtu.be/TvBm7UZNyy8

Collapse
 
jcedborger profile image
Johan

Hi! I'be been using this method for previous projects without any issue! Really like the approach, so I thought I'd use it in a newer project as well.

However, it seems that when building the targets locally, I need to clean the build folders for the different .env files to load during build.

Anyone else having this issue?
xcode 14.2
RN 0.71.2
react-native-config 1.5.0

Collapse
 
adrianorodrigues99 profile image
Adriano Rodrigues • Edited

I found a solution:

echo ".env.production" > /tmp/envfile
touch "${PROJECT_DIR}/../node_modules/react-native-config/ios/ReactNativeConfig/BuildDotenvConfig.rb"

Collapse
 
daskaloff profile image
Yavor Daskalov • Edited

Hi there! Thank you for the detailed explanation. It worked!
There is one problem on android though: If I first try to run the staging app on a blank simulator (it hasn't been installed yet), using the android:staging script, the app does get built and installed correctly, but it isn't run and I get the following error:

Error type 3
Error: Activity class {com.miles/com.miles.MainActivity} does not exist.

I am able, however, to manually run the app by tapping on its icon and it runs as expected.
The production app works properly (builds and starts as expected).
Now that I've run the production app, the staging app starts behaving normally as well.
Could you help me resolve this?

Collapse
 
daskaloff profile image
Yavor Daskalov

found a solution:
add "--appId=com.yourAppName.yourEnv" to the end of the script that fails. Of course ".yourEnv" should actually be ".staging" or ".development" or whichever environment fails with this error.

Collapse
 
ajmal_hasan profile image
Ajmal Hasan • Edited

I wrote mine using this guide, as I encountered issues with the latest versions:

React Native Multi-Environment Setup: Android

React Native Multi-Environment/Flavour Setup: iOS

Collapse
 
mnaumanshafique profile image
Nauman Shafique • Edited

Hi @leon_arantes

  1. Can you please also share the command to generate Android APKs with the specific environment?
  2. Do we need to add .env file as on the terminal it says "Missing .env file"
  3. How we can access/ use the data from .env files?
Collapse
 
hamzaxeros profile image
Hamza Hussain

1: To run app
`- "ios": "react-native run-ios --simulator=\"iPhone 14 Pro\" --scheme \"app-development\" ",

  • "ios:stage": "react-native run-ios --simulator=\"iPhone X\" --scheme \"app-staging\"",
  • "ios:prod": "react-native run-ios --simulator=\"iPhone X\" --scheme \"app\"",
  • "android": "cd android && ./gradlew clean && cd .. && react-native run-android --variant=developmentDebug --appIdSuffix 'development'",
  • "android:stage": "cd android && ./gradlew clean && cd .. && react-native run-android --variant=stagingDebug --appIdSuffix 'staging'",
  • "android:prod": "cd android && ./gradlew clean && cd .. && react-native run-android --variant=productionDebug --appIdSuffix 'production'"`

2: To Generate APK or AAB
`- "apk": "cd android && ./gradlew clean && ./gradlew assembleDevelopmentRelease",

  • "apk:prod": "cd android && ./gradlew clean && ./gradlew assembleProductionRelease",
  • "apk:stage": "cd android && ./gradlew clean && ./gradlew assembleStagingRelease",
  • "aab": "cd android && ./gradlew clean && ./gradlew bundleDevelopmentRelease",
  • "aab:prod": "cd android && ./gradlew clean && ./gradlew bundleProductionRelease",
  • "aab:stage": "cd android && ./gradlew clean && ./gradlew bundleStagingRelease",`
Collapse
 
tanjil72 profile image
Tanjil Hossain

Followed all the steps still my xcode opening the same app for dev, uat. How can I resolve this?

Collapse
 
jasimchz profile image
jasimchz

cp "${PROJECT_DIR}/../.env.development" "${PROJECT_DIR}/../.env"

this will work,

Collapse
 
andrewbaisden profile image
Andrew Baisden

So in depth good read.

Collapse
 
soban1234 profile image
soban1234

Superb!!! Please allow me to copy this article on my own website informativehouse.com I won't copy without your permission.

Collapse
 
kienlv58 profile image
Kiên Cocktails

How can I run .env.stg from Xcode (not the build) directly instead of the command line react-native run?

Collapse
 
gamble2020 profile image
gamble2020

You just choose the scheme you want to run?

Collapse
 
franka10019 profile image
frank.ni@vanyi.com.tw

@leon_arantes, what is resValue means in android productFlavors setting? Thanks.