appkickstarter logoAppKickstarter

Distribution

You've done the hard work, now let's share your app for others to use.

Introduction

In the previous steps (Installation), you learned how to build a development client (a build of the native part of the app), and then start a development server (serves the JavaScript bundle part of the app). This works great for development, as it gives us hot module reloading (we see code changes instantly when we hit Save), but not for sharing the app with others. The development client requires connection to the development server, so if your device is not on the same network, or offline, it won't work. This is not ideal for your users.

Now, we'll learn how to go from development to a final, shiny, distributable app.

Submit for Testing

We will cover 2 main ways to share a preview version of your app for QA & testing:

1. Internal Distribution

Internal distribution is a feature provided by EAS that allows developers to create builds and easily share them with a URL. The URL can be opened on a device to install the app. The app is provided as an installable APK for Android or an ad hoc provisioned app for iOS.

As soon as an internal distribution build is created, it is available for download and installation — no need to fill out any forms or wait for approval/processing. You can use internal distribution to share both release and development builds.

We configure a build profile to be for internal distribution by setting the "distribution": "internal" value in apps/expo/eas.json.

For iOS, we build an ad hoc provisioned app. This is a feature by Apple, known as ad-hoc distribution.

The way this works is simple. In short, we register your device with your Apple Developer account, and then we bundle the app to be able to run on those registered devices. Don't worry, we handle this with a few simple commands:

Register your device:

eas device:create

This command registers an iOS device for app installation, generating a shareable URL (or QR code) for device registration.

Create the preview build:

yarn eas:build:ios:internal

Once the build is done, the terminal will return options for running the build!

The main downside with internal distribution for iOS is that you must register the devices (that you want the app to run on) to your Apple Developer account. This makes it ideal for quick turnaround testing with a small amount of testers, but not for a public beta (potentially 1000+ testers). This is where the second option comes in.

For Android, all we need to do is build the APK, and it can then be installed and ran on the devices.

To create the APK:

yarn eas:build:android:internal

Learn more about internal distribution from the Expo docs:

2. App Stores (TestFlight, Google Play beta)

In this option, we create a production build of our app and submit it to the app stores for testing.

Prerequisites

To publish and distribute an app on the Apple Play Store, we need:

  • Apple Developer account: To create one, see Apple Developer Portal.
  • Production build profile: Ensure that a production build profile is present in your eas.json, which is added by default.

Submit to App Stores