◉RORK LABJP
●GPT-6.1 SOL — Added to Rork's model menu (09-29) with Low, Medium and High effort; included on Pro and Max●SONNET 5.5 — Claude Sonnet 5.5 is selectable: strong at UI design and faster than Sonnet 5 (09-28)●SDK 58 — Beta since 09/15 with no stable date yet; running projects in Expo Go has required login since 09/03●WIDGET — A write-up traces an iOS widget that renders black only in production builds●OBSERVE — EAS Observe now records native crashes too (SDK 57.0.21 or later, 10/07)●NEW — My App Open Ad Only Showed When the App…●GPT-6.1 SOL — Added to Rork's model menu (09-29) with Low, Medium and High effort; included on Pro and Max●SONNET 5.5 — Claude Sonnet 5.5 is selectable: strong at UI design and faster than Sonnet 5 (09-28)●SDK 58 — Beta since 09/15 with no stable date yet; running projects in Expo Go has required login since 09/03●WIDGET — A write-up traces an iOS widget that renders black only in production builds●OBSERVE — EAS Observe now records native crashes too (SDK 57.0.21 or later, 10/07)●NEW — My App Open Ad Only Showed When the App…
Articles/App Dev
◇ App Dev/2026-04-03Intermediate

Beta Testing Your Rork App with TestFlight: from Internal Testers to Public Launch

A practical walkthrough for shipping a Rork or Rork Max app to TestFlight, covering both the EAS Submit route and the Xcode Organizer route. Includes export compliance, internal (100) and external (10,000) tester limits, and the 90-day build expiry that quietly breaks long betas.

Rork585TestFlight15Beta TestingApp Store Connect15iOS Development13Rork Max236App Launch

✦ Premium Article

The problem that isn't an error

The first thing that tripped me up on TestFlight wasn't code signing or review. It was silence.

The upload finished with a green checkmark. The build showed up in App Store Connect with the right number next to it. And the testers I'd invited saw nothing at all.

The cause was a small yellow "Missing Compliance" label sitting next to the build number. Until you answer the export compliance question, that build goes to nobody. It isn't an error, so nothing tells you — you have to go looking.

That turns out to be the pattern with TestFlight. The hard parts aren't the steps that fail loudly; they're the ones that fail silently. This guide walks the full path from a Rork export to testers on real devices, and stops at each of those quiet traps along the way. The examples assume a Rork or Rork Max project, but the mechanics apply to any Expo-based app.

Internal vs. external: what actually changes

TestFlight has two distribution paths with very different characteristics. Picking the wrong one costs you days.

PropertyInternal testingExternal testing
Tester limit10010,000
Who qualifiesApp Store Connect users only (Account Holder, Admin, App Manager, Developer, or Marketing role)Anyone with an email address or the public link
Apple reviewNot requiredRequired for the first build of each version (typically 1–2 days)
Time to distributionMinutes after processing completesAfter review passes
Best forYour own device checks and fast iteration with collaboratorsReal-world conditions and pre-launch signal

You'll still find plenty of sources citing 25 internal testers. That number is out of date — the current limit is 100, with up to 30 devices per tester. At solo-developer scale you will never hit the ceiling, so the real question is simply whether you're willing to add collaborators as App Store Connect users.

My own rhythm: everything stays on internal testing while I'm iterating, and external testing happens once, when a release candidate is genuinely close. Because every version's first external build goes through review, pushing small fixes externally just stacks up waiting time.

✦

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
✦How to choose between the EAS Submit route and the Xcode Organizer route — Expo-based Rork projects can skip certificate work almost entirely
✦The one-line app.json fix for export compliance, the most common reason an uploaded build never reaches your testers
✦Correct tester limits (100 internal, 10,000 external) and how to plan a beta around TestFlight's 90-day build expiry
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

◇ 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.
⬡ 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-10-14
App Review Says "Guideline 2.1, Blank Screen": Three Places to Look in an Expo Release Build
It opens fine in TestFlight, yet review rejects it for a blank screen. Here is the order I check things in an Expo + EAS release build: which environment holds your variables, secret visibility during config resolution, and what the reviewer's device does differently.