← All build notes Mobile

Shipping iOS apps from Windows with Expo and EAS

Our Expo apps build in the cloud through EAS, so a Windows machine can take an app from code to TestFlight without Xcode.

ArcLayer teamBuild notesNov 2, 20262 min read

Three of the ten products ArcLayer has built are iOS apps: Kindlo, Slipora and Warranta. Scoreva is a mobile app as well. Building for iOS usually means a Mac running Xcode. Slipora, Warranta and Scoreva are Expo apps whose builds go through EAS in the cloud, so the work can happen on a Windows machine. Kindlo is native Swift, and its builds run on GitHub’s macOS runners instead.

How the pieces fit

Expo is a framework and toolchain for React Native apps. EAS Build, part of Expo Application Services, runs the native iOS build on macOS machines in Expo's cloud and returns a signed app. EAS Submit uploads that build to App Store Connect, where it can go out to testers through TestFlight.

The build profile

Build settings live in eas.json at the root of the project. A minimal setup has one profile for internal testing and one for the store:

json
{
  "cli": { "version": ">= 12.0.0" },
  "build": {
    "preview": {
      "distribution": "internal"
    },
    "production": {
      "autoIncrement": true
    }
  },
  "submit": {
    "production": {}
  }
}

From code to TestFlight

bash
# install the CLI and sign in to your Expo account
npm install -g eas-cli
eas login

# build the iOS app in the cloud
eas build --platform ios --profile production

# upload the finished build to App Store Connect
eas submit --platform ios --latest

On the first build, EAS asks for your Apple account and can create the signing certificate and provisioning profile for you. Keep App Store Connect API keys out of the repository. EAS can hold them as credentials on its side.

What still needs a real phone

A cloud build proves the app compiles and signs. Whether the camera opens quickly, or a receipt scans under shop lighting, only shows up on a device. Install the TestFlight build on a physical iPhone and test the flows that depend on hardware before release.

Build it
with
clarity.

Tell us what you are building and where it stands today. We will reply with questions and a first plan. Write to [email protected].

  • RezanCo-founder
  • RanaCo-founder