◉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)●SONNET 4.5 — Retires on the Claude API on 11/30, 27 days left. If your app calls it, check the migration target●SDK 58 — Moves to React Native 0.88. R8 is now on by default in Android release builds, and iOS prebuild generates a SceneDelegate●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)●SONNET 4.5 — Retires on the Claude API on 11/30, 27 days left. If your app calls it, check the migration target●SDK 58 — Moves to React Native 0.88. R8 is now on by default in Android release builds, and iOS prebuild generates a SceneDelegate●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/Dev Tools
⬡ Dev Tools/2026-06-17Advanced

Checking Age Without Collecting Birthdays — Wiring the Declared Age Range API into a Rork App

How to use the iOS 26 Declared Age Range API to receive an age band without ever storing a birthdate, with both the Rork Max native Swift path and the standard Rork (Expo) native-module bridge, plus where to draw the responsibility boundary.

rork-max40ios-26age-verificationswift8expo14

✦ Premium Article

What I Noticed One Morning Before Submission

I was about to ship a small wallpaper-app update and was reviewing the age-related settings in App Store Connect. The field where declaring an "age rating" used to be enough now sat next to a new premise: in some regions, actual age verification is expected.

My first instinct was the old-fashioned one—add a birthdate field. But for a small solo-developer app, holding someone's birthdate is too heavy a burden. The moment you collect it, it becomes personal data you are responsible for storing, protecting, and deleting on request.

The Declared Age Range API, introduced in iOS 26, offers a different route. Your app asks the system for an age band rather than a birthday, and the OS answers with the minimum it needs to, based on the signed-in iCloud account. No birthdate ever reaches your app. This article walks through wiring that API into apps built with Rork, covering both the Rork Max (native Swift) and standard Rork (Expo) paths.

The Problem This API Is Solving

Traditional age checks carry a structural dilemma. Push for accuracy and you end up collecting birthdates or IDs, which inflates both privacy risk and operational cost. Settle for a single "Are you 13 or older?" checkbox and you haven't really verified anything.

The Declared Age Range API hands that bind off to the OS. All your app declares is the age gates that are meaningful to it. Pass boundaries like 13, 16, and 18, and the system asks the user, then reports only which band they fall into. Your app can learn that someone is "in the 16-and-over band" without ever receiving an exact age or birthday.

I find the trade-off in this design convincing. What an app actually needs is a basis for deciding "is this the right audience for this feature"—not the birthday itself.

✦

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
✦A pattern that handles all three requestAgeRange outcomes (shared, declined, age band) without dropping a case
✦How to build the native-module boundary so a standard Rork (Expo) app can call the API and survive regeneration
✦A realistic read on the Texas new-account requirement (from Jan 1, 2026, iOS/iPadOS only) and how far it actually reaches
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-10-23
Failed to resolve plugin for module: Check the Spelling, the Install, the File, Then the Contents
You add one line to plugins in app.json and Expo stops with PluginError: Failed to resolve plugin for module. I reproduced the causes behind that one message in a blank Expo SDK 58 project and put them in the order I now check them, using a single command.
⬡ Dev Tools2026-05-20
Fixing 0x8badf00d Watchdog Kills That Wipe Out Rork Apps at Launch
Your Rork iOS app dies right after launch on real devices, but never on your bench. Crashlytics shows exception code 0x8badf00d. Here is how to read the exact watchdog budget out of the crash log and rearrange your launch path so it stops.
⬡ Dev Tools2026-04-24
When Your Rork App Binary Tops 150MB: 5 Causes to Isolate and a Step-by-Step Slim-Down Plan
My Rork-built app archived at 172MB and App Store Connect stopped me cold. Here is how I broke the bloat into 5 measurable causes and got it down to 69MB — including the three cuts that backfired.