RORK LABJP
TOOLING — Rork's developer repos keep moving: rork-xcode was updated on July 16, rork-device on July 15, and rork-plist on July 13OPUS46 — Claude Opus 4.6 is live in Rork, and Rork Max is built to assemble apps on top of Claude CodeSIM — A cloud iOS simulator runs in the browser, with one click to install on a device and two clicks to publish to the App StoreMAX — Rork Max emits pure Swift rather than React Native, reaching iPhone, iPad, Apple Watch, Apple TV, Vision Pro, and even iMessageNATIVE — That opens up HealthKit, ARKit and LiDAR, NFC, Dynamic Island, Live Activities, 3D through Metal, and on-device inference with Core MLSEED — Rork raised a $15M seed led by Left Lane Capital, with Peak XV and a16z Speedrun joining the roundTOOLING — Rork's developer repos keep moving: rork-xcode was updated on July 16, rork-device on July 15, and rork-plist on July 13OPUS46 — Claude Opus 4.6 is live in Rork, and Rork Max is built to assemble apps on top of Claude CodeSIM — A cloud iOS simulator runs in the browser, with one click to install on a device and two clicks to publish to the App StoreMAX — Rork Max emits pure Swift rather than React Native, reaching iPhone, iPad, Apple Watch, Apple TV, Vision Pro, and even iMessageNATIVE — That opens up HealthKit, ARKit and LiDAR, NFC, Dynamic Island, Live Activities, 3D through Metal, and on-device inference with Core MLSEED — Rork raised a $15M seed led by Left Lane Capital, with Peak XV and a16z Speedrun joining the round
Articles/Dev Tools
Dev Tools/2026-03-14Advanced

Moving Six Apps to EAS CI/CD — EAS Build, OTA Updates, and GitHub Actions in Practice

How I moved the build and release pipeline for six indie apps to Expo Application Services: EAS Build for iOS and Android, OTA updates with EAS Update, GitHub Actions integration, and honest notes on free-tier limits.

Rork515EAS6Expo149CI/CD7OTA6GitHub Actions5

Premium Article

Why I moved six apps to EAS — and what broke first

Through the first months of 2026 I was pushing v2.0.0 and v2.1.0 updates across six apps in parallel — most of them wallpaper apps I have been running since going independent in app development back in 2014. Archiving each one in Xcode, uploading to App Store Connect, exporting AABs for Play Console: doing that by hand for six apps swallowed the better part of two days per release wave. And whenever a small bug surfaced afterwards, the whole cycle started over.

Expo Application Services (EAS) is how I got that time back. It builds iOS and Android binaries in the cloud, ships JavaScript-only fixes over the air, and plugs into CI/CD — no local Xcode or Android Studio required, which also means you can build iOS apps without owning a Mac.

One clarification before we start, because the product naming trips people up: since February 2026, Rork generates Expo (React Native) apps for both iOS and Android, while Rork Max is a separate product that generates native Swift apps and compiles them on a cloud Mac fleet — it does not use EAS at all. Everything in this article applies to the Expo (React Native) projects that Rork produces.

What follows is the setup I actually run for my six apps, from first install to production checklist.


Setting up EAS — from the CLI to eas.json

Step 1: Install EAS CLI Globally

npm install -g eas-cli

Verify installation:

eas --version

Step 2: Authenticate with Expo Account

eas login

You'll be prompted to open a browser and log in to your Expo account. If you don't have one, sign up for free at expo.dev.

ℹ️
**Pro Tip**: For CI/CD environments (GitHub Actions, GitLab CI), generate an API token at [expo.dev/settings/access-tokens](https://expo.dev/settings/access-tokens) and store it as the `EXPO_TOKEN` environment variable. This enables passwordless authentication across all pipelines.

Step 3: Initialize EAS Build Configuration

eas build:configure

This command creates an eas.json configuration file in your project root. Below is a comprehensive example with development, preview, and production profiles.

Complete eas.json Configuration

{
  "cli": {
    "version": ">= 5.0.0"
  },
  "build": {
    "development": {
      "distribution": "internal",
      "channel": "development",
      "ios": {
        "buildType": "development",
        "enterpriseProvisioning": "universal-adhoc"
      },
      "android": {
        "buildType": "development",
        "gradleCommand": ":app:assembleDebug"
      }
    },
    "preview": {
      "distribution": "internal",
      "channel": "preview",
      "ios": {
        "buildType": "ad-hoc",
        "provisioning": {
          "teamId": "YOUR_APPLE_TEAM_ID"
        }
      },
      "android": {
        "buildType": "apk",
        "gradleCommand": ":app:assembleRelease"
      }
    },
    "production": {
      "distribution": "store",
      "channel": "production",
      "ios": {
        "buildType": "app-store",
        "provisioning": {
          "teamId": "YOUR_APPLE_TEAM_ID"
        }
      },
      "android": {
        "buildType": "aab",
        "gradleCommand": ":app:bundleRelease"
      }
    }
  },
  "submit": {
    "production": {
      "ios": {
        "appleId": "your-email@example.com",
        "ascAppId": "1234567890",
        "appleTeamId": "YOUR_APPLE_TEAM_ID"
      },
      "android": {
        "serviceAccount": "path/to/service-account.json",
        "track": "production"
      }
    }
  }
}

Profile Breakdown

  • development: For local testing. Internal distribution via Expo Go
  • preview: For QA teams. Builds can be shared via QR code or internal testing tracks
  • production: For App Store / Google Play releases. Generates AAB (Android App Bundle) and App Store-ready iOS builds

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
Working configuration files and step-by-step setup for EAS Build, EAS Update, and GitHub Actions, drawn from running six apps in parallel
How to decide when the free tier's 30-builds-per-month quota stops being enough, with real queue-time observations
A same-day OTA hotfix walkthrough and a rollback design you can copy
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Rork Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

Related Articles

Dev Tools2026-03-21
Setting Up CI/CD for Rork Apps with GitHub Actions and EAS Build
Learn how to build a complete CI/CD pipeline for your Rork app using GitHub Actions and EAS Build. From automated testing on every pull request to hands-free TestFlight deployment, this guide walks you through the entire setup.
Dev Tools2026-06-28
Ship EAS Updates to a Few First, and Halt Automatically on Crash Rate
Because OTA updates reach everyone instantly, a bad update reaches everyone instantly too. Here is a three-layer design: ship EAS Update to a small canary, decide expand-or-halt from crash-free rate automatically, and hold a safety net on the device — with working code.
Dev Tools2026-06-24
When EAS Update Ships but the Bug Won't Die — Why OTA Stalls Silently, and How I Operate Around It
EAS Update can succeed and still fail to reach a slice of your users. These are field notes on runtimeVersion drift, updates that publish but never get adopted, and choosing the right rollback — with the instrumentation that actually helped on my Rork apps.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →