RORK LABJP
FUNDING — Rork raises a $15M seed led by Left Lane CapitalRORK MAX — Rork Max generates native Swift apps instead of React NativePLATFORM — It targets iPhone, iPad, Watch, and Vision Pro, reaching Live Activities and Core MLGROWTH — Traffic keeps climbing at 743K monthly visits and 85% growthTEST — The Companion app lets you test on a real device without a paid Apple Developer accountSTACK — Built on React Native and Expo for true native experiences, not web wrappersFUNDING — Rork raises a $15M seed led by Left Lane CapitalRORK MAX — Rork Max generates native Swift apps instead of React NativePLATFORM — It targets iPhone, iPad, Watch, and Vision Pro, reaching Live Activities and Core MLGROWTH — Traffic keeps climbing at 743K monthly visits and 85% growthTEST — The Companion app lets you test on a real device without a paid Apple Developer accountSTACK — Built on React Native and Expo for true native experiences, not web wrappers
Articles/Dev Tools
Dev Tools/2026-04-21Advanced

Rork × Fastlane × EAS Release Automation Guide — Ship Screenshots, Metadata, and TestFlight/Play Console Builds With One Command

A production-ready implementation guide for automating Rork app releases with Fastlane and EAS. Generate screenshots, sync store metadata, and ship to TestFlight and Google Play with a single command.

FastlaneEAS6CI/CD7TestFlight11Play ConsoleApp Store Connect9release automationGitHub Actions5indie development27

Premium Article

If you run iOS and Android apps on your own, the release process itself is the biggest time thief. Bump the version, open App Store Connect, swap out screenshots, rewrite release notes in English and Japanese, upload to TestFlight, then do the whole thing again in Play Console. Two releases a week, and you've burned a full afternoon on ceremony — something I suspect every solo developer has felt at least once.

Rork positions itself as a tool that lets you build apps without writing code, but in my experience the real time sink isn't coding — it's all the manual work around shipping. So in this guide I'll walk you through the setup I actually use to combine Fastlane + EAS (Expo Application Services) for Rork apps, compressing screenshot generation, metadata sync, and TestFlight / Play Console delivery into a single command.

This goes deep, but once it's in place, a release takes about eight minutes of walltime and less than two of actual hands-on work. An afternoon this weekend is a fair investment.

Quick orientation: this guide assumes you already have a Rork project that produces an Expo-managed React Native app, you've published at least one version to the stores manually (so the listings exist), and you're comfortable running shell commands in a Unix-like environment. If any of that isn't true yet, bookmark this and come back after you've shipped your first build — the automation pays off more when you've felt the manual pain at least once. Everything below is written from the perspective of a solo developer who ships often, not a large team managing a fleet of apps, so the trade-offs lean toward simplicity and fast recovery over enterprise-grade audit trails.

What changes — time savings I actually measured

Before diving in, here are the real numbers from the three apps I run. I timed a typical release both ways:

  • Manual release (2 locales × iOS/Android): about 2 hours 30 minutes per release
  • After Fastlane + EAS automation: about 8 minutes (2 minutes of local input, the rest CI wait)

At two releases a week that's over four hours a month, more than fifty hours a year. Even better, human errors — wrong screenshot dimensions, missed translations, reusing an old build number — drop to essentially zero, so App Review rejections due to trivial metadata mistakes go away too.

The key design decision is to split responsibilities between EAS and Fastlane:

  • EAS builds the iOS and Android binaries in the cloud. You don't need a local Xcode or Android Studio setup.
  • Fastlane ships those binaries to TestFlight and Play Console, and syncs metadata + screenshots to App Store Connect and Google Play.

EAS does have eas submit for store uploads, but it does not handle metadata sync, screenshot swaps, or review information. That's the gap Fastlane fills in this setup, and it's why both tools earn their place.

Project layout — put Fastlane at the repo root

Create a fastlane/ directory at the root of your Rork project with this structure:

  • fastlane/Fastfile — lane definitions
  • fastlane/Appfile — app identity (Team ID, Bundle ID, Package Name)
  • fastlane/Matchfile — certificate sync config (iOS)
  • fastlane/Deliverfile — App Store Connect metadata config
  • fastlane/Supplyfile — Google Play metadata config
  • fastlane/metadata/ios/{ja,en-US}/ — iOS store metadata (description, keywords, etc.)
  • fastlane/metadata/android/{ja-JP,en-US}/ — Android store metadata
  • fastlane/screenshots/ios/{ja,en-US}/ — iOS screenshots
  • fastlane/screenshots/android/{ja-JP,en-US}/ — Android screenshots
  • fastlane/.env.default — non-secret defaults
  • fastlane/.env.secret — secrets (never commit this)

I switch between iOS and Android by naming lanes per platform (ios_beta, android_beta). You can use Fastlane's platform :ios do ... end wrapping, but at indie-project scale a flat lane list is easier to scan.

Pin Ruby with a Gemfile

Fastlane is Ruby, so the only way to keep CI and local behavior in sync is a Gemfile:

# Gemfile
source "https://rubygems.org"
 
gem "fastlane", "~> 2.224"
gem "cocoapods", "~> 1.15"   # only if you have native modules
 
ruby "3.3.0"

Also add 3.3.0 to .ruby-version. On CI, run bundle install --path vendor/bundle and cache vendor/bundle — this alone eliminates a whole class of "works on my machine" headaches.

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
You can take home a working setup that bundles screenshot generation, metadata sync, and TestFlight / Play Console delivery behind one command, starting today
You will learn the exact patterns for handling App Store Connect API keys and Google Service Account JSON safely from GitHub Actions — including cleanup on failure
Even if you ship twice a week, the release chore disappears from your calendar so you can focus on features and writing again
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-03-14
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.
Dev Tools2026-06-17
Your Rork App Is Stuck on "Processing" in App Store Connect — A Field Guide to Getting It Unstuck
You uploaded a Rork-built app to App Store Connect, but the build sits on Processing for hours and never shows up in TestFlight or for submission. Here is the exact diagnostic order I follow, plus the pre-upload checks that stop it from happening again — with working code.
📚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 →