One Logo Pool Ball
wwwwwwwwwwwwwwwwwww

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 as existing React Native projects. The app’s dependencies select the prebuild path: Expo apps use Expo prebuild with vxrn/expo-plugin, while Expo-free apps use one prebuild.

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

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

Configure distribution identifiers under native.app in vite.config.ts. Generally, following the instructions in the terminal and the EAS documentation should be sufficient to resolve most issues.

A common type of error you’ll probably see in an EAS build is:
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

EAS Build supports existing React Native projects with or without the Expo package.

If expo is in the app’s dependencies, list vxrn/expo-plugin in the Expo config and run Expo prebuild. The plugin preserves One’s native bundling patches while Expo runs the app’s Expo module and config plugins.

If expo is absent, One generates the project directly and no Expo config plugin is involved:

  1. Configure native.app in vite.config.ts with the app name, iOS bundle ID, and Android application ID.

  2. Install @react-native-community/template as a development dependency and run one prebuild.

  3. Add a react-native.config.cjs to your project root with the following content:

    module.exports = require('one/react-native-config')
  4. Add a postinstall script to your package.json that runs one patch so dependency patches are present on the build worker:

    {
    "scripts": {
    "postinstall": "one patch"
    }
    }
  5. Run eas build:configure, then build the checked-in iOS and Android projects as an existing React Native app.

Edit this page on GitHub.