← Back to Blog
Mobile Development2 min read

Why Mobile Development Suddenly Gets Complicated: Dev Builds, Native Modules and Expo

One of the nicest things about Expo is how easy it makes the beginning of a React Native project. You write some code, scan a QR code and suddenly the app is running on your phone. For a while, that creates the impression that mobile development is basically web development with a different UI.

Then you need something native.

That was the point where things started becoming more complicated for me.

I was adding features around authentication, subscriptions and iOS configuration and gradually ran into the distinction between Expo Go, development builds and the native application underneath the JavaScript code.

Expo Go is great because it already includes a large set of native functionality. The limitation is that it only contains what was bundled into Expo Go itself. If I install a library that requires its own native module, adding the npm package is not always enough. The native part also has to exist inside the iOS or Android application.

That is where a development build comes in.

Instead of running my project inside the generic Expo Go app, I build my own development version of the application. It still gives me the fast development experience with Metro and JavaScript updates, but now the native binary can include the specific libraries my project needs.

This was initially confusing because I was developing everything in WebStorm and barely touching Xcode. It felt strange that adding a JavaScript dependency could suddenly involve provisioning, bundle identifiers, native configuration and rebuilding the app.

The important thing I learned is that there are really two layers. JavaScript can change quickly while the app is running, but native dependencies are part of the application binary. If that native layer changes, the app itself has to be rebuilt.

Once I understood that distinction, a lot of Expo behaviour made more sense.

For a simple project, Expo Go is still the easiest option. But once an app starts using native authentication, in-app purchases or other platform-specific libraries, moving to a development build is not a sign that Expo stopped working. It is just the point where the project has become a real native application.

Topics

Exponative modulesdevelopment builds