Do you want to learn how to build real native apps for iOS and Android with React Native, on macOS in 2020? Do you want to learn how to do it by using React Native CLI (not Expo CLI)? Then you’ve come to the right place!
This guide focuses on building apps with React Native CLI — not Expo CLI.
Why? Because while the Expo CLI is great for simple and presentational apps, the official React Native CLI gives you complete freedom to build any type of app. I’ve talked to many React Native developers, and not one of them recommends Expo CLI for most real-life projects. I wrote more about this topic in this article:
If you want to:
- Get a job as a React Native developer
- Or build your own app to publish in the App Stores
Then I strongly recommend that you focus on React Native CLI, as we’re going to do in this on-going tutorial series, because it’s going to give you more ways to win.
React Native is a React framework that allows you to build real native apps with a single codebase that works on both iOS and Android devices.
Traditionally you’d build iOS and Android apps with two separate codebases:
- Swift/Objective C for iOS apps.
- Java/Kotlin for Android apps.
With React Native you can kill two birds with one stone, and use one codebase that works on both Android and iOS — and save a ton of time and money.
React Native is used by many of the biggest companies in the world, including Facebook, Instagram, Tesla, Twitter.
What do you need to build native apps with React Native?
- iOS: the latest version of Xcode and iOS Simulator, and either macOS Mojave or macOS Catalina.
- Android: the latest version of Android Studio / SDK / Emulator (AVD)
- On macOS: you can build, compile and test both Android and iOS apps.
- On Windows: you can build for iOS and Android, but you can only compile and test your apps for Android.
In other words, if you need your app to work on iOS, you need a Mac computer. You can also try setting up a Virtual Machine on Windows that can run macOS.
The following two tutorials are all about getting set up correctly on iOS and Android respectively: