IOS / SCREEN TIME
Luna.
An iOS app that makes screen time intentional: shield distracting apps, choose a timed break, and keep the session visible on the Lock Screen.
Shipped on the App Store
- THE ROLE
- iOS Developer · Apple Developer Academy
- THE WHEN
- Oct — Nov 2025
- BUILT WITH
- SwiftUIScreen Time APIActivityKitApp Extensions
The idea
Opening a distracting app is often automatic. Luna puts a decision in that moment: choose the apps to restrict, then deliberately start a timed allowance when you want to use them. The app combines system-level blocking with a visible timer and a history of sessions.
Built with a cross-disciplinary team at the Apple Developer Academy, Luna shipped to the App Store. My role was iOS development, including the Screen Time integration that connects app selection, temporary access, and reapplying restrictions.
How it works
- Choose what to block. FamilyControls handles authorization and app selection. ManagedSettings applies shields to the selected apps, categories, and websites.
- Take a timed break. Starting an allowance temporarily removes the shields. A DeviceActivity monitor reapplies them when the allowance ends, including a fallback at the end of its monitoring interval.
- Keep time visible. ActivityKit and WidgetKit present the session on the Lock Screen and Dynamic Island, with an action to stop it early.
- Share state across extensions. The app, activity monitor, and shield extensions use shared storage for selections and session state.
The engineering challenge
The core flow spans several processes with different lifecycles. A timer on the main screen alone cannot coordinate the app shields, background monitor, and Live Activity. The implementation gives the monitor responsibility for restoring restrictions and shares the selected apps and allowance state across the extensions.
This project deepened my experience with Apple’s Screen Time frameworks and the coordination required to make an app and its extensions behave as one product.
CASE FILE / 03THAT'S THE STORY.
LET'S BUILD THE NEXT ONE ↗