Journal · · 13 min read · Updated
What an iPhone app can actually block, and what it structurally cannot
No third-party iPhone app blocks anything by itself. It asks iOS to do the blocking, through three Apple frameworks with sharp, published limits. Those limits are why your blocker cannot name the apps you blocked, why notifications still arrive, and why the honest answer to 'can this be bypassed' is always yes.
Ask most people how an app blocker works on iPhone and you get some version of this: the blocker sits in the background, watches what you open, and slams a door when it spots Instagram.
None of that is possible. A third-party iOS app cannot see which apps you launch, cannot run continuously in the background to watch for one, and cannot draw a single pixel over another app. Every blocker on the App Store asks iOS to do the blocking on its behalf, through three frameworks Apple shipped in 2021 and has extended in small steps since.
That detail decides what your blocker can do, what it will never do however much you pay, and exactly how you get out, which is the part nobody puts in the App Store screenshots.
What actually blocks an app on an iPhone?
Three frameworks, together called the Screen Time API, introduced in the WWDC21 session Meet the Screen Time API. A fourth, ManagedSettingsUI, only controls how the blocking screen looks.
| Framework | Its one job | The types you actually touch | What it cannot do |
|---|---|---|---|
| FamilyControls | Get permission, and let the user choose apps | AuthorizationCenter, FamilyActivityPicker, FamilyActivitySelection |
Tell your code which apps were chosen |
| ManagedSettings | Apply the restriction | ManagedSettingsStore, ShieldSettings (.applications, .applicationCategories, .webDomains), ApplicationSettings (denyAppRemoval) |
Outlive the authorisation that created it |
| DeviceActivity | Anything to do with time | DeviceActivityCenter, DeviceActivitySchedule, DeviceActivityEvent, DeviceActivityMonitor |
Run your code continuously; the extension wakes on events only |
| ManagedSettingsUI | Style the shield | ShieldConfigurationDataSource, ShieldActionDelegate |
Anything except draw a title, subtitle, icon and up to two buttons |
In a real app the sequence is short. Ask for authorisation through AuthorizationCenter.shared, in .individual mode for self-restriction or .child mode for a Family Sharing parent. Present the picker. Put whatever came back into a ManagedSettingsStore as store.shield.applications. Register a schedule with DeviceActivityCenter, and let iOS wake your DeviceActivityMonitor extension at interval boundaries and usage thresholds so it can change the store.
Two practical limits keep the category smaller than it looks. The Family Controls capability adds the com.apple.developer.family-controls entitlement, and distributing it on the App Store requires asking Apple for it. And the DeviceActivityMonitor extension is not a daemon: iOS wakes it, gives it a short slice of time, and suspends it. Anything a blocker claims to do “continuously” happens at moments Apple chooses.
Why the blocker never learns which apps you picked
Of all the design decisions in the API, this one has the biggest consequences.
The app-selection UI is FamilyActivityPicker, and it belongs to Apple, not the developer. It renders out of process, it lists your installed apps, and it returns a FamilyActivitySelection containing sets of tokens: ApplicationToken, ActivityCategoryToken, WebDomainToken. Apple’s documentation for Token describes it as a representation of an app or website “that doesn’t reveal its identity,” and the ApplicationToken page says the point is to restrict and filter apps without access to personal user data.
So a blocker holds an opaque blob, which it hands back to ManagedSettings to raise a shield. It never receives a bundle identifier or a display name, and there is no way to reverse the token. A token also means something only to the app that received it, and it stops working the moment you revoke authorisation in Settings, because revocation invalidates the app’s tokens along with its permission.
For privacy this means a screen-time app physically cannot log that you blocked Grindr, or Robinhood, or your ex’s favourite app. It hasn’t promised not to; it is unable to. That is privacy by construction, and the strongest such guarantee in any category I have shipped into.
For the product it is a real tax, and every developer in this category pays it:
- You cannot offer a one-tap “block the usual suspects” onboarding, because you cannot name the suspects.
- You cannot tell the user, in your own copy, which apps are currently shielded.
- You cannot verify from your own data that a user selected anything at all, so support requests (“it isn’t blocking anything”) turn into guided screenshot sessions.
Apple made that trade, not the developer, and I think it made the right one.
Which approach blocks what?
Five approaches get sold as “app blocking”, and they intercept at completely different layers. Price matters less here than where each one sits in the stack.
| Approach | What it blocks | What it cannot block | How it is bypassed | Works offline | Who it actually suits |
|---|---|---|---|---|---|
| Built-in Screen Time (Apple’s setup guide) | App and category time limits, Downtime, content ratings, web content; syncs across your devices with Share Across Devices | Nothing beyond Apple’s own categories; no custom unlock condition | Your own passcode, or the Ignore Limit button | Yes | Anyone who has not tried it: it is free, and it covers the Mac and iPad too |
| Family Controls shield app (Opal, one sec, ScreenZen, Jomo, EarnLock) | Any app or Apple category you select on this iPhone, plus Safari web domains in apps that support them | Notifications, other devices, and anything after you revoke authorisation | Whatever escape hatch the app ships, then revoking authorisation in Settings | Yes, because state is local and enforced by iOS | People who want an unlock condition other than “wait” or “type your passcode” |
| DNS or VPN content filter (NetworkExtension) | Domains and traffic patterns, system-wide, including apps you did not select | Anything on cellular when the profile is off, encrypted DNS inside an app, or a service sharing a CDN with something you need | Toggle the VPN off in Settings, roughly three taps | No, it is a network mechanism by definition | Blocking whole classes of content (ads, adult sites), not a named app |
| Separate device or lockbox (dumbphone, timer safe, Brick’s NFC tag) | Everything on the device you left behind | Every other screen in the building | Physically retrieving the object | Yes | People whose problem is one hour in one place: writing sessions, dinners, sleep |
| Grayscale and friction (Color Filters, Focus modes, apps off the Home Screen) | Nothing; it only makes the phone duller and slower to reach | Anything, if you actually want it | Three taps in Settings, or Spotlight | Yes | Drift more than compulsion: the person who opens an app for no reason and stays for 40 minutes |
Two notes on that table. A DNS filter is the only row that touches apps you did not list, which makes it the right tool for adult-content blocking and the wrong tool for “keep me off X between 9 and 5.” And Apple’s own review rules constrain the VPN row: App Store Review Guideline 5.4 requires VPN apps to use NEVPNManager and to come from a developer enrolled as an organisation, and the content-filter entitlement is granted case by case, which is why so few of these exist.
Can an app block Instagram on iPhone?
Yes, with three caveats that matter more than the yes.
The app, properly. Select Instagram in the picker, put the token in store.shield.applications, and tapping the icon shows a shield instead of launching the app. The app does not open in the background, does not refresh, does not get its five seconds.
The website, mostly. ShieldSettings.webDomains covers Safari. Selecting web content in the picker is what makes instagram.com in Safari behave the same way as the app. Coverage inside third-party browsers and in-app web views is less predictable, and I would not build a plan around it.
Not the notifications. A shield stops a launch. It does not stop delivery. If a badge and a banner are what pull you in, the shield fixes the wrong half of the loop, and a Focus mode is the better tool, or the two together.
Not your other screens. The store is local to the device. Your iPad, your Mac, and the work laptop are all untouched. Family Controls does not ship on macOS in a form that supports this mechanic, so any shield app that does cover the Mac uses a different mechanism there.
Is there an app blocker that cannot be bypassed?
No, not on a device you own and control, and that is deliberate. If a third-party app could permanently restrict your phone, the first malicious app to ship would brick a lot of phones, so Apple keeps the exit in your hands.
There is always a way out. The useful question is how long it takes and whether the effort lands somewhere useful. Here is the ladder, cheapest first.
| Way out | Roughly how long | What it costs you | Can the app tell? |
|---|---|---|---|
| Tap-through or “I really need this” button, if the app ships one | 1 to 2 taps, under 5 seconds | Nothing | Yes, it fired the action |
| Wait out a timer or a breathing pause | 5 to 60 seconds | Attention, the currency you were defending | Yes |
| Solve a gate: a math problem, a long typed phrase | 20 to 60 seconds | Concentration, which is the point | Yes |
| Delete the blocker | ~10 seconds, unless denyAppRemoval is set |
Your settings, history, streak | No, it is gone |
| Revoke Family Controls in Settings | ~15 seconds if you know the path | Every shield drops at once; tokens are voided | Yes, authorizationStatus is observable |
| Turn off Screen Time entirely | ~20 seconds | Your limits and your usage history | Yes |
| Erase and restore the device | 30+ minutes | Everything | No |
| Someone else holds the Screen Time passcode | Not available to you | Autonomy, a real cost and sometimes worth paying | N/A |
Two rows need comment. ApplicationSettings.denyAppRemoval is real: a blocker can prevent app deletion device-wide, which closes the cheapest exit. And revocation is observable, so an app can watch its own authorisation status and know the moment you walked out. Whether it should do anything with that beyond recording it for you is a design question with an obvious wrong answer.
Read down that ladder and “unbypassable” stops meaning anything. What varies is how many seconds sit between the impulse and the app, and whether those seconds buy you anything.
What the API reality means for design
I wrote a while ago that the unlock cost has to live outside the app: a cost you set yourself, inside the software, is a cost your craving can renegotiate in the middle of the craving. The API facts above make the same argument at the level of the platform. Revocation is always about fifteen seconds away, so the wall is not the product. The price is.
And the price should be paid somewhere your future self benefits. Waiting fails that test: you pay in attention, which is exactly what you were trying to protect, and you get nothing back. Body movement passes it, because the cost lands in the rest of your life.
The other designs are not wrong for that. Several are good for problems mine does not solve:
one sec interrupts before the app opens, with a breath, a pause or a question. If your thumb arrives before your intention does, that suits you better than a hard gate, because it targets the reflex. A gate you have already earned your way past does nothing about a reflex. one sec also runs on Android, which nothing of ours does.
Brick puts a physical NFC tag in the loop, around $59 one time. Leaving the tag at home is a commitment you cannot undo from the couch, and it is the only design in the category where the friction is made of atoms instead of software you authorised. The cost is an object to buy, carry, and lose. Unpluq works on the same physical principle, paired with a subscription.
ScreenZen is free, with escalating pauses, and being free is a real advantage that EarnLock’s $19.99 lifetime tier does not erase. Opal and Jomo are more polished than we are, and Jomo covers iPhone, iPad, and Mac.
EarnLock uses exactly the same three frameworks as all of them and does nothing Apple does not publish. What it changes is the price: the apps you pick stay locked until you reach a daily activity goal read from Apple Health (steps on the free tier, active minutes or active calories with Premium). Halfway to the goal opens them for an hour, and the full goal opens them until midnight. Its shield replaces Apple’s generic restriction screen with the number that’s left. 2,026 steps until unlock tells you where you’re going; This app has been restricted just stops you. With Premium, the Apple Watch app reads its own Health data and shows how far you are from unlocking, while the iPhone does the locking. Which number to set is its own question, covered in what the step-count studies support. Locking one app is free; Premium is $1.99/month, $9.99/year, or $19.99 once.
EarnLock has the same constraints as everything else on this page. It cannot see which apps you blocked either. It does not stop notifications. It is an iPhone app, with an Apple Watch app in Premium, and has no iPad or Mac version. It has one math-gated emergency unlock per day, on purpose, because people delete a tool with no exit. And if you open Settings and revoke its authorisation, every shield drops and it can do nothing about that. The same is true of every Family Controls app named on this page, and worth knowing before you pay any of us. (The data rules behind that, and behind every other Lagerland app, are on the transparency page.)
TL;DR
- No third-party iPhone app blocks anything itself. It asks iOS to, via FamilyControls (permission and the picker), ManagedSettings (the shield), and DeviceActivity (schedules and thresholds).
- The picker returns opaque tokens, not app names. Your blocker cannot log, sell, or leak which apps you chose, because iOS never gives it the names. The same rule stops it from pre-filling a recommended list for you.
- A shield blocks launching, not notifying. It covers the app and, via web domains, Safari. It does not cover your iPad, your Mac, or the banner that pulled you in.
- Nothing is unbypassable, by Apple’s design. Revoking Family Controls in Settings takes about fifteen seconds and voids every shield at once.
denyAppRemovalcloses the cheapest exit; nothing closes the last one. - So compare the price, not the wall. What varies is what stands between the impulse and the app (a tap, a wait, a physical tag, or a step count) and whether paying it leaves you better off.
Questions
Frequently asked
Can an app block Instagram on iPhone?
Is there an app blocker that cannot be bypassed?
What is the Family Controls API?
Do app blockers work without an internet connection?
Can an app blocker see which apps I blocked?
Screen Time or a third-party app blocker?
Mentioned in this post
Apps in this post
More from the journal