◉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-05-01Advanced

Implementing Screen Recording and Broadcast in Rork Max — A Production Guide for ReplayKit and MediaProjection

Integrate iOS ReplayKit and Android MediaProjection into your Rork Max app for gameplay recording, tutorial creation, and live broadcasting—covering the full production pipeline.

Rork Max236ReplayKitMediaProjectionScreen RecordingLive BroadcastiOS116Android55

✦ Premium Article

All I want is a "record" button — why is this so hard?

A user wants to share what they did inside your app. A gamer wants to capture a high score moment for social media. A creator wants to make a tutorial and post it on YouTube. When these requests come in, "screen recording, easy enough" turns out to hide a surprising amount of complexity.

iOS gives you ReplayKit, which on paper looks tidy. But the docs list four different APIs—In-App Recording, Broadcast Upload Extension, Broadcast Pairing, App Recording—and it's not obvious which one you should reach for. Android is messier still: the MediaProjection API requires a Foreground Service paired with a persistent Notification, and if the lifecycle isn't perfect the OS will silently kill your service mid-recording. On top of that, getting any of this working from React Native means writing native modules or stitching together community libraries.

I've shipped recording features in a few apps now, and the first attempt I made hit the Broadcast Upload Extension's 50 MB memory ceiling and crashed in production. App Store review then rejected the build because "the app does not provide a clear indication that screen recording is active." This guide is the writeup I wish I'd had on day one—real implementation patterns for Rork Max apps, with working code and the operational pitfalls called out.

Four ReplayKit APIs — which one should you actually use?

ReplayKit has been around since iOS 9, but the API surface has grown in waves. Here's what each one is for, in plain language:

  • RPScreenRecorder (In-App Recording): Record the app itself, then let the user trim, save, or share the resulting MP4. Best for highlights, tutorials, and shareable moments. Easiest to implement
  • RPBroadcastActivity (Broadcast): Stream directly to Twitch, YouTube Live, etc. Requires a Broadcast Upload Extension target with significant system constraints
  • In-App Broadcasting (iOS 12+): Stream to your own backend using WebRTC or RTMP. The hardest of the four—you need a media pipeline
  • App-Wide Recording (Control Center): User-initiated from Control Center. Your app has almost no control, so this guide skips it

My recommendation: start with RPScreenRecorder for In-App Recording. Add a Broadcast Extension later only when you actually need streaming. Going in the opposite direction is how I burned weeks the first time around.

✦

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
✦Developers stuck on how to let users record their in-app moments and share them with friends will walk away with working ReplayKit and MediaProjection implementations for both platforms
✦Engineers wrestling with Broadcast Upload Extension setup will learn the exact Xcode target configuration, App Group sharing, and sample buffer handling needed to ship it
✦You'll be able to release a screen recording feature that satisfies both Apple's and Google's latest privacy and review guidelines without rejection
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-09-10
I Added a Dim Screen Button, and iPhones Stayed Dark After the App Was Closed
In expo-brightness, setBrightnessAsync applies only to the current activity on Android, but changes the device brightness itself on iOS. Here is why the cleanup burden falls on one platform only, and a hook that restores brightness through AppState.
⬡ 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.
⬡ Dev Tools2026-05-15
Rork Max Android App Crashes Only on Older OS Versions: Java 8 Desugaring Fix
Diagnose why your Rork Max Android app crashes only on older OS versions (Android 6–8) and fix it permanently with Java 8 core library desugaring. Includes the two cases where the fix alone was not enough.