◉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/Dev Tools
⬡ Dev Tools/2026-04-28Advanced

Implementing Screen Time Control Apps with Rork Max — Family Controls / DeviceActivity / ManagedSettings

A complete walkthrough for shipping a Screen Time-style app with Rork Max — covering Family Controls authorization, DeviceActivity scheduling, and ManagedSettings shielding via custom native modules and a DeviceActivityMonitor extension.

Rork Max236ScreenTime APIFamily ControlsDeviceActivityManagedSettingsiOS Development13Native Modules5

✦ Premium Article

Screen Time-style apps — focus timers, parental controls, social-media detox tools — are one of the few iOS categories where new winners launch on the App Store almost every month. While building a "lock specific apps during focus hours" feature for one of my own Rork projects, I hit a wall that almost every Rork developer hits in this space: the default Rork Max template cannot reach Apple's three Screen Time frameworks (Family Controls, DeviceActivity, ManagedSettings) at all.

The reason is simple. All three frameworks require the special Family Controls entitlement, which Apple grants only after a manual review request, and they only work in concert with an App Extension that runs in the background. Rork Max is essentially a polished React Native + Expo runtime, so anything outside of the prebuilt Expo modules requires you to write a custom native module yourself.

This guide walks through the full path I followed to ship a focus-time app on Rork Max — entitlement request, native module bridge, extension target, App Group plumbing, App Store review tactics — based on what actually worked, not what the documentation implies should work.

Why Rork Defaults Cannot Ship a Screen Time App

Out of the box, Rork Max bundles the standard Expo SDK modules: camera, notifications, location, secure storage, and so on. None of the three Screen Time frameworks ride on that train. Specifically:

  • The FamilyControls framework refuses to even compile without the com.apple.developer.family-controls entitlement on your provisioning profile
  • The DeviceActivity framework's "fire a callback when this time window starts" mechanism is delivered as an App Extension target — not in your main app — because the OS calls it when your app is not running
  • ManagedSettings, which actually applies the shield, depends on shared state between the main app and the extension via an App Group container

For a typical "swipe through screens" app, Rork's Vibe Coding loop covers 95% of what you need. Screen Time work, however, crosses three boundaries at once: OS-level permissions, extension targets, and shared data. Trying to fake any of these layers is the fastest way to lose a weekend. The pragmatic move is to set up the right architecture from day one — Rork main app, Swift native module, Extension target, App Group — and never look back.

Architecture: The Three Frameworks at a Glance

Before we start writing code, let's pin down what each framework actually does. Confusing them is the most common source of "why won't this work" sessions later.

  • FamilyControls is the consent and selection layer. It owns the prompt that asks the user to grant Screen Time access, and it owns FamilyActivityPicker, the SwiftUI component that lets the user pick which apps and categories to govern. The user's choice comes back as a FamilyActivitySelection — a privacy-preserving opaque token, not a list of bundle IDs
  • DeviceActivity is the scheduling layer. It says "when this time window opens, wake up an extension" or "when this app has been used for 30 minutes today, notify me." The extension runs even when your main app is terminated
  • ManagedSettings is the enforcement layer. Hand a FamilyActivitySelection to a ManagedSettingsStore, and the OS immediately blocks those apps with a system shield UI

So the architecture is a three-stage rocket: pick targets (FamilyControls) → register schedule (DeviceActivity) → block on cue (ManagedSettings).

How This Maps to a Rork Project

Here's the layout I settled on, which I'd recommend as a starting point:

  • Main app (Rork Max build): React Native UI, calls into Swift via the custom Expo module
  • Native Module (Swift): bridges authorization requests, picker presentation, schedule registration, and shield management to JS
  • DeviceActivityMonitor Extension (Swift): a separate target. The OS wakes it up at schedule boundaries; it pulls the saved selection from shared storage and applies the shield
  • App Group: group.{your-bundle-id}.shield added to both targets, used as the single source of truth for the user's blocklist via UserDefaults(suiteName:)
✦

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
✦Anyone stuck on why Rork Max alone cannot ship a Screen Time app will walk away with a working three-framework integration — Family Controls, DeviceActivity, ManagedSettings — embedded as a custom Expo module.
✦You'll have copy-pasteable Swift modules for FamilyActivityPicker presentation, DeviceActivityCenter scheduling, and a dedicated DeviceActivityMonitor extension with App Group data sharing — no more guessing about entitlements or extension targets.
✦You'll know how to dodge the five most common shipping pitfalls (FamilyActivitySelection privacy boundaries, App Group misnaming, jetsam crashes in extensions, child-mode simulator failures, App Review rejections) and submit a build that actually clears review.
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-07-18
The Generated Screen That Quietly Jams at AX5 and in German — Putting Layout Resilience Checks on Rork Max SwiftUI
A record of running every Rork Max generated SwiftUI screen through pseudolocalization and the largest text size to find exactly where it jams. Covers when to reach for ViewThatFits, ScaledMetric and layoutPriority, plus the snapshot checks that catch regressions every time you regenerate.
⬡ Dev Tools2026-05-17
Testing Rork Max SwiftUI Features on a Real Wallpaper App — What Worked, What Needed Fixes
I benchmarked Rork Max's SwiftUI generation against the production code of a wallpaper app I actually run. Here is what shipped as-is, what needed fixing, and what I ended up writing by hand — with working code and on-device measurements.
⬡ Dev Tools2026-05-16
Migrating Firebase CocoaPods to SPM in Rork Max Apps
Firebase Apple SDK's CocoaPods distribution ends in October 2026. Here's a detailed migration log from moving 4 Rork Max iOS apps to Swift Package Manager — including dSYM failures, module errors, and the Dropbox conflict copy problem you'll definitely hit.