Skip to content

Files

Latest commit

 

History

History
# <%= projectName %> - React Native

# Prerequisites

Follow the [official guide](https://facebook.github.io/react-native/docs/getting-started.html) to properly setup your environment.
We highly recommend using [nvm](https://github.com/creationix/nvm) instead of brew or aptitude to install nodejs.

---

# Proyect Set Up

## One time setup

<%_ if(features.hasFirebase) { _%>
### Google Services files setup

You must create a folder with the google-services.json files into the corresponding platform like this:

#### Android

`android/app/google-services`

#### IOS

`ios/GoogleServices`

then put the corresponding google services files on each one.

this folders are ignored by default.

The `firebaseFilesScript.sh` will get the build environment and setup the needed google service file for it.
<%_ } _%>

### ENV setup

Each environment has its env file with the following filename format:
`.[environment].env`

You must create the following env files corresponding to each environment.

`.dev.env`
`.stage.env`
`.production.env`

Create all the env files in the root with the following vars corresponding to the environment that belongs:

```
API_BASE_URL=https://XXXXXXX
OTHER_ENV_VARs=XXXXXXXXXX
```

### Android

Set the following variables in `~/.gradle/gradle.properties`

```
MY_PROYECT_RELEASE_STORE_FILE=my_proyect-key.keystore
MY_PROYECT_RELEASE_KEY_ALIAS=my_proyect-key
MY_PROYECT_RELEASE_STORE_PASSWORD=xxxxxxxx
MY_PROYECT_RELEASE_KEY_PASSWORD=xxxxxxxx
```

Update the file `android/app/build.gradle` according to this [guide](https://facebook.github.io/react-native/docs/signed-apk-android.html#adding-signing-config-to-your-app-s-gradle-config) using the variables set in `~/.gradle/gradle.properties`

Generate the file `my_proyect-key.keystore` using the following command from your terminal and place it in the `android/app` folder

```
$ keytool -genkey -v -keystore my_proyect-key.keystore -alias my_proyect-key -keyalg RSA -keysize 2048 -validity 10000

Enter keystore password: xxxxx
Re-enter new password: xxxxx
What is your first and last name?
  [Unknown]:  wolox
What is the name of your organizational unit?
  [Unknown]:  wolox
What is the name of your organization?
  [Unknown]:  wolox
What is the name of your City or Locality?
  [Unknown]:  wolox
What is the name of your State or Province?
  [Unknown]:  wolox
What is the two-letter country code for this unit?
  [Unknown]:  wx
Is CN=wolox, OU=wolox, O=wolox, L=wolox, ST=wolox, C=wx correct?
  [no]:  yes

Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10,000 days
	for: CN=wolox, OU=wolox, O=wolox, L=wolox, ST=wolox, C=wx
Enter key password for <my_proyect-key>
	(RETURN if same as keystore password):  xxxxx
Re-enter new password: xxxxx
[Storing my_proyect-key.keystore]
```

### iOS

We use [FastLane](https://github.com/Wolox/fastlane-mobile) and few of its plugins to automate many ios tasks:

- Interact with Apple Developer Portal and iTunes Connect.
- Automate code signing (Certificates and provisioning profiles handling. Take a look at [match](https://github.com/fastlane/fastlane/tree/master/match))
- Uploading builds to Testflight ([gym](https://github.com/fastlane/fastlane/tree/master/pilot))

#### FastLane setup

Make sure you have the latest version of the Xcode command line tools installed:

```
xcode-select --install
```

Follow this [guide](https://github.com/rvm/rvm) to properly install rvm. This tool will easily allow you to install and change different ruby versions.

Run `rvm -v` to check that it was successfully installed.

The last step is installing Fastlane gems:

```bash
gem install bundler
bundle install
```

---

# Running aplication

This proyect supports many `Debug`, `QA`, `Stage`, and `Production` environments.  
The following enviorments are supported:

## iOS

- Dev - Scheme: `dev`
- Dev - Configuration: `Debug`
- QA - Scheme: `qa`
- QA - Configurations: `Debug` or `QA`
- Stage - Scheme: `stage`
- Stage - Configurations: `Debug` or `Stage`
- Production - Scheme: `production`
- Production - Configurations: `Debug` or `Production`

**The default configuration is `Debug`.**

## Android

- Dev/QA - Debug: `qaDebug`
- Dev/QA - Release: `qaRelease`
- Stage - Debug: `stageDebug`
- Stage - Release: `stageRelease`
- Production - Debug: `productionDebug`
- Production - Release: `productionRelease`

To run a Android/iOS simulator with determinated environment, just run:

**ANDROID**  
`npx react-native run-android --variant=[build variant]`
For Example:  
`npx react-native run-android --variant=qaDebug`
or
`npx react-native run-android --variant=qaRelease`

**iOS**  
`npx react-native run-ios --scheme [scheme] [--configuration [configuration]](optional)`

For Example:  
`npx react-native run-ios --scheme qa`(Debug configuration)

or

`npx react-native run-ios --scheme dev --configuration Release`

---

# Outputs

## Android

Use the the command in the rootpath to generate the APK:

```
yarn run android:build.[environment]
```

For example:

```
yarn run android:build.qa
```

It will generate the apk file in the path `android/app/build/outputs/apk/[environment]/release/app-[environment]-release.apk`

### Uploading build to Firebase App Distribution

Use the following commands inside the Android project folder:

1. Install gems with: `bundle install`
2. Authenticate with Firebase using Firebase-CLI: `firebase login`. If you don't have `Firebase-CLI` installed you can do it with the following command: `npm install -g firebase-tools`.
3. Run: `bundle exec fastlane android distribute_qa`.

#### Available Lanes

There is a lot of fastlane lanes that will help you to make deploys to Firebase App Distribution and Google Play Console too.

Follow the instructions in the [Fastlane README](android/fastlane/README.md) to see all available lanes.

## iOS

### Uploading build to Testflight
Use the following commands inside the iOS project folder:

1. We need to create the app in the AppStore first if it isn't already created. You must be use `bundle exec fastlane create_development_app`. The lane depends of environment, you can use `bundle exec fastlane create_stage_app` or `bundle exec fastlane create_production_app`
2. Then you must be use `bundle exec fastlane release_qa` also there are other lanes to deploy to differents environments. You can use `bundle exec fastlane release_stage` or
   `bundle exec fastlane release_production`

Follow the instructions in the [Fastlane README](ios/fastlane/README.md) that will help you to create apps, certificates, make deploys and more.

#### Available Lanes

There is a lot of fastlane lanes that will help you to create apps, certificates, make deploys and more.

Follow the instructions in the [Fastlane README](ios/fastlane/README.md) to see all available lanes.

---