When you start a project with React Native, you have two main possibilities if you follow the documentation: either work directly in React Nativeor use Expo.
As a reminder, React Native is one of the most popular frameworks for mobile development. It allows you to generate apps for iOS and Android with a single source code.
But then Expo, what is it? It's a framework designed to create React Native applications, and it's very often recommended for developers who start in this universe.
In this article, we'll present our feedback on Expo, so you can easily find out if it's suitable for your project... Or not.
- Presentation of Expo and its advantages
- Expo: the disadvantages
- Why did The Tribe choose to stop using Expo?
- Expo.io: alternatives
- User testing: Firebase App Tester + Testflight
- Expo or not Expo? Our recommendations!
Our feedback on Expo.io
— Introducing Expo and its benefits
Expois both a framework and a platform that simplifies the creation and deployment of mobile applications with React Native. Expo is home to many useful tools and native bookstores for React Native. It also manages the updating of these bookstores. So it's a way to start your project easily and quickly.
Expo has the advantage of being very simple to set up and it greatly simplifies the life of developers, at all stages of the project:
- Development: you just write the code, Expo takes care of the build of applications.
- Test: Expo allows you to test and have your applications tested without having to publish them on the blinds. Simply install the Expo Go app and scan a QR code to test a developing application.
- Publication and update on blinds: Expo simplifies the publication of apps on Apple and Google blinds, and allows them to be updated without going through the over the Air updates.
And in addition, Expo is free (with some limitations)!
Reading all these benefits, we understand what made it successful.
At theTribe, we used Expo, too... until we decide to stop. I'll explain why.
— Expo: the drawbacks
Before deciding to use Expo, you must be aware of its limitations.
First, Expo takes control of the build and publish processes that are in theory not related to your framework. With Expo it will necessarily be linked to React Native and you will not be able to capitalize your experience on other frameworks.
Then Expo comes as we have seen with many Bookstores React Native. It's interesting, of course... except that even if you don't use them all, your app will still load them.
That's why the weight of the apps generated by Expo is very high: 20MB minimum for iOS, 15MB minimum for Android.
By developing your applications without going through Expo, you will easily halve their weight!
Another major drawback is that despite all these bookstores, Expo lacks critical features: for example, your app won't be able to integrate in-app purchases,or use Bluetooth, and if you want to view a map you'll be forced to use Google Maps. These limits can be downright blocking.
It should also be noted that in a free version the build time can be very long through the Expo servers, up to 5 to 6 hours! Indeed, the builds of free users are not priority, so you have to wait in a queue. In times of development and testing, it is very penalizing for the productivity of the team and the progress of the project.
Let's end with a drawback that you should know: an app built with Expo cannot be provided to children under 13 years because it carries Facebook bookstores (even if they are not used). Good to know if you have a project that is aimed at the general public.
— Why did theTribe choose to stop using Expo?
At theTribe, we decided to stop using Expo.
And the first reason is that the majority of the projects we're working on need to manage in-app purchases,and as we've seen, it's impossible with Expo. If you're doing research, you'll find articles that will explain how to get around this limitation. This is what we tested on a project... And we regretted it.
On this project started with Expo, we thought we could put in place a payment solution by bypassing the limits of Expo... except that it was not possible.
And that's when we realized the real problem with Expo: once you started with it, it's extremely complex to get out of it. It is indeed possible to "eject" Expo from its project, but the code will always remain very necessarily linked to The Libraries of Expo after the fact. Without going into detail, we wasted a lot of time to start all over again. That's when we decided to stop the charges.
Because finally, the advantages of Expo, from our point of view, are not worth its disadvantages:
- We don't need the whole framework. We are quite able to develop directly with React Native, without using Expo bookstores.
- It's not just React Native in life! On our projects, we use flutter more and more (we'll explain soon why).
- To develop somewhat complex applications, we prefer to have a hand over the whole environment.
Finally, what was really most useful for us with Expo was the deployment on the blinds and the management of user tests.
So here are the alternative solutions we've put in place.
— Deployment on blinds: Fastlane
To automate deployments on iOS and Android, whether on test platforms or blinds, we use Fastlane. It's a more complex tool than Expo, but one that our teams have learned to master.
The benefits of Fastlane:
- It automates deployments and updates on iOS and Android, saving a lot of time.
- It also allows applications to be published on test platforms.
- It allows you to centralize the metadata related to the blinds on the blinds (images, screenshots, descriptions, etc.), and push this information directly onto the blinds: it's clean and simpler than having to go through the input interface specific to each store to update a text or screenshot.
The drawbacks of Fastlane:
- It's not a "plug-play" tool like Expo: the learning curve is higher, you have to take the time to understand the documentation and configuration options.
- It's not always easy to understand what Fastlane does when you launch an order. It can complicate developer tasks when things don't go according to plan.
— User Tests: Firebase App Tester - Testflight
To have apps tested on Android and iOS without waiting for them to be rolled out on the blinds, we use Firebase App Tester and Testflight.
Firebase App Test
Firebase App Test is a Google tool, which allows you to test mobile apps before you publish them.
The benefits of Firebase App Tester:
- Even though it's a Google tool, it can test Android versions as well as iOS, and everything is published at once.
- Once configured, it gives access to the entire Firebase universe, which provides many useful features.
- Testers are notified with each new version of the app.
The drawbacks of Firebase App Tester:
- This remains a somewhat complex tool to put in place.
- Whenever you want to add a tester to iOS, a developer's manual action is required.
- Testing mobile apps on iOS via App Tester remains incomplete, which is why we use Testflight as a supplement.
Testflight is a tool provided by Apple to test iOS apps before publishing them. By security we use Testflight in addition to Firebase App Tester because it allows to test applications in real conditions in the iOS environment: this is especially essential to test the proper functioning of notifications, for example.
The benefits of Testflight:
- It's a relatively simple tool to set up to test an iOS application.
- It uses the same interface used for posts on apple's App Store.
- It is very simple for the end user, and used by many developers.
The downsides of Testflight
- It's an Apple tool, available only for iOS.
Expo or not Expo? Our recommendations!
If you want to discover React Native, or develop a small app without in-app purchases that won't evolve, Expo is clearly a good option. Indeed, it is really very simple to take in hand, so it's a good tool to start on Native React.
But if you know that the app will evolve, to incorporate new features (including In App purchases), be careful.
Of course you will save time at the beginning of the project, but that time will be lost then when you dig your head out of Expo.
That's why I don't recommend Expo for professional use. In any case, you have to decide at the beginning of the project whether you use Expo or not, by analysing current and future needs.
But Expo remains a framework to follow, which is destined to become unavoidable.
It is constantly evolving, and the problems we have cited may be resolved tomorrow. We can already use some key Expo features today (OTA updates, native feature bookstores, use of Expo Go...) without going through Expo to develop its application. It's clearly an axis to be explored to combine the best of both worlds: the flexibility of a React Native application, combined with the strength of Expo's functionality.