Throughout this course, we built React Native apps and I really want to emphasize this,
we built React Native apps but we built them with a tool called expo and as you saw throughout this
course, expo mostly get out of our way but it made building these apps way simpler.
The setup process is simple, you can test it on your real device without any special configuration neither,
you can easily add native modules and you have a huge catalog of built-in native modules and so on. So developing
React Native apps with the help of expo is really easy and therefore my recommended way of doing it. Now
there can be reasons why you might want to build an app without expo,
for one you must not forget that expo of course works such that you have the expo client on your real
device or also on the simulator of course, there we also in the end installed the expo client, so this
app on the device and your app kind of gets loaded into that client. Now you still will be able to publish
a standalone app as you learned, so you can still publish an app which you upload to the app stores where
people don't need to install the client but this published app will in the end kind of include that app
wrapper, so it will be a standalone app where people don't need to install the expo client app but the
expo client app is part of your app you could say,
so people indirectly install it if that makes sense.
So you always have this wrapper and therefore one reason for not using expo but could be that you want
to get rid of that wrapper because as you might imagine, this wrapper whilst still giving you a native
app and whilst still giving you the benefits of your views being compiled to native views, whilst
all of that is the case, this wrapper of course adds a little bit of size to your app, your app gets bigger.
It probably also gets a bit slower because of that extra wrapper, though
I still want to emphasize you get a native compiled app, right?
Your views still are compiled to native code so you don't lose that,
it's not like Ionic where Ionic use a native app as a wrapper for a web app,
that's not what's happening here,
still you have that overhead.
So one reason for not using expo might be that you want to get rid of that extra wrapper, another reason
could be that you need some native device functionality outside of what we used in the native feature
module that isn't included in expo,
so some feature which you just can't add with the help of expo and then you're stuck. If you need
some feature that's not part of expo's of which you can't find here,
then you can't add it to a React Native app built with expo, there's no way for that. You can't write
your own native code and connect it and you can't bring other third-party packages which tap into native
device features, that's not supported in expo.
So these could be two reasons for why you want to switch away - you want to get rid of that wrapper because
every millisecond of performance matters to you and every kilobytes of size matters to you or because of
a native feature that's missing.
Now I will emphasize for most apps, both reasons probably don't apply because we're not talking about
a huge performance hit,
we're not talking about a super huge app which you would be getting, indeed it's very lean but still that
might be a thing for some apps
and the thing with the native modules which might be missing, there is so many included,
chances are that you can built the app you want to build with what's included. But in case something
is missing, you can of course also build a React Native app and we can find that on the official docs
too without expo.
Now let me dive into the alternatives you have.