# Getting Started Looking for an old documentation? As from now, it lives here: ### What is React Native Starter? We love building apps with React Native, because it helps us create high quality products for both major mobile platforms quickly and cost-effectively. Getting started on a new app just takes too long. Most apps need the same basic building blocks and developer infrastructure, and we are bored of reinventing the wheel time and time again. This Starter Kit reflects the best practices of React Native development we have discovered while building real-world applications for our customers. It is opinionated about tooling, patterns and development practices. It might not be a one-size-fits-all solution for everyone, but feel free to customize it for your needs, or just take inspiration from it. More information about React Native Starter and downloads: ### What's inside * Always up-to-date React Native scaffolding * UI/UX Design from industry experts * Modular and well-documented structure for application code * Redux for state management * React Navigation for simple navigation * Disk-persisted application state caching * More than 16 Ready-to-use Pages ### Up and running (mac OS) **1. Clone and Install** ```bash # Clone the repo git clone https://github.com/flatlogic/react-native-starter.git # Install dependencies yarn install # Install native ios modules cd ios && pod install ``` **2. Open RNS in your simulator** Then you can start the project by going to the project's folder and running there: ``` yarn start yarn run:ios ``` or, if you want to open it on Android: ``` yarn run:android ``` ## Local images not rendered on iOS 14 physical device for release build If you don't see images here is the fix that will help you until React Native package didn't add this on their end. Open node\_modules folder and find this file [Libraries/Image/RCTUIImageViewAnimated.m](https://github.com/facebook/react-native/commit/123423c2a9258c9af25ca9bffe1f10c42a176bf3#diff-4cb374ac84cbae493f1b0aba42abb676641833d77dcdd921a648098e510e3053)\ scroll to the line 270 and you'll find this pice of code: ``` - (void)displayLayer:(CALayer *)layer { if (_currentFrame) { layer.contentsScale = self.animatedImageScale; layer.contents = (__bridge id)_currentFrame.CGImage; } } ``` change it to what you see below. Then restart project and clear cache, you may also try to build on different device. ``` - (void)displayLayer:(CALayer *)layer { if (_currentFrame) { layer.contentsScale = self.animatedImageScale; layer.contents = (__bridge id)_currentFrame.CGImage; } else { [super displayLayer:layer]; } } ``` ### Up and running (Windows) **1. Clone and Install** ``` # Clone the repo git clone https://github.com/flatlogic/react-native-starter.git # Install dependencies yarn install ``` **2. Look through official guide** {% embed url="" %} **3. If project is not running correctly** `unable to load script make sure you are either running a metro server ....` Go to your `root folder of the project > node_modules > metro-config >src > defaults >blacklist.js`. Open said file (VS Code, etc) and on the top you will see a var called SharedBlacklist. Change that var from what it is to what attached code says ``` FROM var sharedBlacklist = [ /node_modules[/\\]react[/\\]dist[/\\].*/, /website\/node_modules\/.*/, /heapCapture\/bundle\.js/, /.*\/__tests__\/.*/ ]; TO var sharedBlacklist = [ /node_modules[\/\\]react[\/\\]dist[\/\\].*/, /website\/node_modules\/.*/, /heapCapture\/bundle\.js/, /.*\/__tests__\/.*/ ]; ``` That's it! Cool, right? ### Build project You can generate a private signing key using `keytool`. On Windows `keytool` must be run from `C:\Program Files\Java\jdkx.x.x_x\bin`. ``` keytool -genkeypair -v -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000 ``` #### Setting up Gradle variables 1. Place the `my-upload-key.keystore` file under the `android/app` directory in your project folder. 2. Edit the file `~/.gradle/gradle.properties` or `android/gradle.properties`, and add the following (replace `*****` with the correct keystore password, alias and key password), ``` MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore MYAPP_UPLOAD_KEY_ALIAS=my-key-alias MYAPP_UPLOAD_STORE_PASSWORD=***** MYAPP_UPLOAD_KEY_PASSWORD=***** ``` These are going to be global Gradle variables, which we can later use in our Gradle config to sign our app. *Note about security: If you are not keen on storing your passwords in plaintext, and you are running OSX, you can also* [*store your credentials in the Keychain Access app*](https://pilloxa.gitlab.io/posts/safer-passwords-in-gradle/)*. Then you can skip the two last rows in `~/.gradle/gradle.properties`.* #### Adding signing config to your app's Gradle config The last configuration step that needs to be done is to setup release builds to be signed using upload key. Edit the file `android/app/build.gradle` in your project folder, and add the signing config, ``` ... android { ... defaultConfig { ... } signingConfigs { release { if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) { storeFile file(MYAPP_UPLOAD_STORE_FILE) storePassword MYAPP_UPLOAD_STORE_PASSWORD keyAlias MYAPP_UPLOAD_KEY_ALIAS keyPassword MYAPP_UPLOAD_KEY_PASSWORD } } } buildTypes { release { ... signingConfig signingConfigs.release } } } ... ``` #### Generating the release APK Run the following in a terminal: ``` $ cd android $ ./gradlew assembleRelease ``` Also don't forget to run after you saved .apk file ``` ./gradlew clean ``` check out official docs ### Potential issue free vs full v. If you cloned free version and started it locally, then bought full version and launched it on the same virtual device you may face the issue with set up, it may be caused by the naming collision, please update you virtual device or start brand new VD and run RNS on the new device.