Section 01

The mental model

Expo's EAS looks like magic from the outside. It isn't. Underneath, it is exactly three things, and once you see them separately the whole tool becomes obvious.

Part one

The engine

Generate native projects, then run xcodebuild or gradle and produce a signed .ipa or .aab. Ordinary scripting.

Part two

The credentials

Certificates, provisioning profiles, keystores, API keys. Getting these right is most of the real difficulty.

Part three

The fleet

Machines to run the engine on. Linux for Android. And — unavoidably — real Macs for iOS.

Why "local" and "cloud" are the same thing

The single most useful decision in leas: a cloud build is not a separate system. When you run leas build --cloud, leas dispatches a GitHub Actions job whose body is literally leas build --local on a rented Mac. One engine, two machines.

This matters more than it sounds. In most build tools, local and cloud drift apart until "works on my machine" becomes a permanent tax. Here they cannot drift, because there is only one code path.

leas build one command --local --cloud Your Mac free, instant, offline Rented fleet macOS runner (iOS) Linux runner (Android) Same engine signed artifact App Store Connect Google Play Console
The one thing you cannot build around

Apple's macOS licence forbids running macOS on non-Apple hardware. So every "cloud iOS build" on earth — Expo's included — is somebody's real Mac. You are not missing a trick; there isn't one. Your only decision is whose Mac you rent.