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.
The engine
Generate native projects, then run xcodebuild or gradle and produce
a signed .ipa or .aab. Ordinary scripting.
The credentials
Certificates, provisioning profiles, keystores, API keys. Getting these right is most of the real difficulty.
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.
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.