Build and Deliver Native Apps with EAS

Expo Application Services (EAS) is a service that helps you build and deploy your React Native apps without the hassle of managing code signing, provisioning profiles, and other complexities of native development by yourself.

Native apps built with One can be deployed using EAS. If you created your One app using one of our templates, it would already work with EAS out of the box. If not, refer to the "Setup Your One App for EAS" section below.

After the initial EAS setup (eas build:configure), you will be able to run eas build --platform ios to build your app, and eas submit --platform ios to submit it to the App Store directly in your One project.

For more instructions, see the "Create your first build" guide in the EAS documentation.

Note that One only supports EAS for iOS at this moment, thus --platform ios is used there.
It's possible that you'll need to configure your app for distribution, such as setting an unused bundle identifier in app.json for your app. Generally, following the instructions you saw in the terminal and the EAS documentation should be sufficient to resolve most issues.

A common type of error you'll probally see in a EAS build is:

Terminal

The engine "node" is incompatible with this module. Expected version "^20.15.0". Got "18.18.0"
This is because EAS defaults to a relatively old version of Node.js. To fix this, you can modify your eas.json and specify the version of Node.js like this:
{
/* ... */
"build": {
"shared": {
"node": "20.15.0"
},
"development": {
"extends": "shared",
/* ... */
},
"preview": {
"extends": "shared",
/* ... */
},
"production": {
"extends": "shared",
/* ... */
}
},
/* ... */
}

Setup Your One App for EAS

While our templates are configured in a way that works with EAS, if you're starting from scratch or migrating an existing project, some setup will be required to make your One app deployable with EAS.

  1. Ensure expo is installed in your project.

  2. Add a react-native.config.cjs to your project root (next to your package.json) with the following content:

    module.exports = {
    // Setting up and overriding some react-native CLI commands.
    // Necessary for building native iOS and Android apps,
    // where Vite shall be used instead of Metro for JS bundling during the build precess.
    commands: [...require('vxrn/react-native-commands')]
    }
  3. Modify your app.json (or app.config.js) and add vxrn/expo-plugin to expo.plugins. This plugin will hook into the Expo build process running on EAS to ensure your One app is built correctly:

    {
    "expo": {
    "plugins": ["vxrn/expo-plugin"]
    }
    }

Edit this page on GitHub.