How to Build an iOS App with Expo EAS Without a Mac

A step-by-step guide to compiling a real iOS app in the cloud using EAS Build, from installing the CLI to downloading your first signed binary, no Mac required.

What You Need Before Starting

Before you build, gather a few essentials. You need Node.js installed, a code editor, and an Expo account, which is free to create.

You also need an Apple Developer Program membership. This is non-negotiable for producing a build you can install on real devices or submit to the App Store.

Have your Apple ID credentials ready. EAS will use them to generate and manage signing credentials on your behalf.

No Mac is required for the build itself. The compilation happens on Expo's cloud macOS machines, which is the entire point of this workflow.

Step 1: Install the EAS CLI

Start by installing the EAS command-line tool globally. Run npm install -g eas-cli in your terminal.

Once it finishes, verify the install with eas --version. Seeing a version number confirms the CLI is ready.

Next, log in to your Expo account with eas login. Enter the credentials you created when signing up at expo.dev.

If you do not yet have an account, create one first at the Expo website, then return and log in. The CLI ties your builds to that account.

Step 2: Create or Open Your Expo Project

If you are starting fresh, scaffold a new project. Run npx create-expo-app my-app and follow the prompts.

This gives you a working React Native app that runs on both iOS and Android out of the box, with TypeScript support available.

If you already have an Expo project, simply change into its directory instead. The build steps are the same regardless of how the project was created.

Many AI builders such as Rork or Bolt generate exactly this kind of Expo project. If you exported code from one of those tools, you can pick up right here and build it with EAS.

Step 3: Configure the Build

Run eas build:configure from inside your project. This creates an eas.json file that defines your build profiles.

The generated file typically includes development, preview, and production profiles. Each describes how EAS should build your app for a given purpose.

For a first real iOS build, the production profile is usually what you want. It produces a release binary suitable for TestFlight and the App Store.

You generally do not need to hand-edit eas.json for a basic build. The defaults are sensible, and you can refine profiles later as your needs grow.

Step 4: Start the iOS Build

Kick off the build with a single command: eas build --platform ios. EAS uploads your project to the cloud and begins compiling.

The first time you build, EAS will ask about credentials. Let EAS handle them automatically unless you have a specific reason to supply your own.

You will be prompted to sign in with your Apple ID so EAS can create a distribution certificate and provisioning profile. This is the step that normally requires a Mac and Xcode, and EAS does it for you.

Once credentials are sorted, the build enters the queue. You can watch progress in the terminal or on the Expo dashboard in your browser.

Step 5: Monitor and Download the Result

Builds take several minutes depending on queue position and project size. The terminal streams a link to the build page where you can follow logs in real time.

When the build succeeds, EAS gives you a link to the finished binary. For iOS this is an .ipa file, the installable package format for Apple platforms.

If the build fails, the logs pinpoint where. Common early failures relate to dependencies or credentials, both of which the logs describe clearly.

Keep the build page bookmarked. You will return to it to submit the app, and it retains a record of every build you produce.

Step 6: Test on a Real Device

A production build is meant for the App Store and TestFlight rather than direct installation. To test on your own device, the cleanest path is to submit to TestFlight.

Alternatively, use a preview or development build profile to create a build you can install more directly for internal testing.

TestFlight is Apple's official beta distribution channel. Once your build reaches App Store Connect, you can invite testers by email and they install through the TestFlight app.

Testing on a real device is important. The simulator does not catch everything, and physical hardware surfaces issues with performance, permissions, and device-specific behavior.

Choosing the Right Build Profile

The build profile you pick shapes what you get out of EAS, so it is worth pausing on. A production profile creates a release build meant for TestFlight and the App Store.

A preview profile is useful for internal sharing. It produces a build you can distribute to testers without going through the full store pipeline.

A development profile creates a development build, which pairs with the Expo development client and supports fast refresh while including any custom native modules your project uses.

These profiles live in eas.json, and you can add or customize them as your needs grow. For a first App Store attempt, production is the profile to reach for.

Starting with the wrong profile is a common early mistake. If a build behaves unexpectedly, confirm you invoked the profile you actually intended.

Set Your App Identity Before Building

Before your first serious build, set a few identity fields in your app configuration. The most important is the iOS bundle identifier, defined under the ios key in app.json or app.config.js.

The bundle identifier uniquely names your app on Apple's systems, so choose it deliberately. Changing it later means registering a new app record.

Set a clear app name and version as well. These surface in TestFlight and on the App Store, and getting them right early avoids confusion.

If you plan to submit through EAS Submit later, matching this bundle identifier to your App Store Connect record is essential. A mismatch causes upload failures that are easy to avoid.

Spending five minutes on identity now saves debugging time later. It is the kind of small setup that quietly prevents a whole class of errors.

Understanding the Limitations

This workflow is powerful, but be clear about what you are building. EAS produces a React Native app in JavaScript or TypeScript, not native Swift.

For the vast majority of apps this is perfectly fine. But if you need native Swift or SwiftUI specifically, this path will not produce that.

You also cannot bypass Apple's requirements. The Apple Developer Program membership is mandatory, and App Store review still applies to your submission.

Finally, cloud builds consume metered resources on paid plans. The free tier is great for learning, but heavy or frequent building may push you toward a paid plan. Check Expo's pricing page for current allowances.

Frequently Asked Questions

Do I need a Mac to build an iOS app with EAS?

No. EAS Build compiles your iOS app on Expo's cloud macOS machines, so you can build from Windows or Linux. You do still need an Apple Developer Program membership.

How long does an EAS iOS build take?

It varies with queue position and project size, typically several minutes. Free-tier builds may wait longer in the queue than paid-tier builds with priority.

What file does EAS produce for iOS?

EAS produces an .ipa file, the standard installable package for iOS apps. You submit this to App Store Connect via EAS Submit or use it for TestFlight distribution.

Can I use code from an AI app builder with EAS?

Yes. AI builders like Rork, Bolt, and a0.dev generate Expo or React Native projects that you can build directly with EAS following these same steps.

Is the first build free?

Expo offers a free tier that lets you build without paying, subject to queue priority and usage limits. Confirm current details on Expo's official pricing page.