◉RORK LABJP
●GPT6.1 — GPT-6.1 Sol joined Rork's model menu on Sep 29. It costs the same as GPT-6 Sol and reads a 1M-token context●10/12 — 6 days until the planned React Native 0.88.x release. Expo SDK 58 stable comes after it, and the Expo Go update drops SDK 57 support●CRYPTO — An issue says expo-crypto's digest() accepts ArrayBuffer in TypeScript but the Android native side wants a TypedArray. A fix PR is open●NEW — Sorting model-menu changes into three types and keeping a ledger of where your credits go●SDK58 — As of yesterday's check, no stable date for SDK 58 was out yet●SHEET — A report says expo-ui's BottomSheet renders presentationBackground materials flat and opaque●GPT6.1 — GPT-6.1 Sol joined Rork's model menu on Sep 29. It costs the same as GPT-6 Sol and reads a 1M-token context●10/12 — 6 days until the planned React Native 0.88.x release. Expo SDK 58 stable comes after it, and the Expo Go update drops SDK 57 support●CRYPTO — An issue says expo-crypto's digest() accepts ArrayBuffer in TypeScript but the Android native side wants a TypedArray. A fix PR is open●NEW — Sorting model-menu changes into three types and keeping a ledger of where your credits go●SDK58 — As of yesterday's check, no stable date for SDK 58 was out yet●SHEET — A report says expo-ui's BottomSheet renders presentationBackground materials flat and opaque
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.

FastlaneEAS8CI/CD8TestFlight14Play ConsoleApp Store Connect14release automationGitHub Actions5indie development42

✦ 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 here 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 $15 for lifetime access
View Membership →

Related Articles

⬡ 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, how to read the ITMS error codes, and a short script that reads the processing state from the API — with working code.
◇ App Dev2026-09-10
Your First EAS Workflow in a Rork Repo, and the Alert That Goes Missing Exactly When You Need It
Putting two files into .eas/workflows in a repo exported from Rork, and why a notification wired with needs stays silent on exactly the nights it fails — with the output of a small local checker I actually ran.
📚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