<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>The Crystalo Blog</title>
    <link>https://crystalo.app/blog</link>
    <atom:link href="https://crystalo.app/blog/rss.xml" rel="self" type="application/rss+xml" />
    <description>Notes on focus, attention and digital wellbeing from the team building Crystalo — plus how the app itself works under the hood.</description>
    <language>en</language>
    <lastBuildDate>Wed, 12 Aug 2026 02:00:00 +0200</lastBuildDate>
    <item>
      <title>How app blocking works on iPhone without seeing your apps</title>
      
      <link>https://crystalo.app/blog/how-app-blocking-works-on-iphone</link>
      <guid isPermaLink="true">https://crystalo.app/blog/how-app-blocking-works-on-iphone</guid>
      <pubDate>Wed, 12 Aug 2026 02:00:00 +0200</pubDate>
      <description>&lt;p&gt;Every focus app that blocks distractions runs into a suspicious-looking question. To stop
you from opening Instagram, doesn&#39;t it first have to know that Instagram is on your phone?&lt;/p&gt;
&lt;p&gt;On iPhone the answer is no, and that comes from how Apple built the frameworks rather than
from a promise any developer makes. App blocking works through opaque tokens: the app asks
iOS to shield something it cannot identify, and iOS does the shielding.&lt;/p&gt;
&lt;h2&gt;Why an app cannot just list your apps&lt;/h2&gt;
&lt;p&gt;The way you would build this on a desktop operating system is direct. List the installed
applications, let the user tick some boxes, then intercept launches of the ticked ones.
Every step needs the list.&lt;/p&gt;
&lt;p&gt;iOS has never allowed the first step. No public API returns the apps installed on someone&#39;s
phone, because that list is personal information. It reveals your bank, your health
conditions, your politics and your employer, without a single one of those apps being
opened.&lt;/p&gt;
&lt;p&gt;So when Apple opened Screen Time controls to third-party developers in iOS 15, it had to
solve blocking without handing over the list.&lt;/p&gt;
&lt;h2&gt;What the app actually receives&lt;/h2&gt;
&lt;p&gt;Three frameworks do the work: FamilyControls, ManagedSettings and DeviceActivity. The
interesting part is the picker.&lt;/p&gt;
&lt;p&gt;When Crystalo shows you the app picker, it is not Crystalo&#39;s picker. The app hands off to
a system interface that Apple draws in a separate process, outside the app&#39;s memory. You
browse your apps and categories there. What comes back is a set of opaque tokens.&lt;/p&gt;
&lt;p&gt;An opaque token is a handle the app can store and compare, but cannot read. It carries no
app name and no bundle identifier. Two devices produce different tokens for the same app,
so a token cannot be matched against a lookup table built somewhere else either.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What the app gets&lt;/th&gt;
&lt;th&gt;What the app never gets&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A count of blocked items&lt;/td&gt;
&lt;td&gt;The names of the blocked apps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokens it can store and compare&lt;/td&gt;
&lt;td&gt;Bundle identifiers or icons&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The schedule you configured&lt;/td&gt;
&lt;td&gt;A notification when a shield appears&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Category selections as tokens&lt;/td&gt;
&lt;td&gt;The list of apps installed on the device&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The shield itself, the grey screen that appears instead of the app you tried to open, is
drawn by the system. The app that requested the block is not running at that moment and is
not told which shield fired. Crystalo knows you blocked eleven things. It does not know
what they are, because there is nothing on its side to look at.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://crystalo.app/img/blog/screen-time-token-path.svg&quot; alt=&quot;Diagram: the system picker returns an opaque token, the app stores it, and iOS enforces the shield while the app is not running&quot;&gt;&lt;/p&gt;
&lt;h2&gt;Why blocking survives a force quit&lt;/h2&gt;
&lt;p&gt;A focus app that only blocks while it sits in the foreground blocks nothing, since the
whole point is that you put the phone down and pick it up ten minutes later.&lt;/p&gt;
&lt;p&gt;ManagedSettings and DeviceActivity handle that half. The app writes restrictions into a
settings store that the system holds and enforces, and registers activity schedules the
system wakes up for. The focus app does not need to be running and does not keep a
background process watching you. The rules live with the operating system, which is the
only thing that can enforce them reliably.&lt;/p&gt;
&lt;p&gt;That is why a block survives a force quit, and why a schedule set on Sunday still fires on
Thursday morning without you opening the app in between.&lt;/p&gt;
&lt;h2&gt;What the research actually says&lt;/h2&gt;
&lt;p&gt;Focus apps like to cite one study in particular. Ward and colleagues reported in 2017 that
having your own phone within reach costs you working memory even when you never touch it:&lt;/p&gt;
&lt;figure class=&quot;quote&quot;&gt;&lt;blockquote&gt;&lt;p&gt;the mere presence of these devices reduces available cognitive capacity&lt;/p&gt;&lt;/blockquote&gt;&lt;figcaption&gt;&lt;a href=&quot;https://www.journals.uchicago.edu/doi/full/10.1086/691462&quot; rel=&quot;noopener&quot;&gt;Ward, Duke, Gneezy and Bos, Journal of the Association for Consumer Research, 2017&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;That result is worth knowing, and so is what happened next. In 2022 Ana C. Ruiz Pardo and
John Paul Minda ran a preregistered replication of the second experiment in Acta
Psychologica and reported that &amp;quot;the &#39;brain drain&#39; effect did not replicate: there was no
difference between smartphone location conditions on performance on either the o-span task
or the go/no-go task.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://crystalo.app/img/blog/phone-presence-desks.jpg&quot; alt=&quot;Two identical desks in the same violet light: a phone lies on the left, the right desk is empty, and nothing else in the scene changes&quot;&gt;&lt;/p&gt;
&lt;p&gt;The honest version is narrower than the marketing version. Moving the phone to another room
may not, on its own, make you measurably sharper. What blocking addresses is simpler and
less contested: the app you would have opened does not open, so the interruption does not
happen.&lt;/p&gt;
&lt;aside class=&quot;caveat&quot;&gt;&lt;p class=&quot;caveat-label&quot;&gt;No evidence for this yet&lt;/p&gt;&lt;p&gt;That a focus app makes you more productive is not something we can point to a study for.
The claim we stand behind is mechanical: the shield is enforced by iOS, so the app you
blocked does not open, whether or not you feel like keeping the promise later.&lt;/p&gt;&lt;/aside&gt;
&lt;h2&gt;The costs of knowing nothing&lt;/h2&gt;
&lt;p&gt;This design gives things up, and the tradeoffs are worth naming.&lt;/p&gt;
&lt;p&gt;The app cannot show you a grid of the apps you blocked with their real icons and names. It
can only show the system picker again. It cannot tell you that you tried to open a
particular app fourteen times on Tuesday, because that event never reaches it. Per-app
rules that assume knowledge of the app are impossible by construction.&lt;/p&gt;
&lt;p&gt;There is also a platform limit. These frameworks are iOS and iPadOS only, so a Mac build
keeps sessions, the collection and iCloud sync while dropping blocking entirely.&lt;/p&gt;
&lt;p&gt;We think the trade runs the right way. A focus app asks for your attention at the moment
you are least able to guard it, so it should ask for as little else as possible. A promise
not to look at your data can be broken quietly. A design that never receives the data
cannot be.&lt;/p&gt;
&lt;h2&gt;Where that leaves your data&lt;/h2&gt;
&lt;p&gt;Nothing about your blocked apps leaves the device, because nothing identifiable arrives in
the first place. Crystalo has no account gate either: sessions, crystals and settings live
on the device and sync through your own private iCloud, and the optional sign-in exists for
team leaderboards and invite rewards rather than for your blocking data. Screen Time
summaries shown inside the app are rendered locally.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://crystalo.app/privacy&quot;&gt;privacy policy&lt;/a&gt; says the same thing in more detail, and it is short for the
same reason this post is: there is little to describe when the collecting never happens. If
that is the kind of app you want on your phone, the &lt;a href=&quot;https://crystalo.app/&quot;&gt;waitlist is on the home page&lt;/a&gt;.&lt;/p&gt;
</description>
      <category>Screen Time</category>
      <category>Privacy</category>
    </item>
  </channel>
</rss>
