3 dingen die Apple wat mij betreft moet oplossen in de Screen Time API
Ik maak HonorFit, een app blocker waarmee je schermtijd verdient door op te drukken (op erewoord, geen camera). Het is dezelfde app op iPhone en Android, hetzelfde idee, en grotendeels dezelfde code. En eerlijk gezegd? De Android-versie is fijner in gebruik.
Dat komt niet doordat Android beter is in het blokkeren van apps. De Screen Time API van iOS is juist heel degelijk in het blokkeren zelf. Het komt doordat iOS je op drie specifieke punten beperkt, en geen van die beperkingen lijkt er te zijn om gebruikers te beschermen. Dus hier is mijn lijstje, met wat ik Apple zou vragen. Ik heb geprobeerd het te houden bij dingen die niemand privacy kosten.
(Wil je de technische kant van bouwen op deze API, dan heb ik die apart beschreven: wat de documentatie van Apple je niet vertelt.)
1. Je kunt maar één Schermtijd-app tegelijk hebben
Stel dat je Brick, Opal of one sec al gebruikt en HonorFit er ook bij wilt proberen. Op de iPhone kan dat niet. Als de tweede app toegang tot Schermtijd vraagt, laat iOS niet eens de toestemmingsvraag zien. Het gooit gewoon een foutmelding dat Family Controls maar voor één app tegelijk beschikbaar is. Ik heb die fout zelf gezien, en andere ontwikkelaars lopen er ook tegenaan.
Om te wisselen moet je naar Instellingen › Schermtijd › Apps met toegang tot Schermtijd, de andere app uitzetten en soms je telefoon herstarten. HonorFit herkent die fout nu en loodst mensen erdoorheen, want de kale foutmelding zegt een normaal mens helemaal niets.
Het rare is: toen Apple dit soort toestemming introduceerde op WWDC22, zeiden ze dat individuele toestemming, anders dan toestemming voor ouderlijk toezicht, door een onbeperkt aantal apps op een toestel gebruikt kan worden. Zo werkt het vandaag niet, en ik kon het nergens gedocumenteerd vinden.
Waarom dit niet in het belang van gebruikers is: mensen combineren hulpmiddelen. Iemand gebruikt misschien een Brick voor diepe focussessies op het werk en HonorFit om zijn scrolltijd voor de avond te verdienen. Apple heeft al een regel voor het combineren van beperkingen: als meerdere ManagedSettingsStores hetzelfde instellen, dan geldt in de woorden van Apple "the most restrictive setting always wins" (de strengste instelling wint altijd). Als dat ook tussen apps zou gelden, kunnen mensen ze allebei gebruiken, en dan kan een telefoon alleen strenger op slot gaan, nooit minder streng.
2. De app-kiezer is onhandig, en apps kunnen hem niet aanpassen
Op de iPhone kies je de apps die je wilt blokkeren in de FamilyActivityPicker van Apple. Dat is een systeemscherm dat de app niet kan veranderen, op een regel tekst boven- en onderaan na. Het opent met een lijst categorieën (Sociaal, Games, Amusement...), en je tikt een categorie open om de apps zelf te vinden. Op Android maak ik de lijst zelf, dus daar toont HonorFit je geïnstalleerde apps, gesorteerd op hoeveel je ze de afgelopen 24 uur hebt gebruikt.
Twee dingen zitten me dwars aan die van iOS:
- Je blokkeert heel makkelijk per ongeluk een hele categorie. Tik je op de rij van de categorie in plaats van hem open te klappen, dan heb je zomaar elke app daarin gekozen, ook apps die je later nog installeert. Voor veel apps is dat nooit wat je wilt. Je wilt Instagram en TikTok, niet ‘Sociaal’.
- Je ziet niet welke apps eigenlijk je dag opvreten. De hele reden dat iemand een app blocker opent, is ‘ik zit te veel op mijn telefoon’. De kiezer is precies het moment waarop je beslist wat je blokkeert, en hij geeft je nul informatie over waar je tijd heen gaat. Je iPhone weet precies hoe lang je in elke app hebt gezeten (het staat gewoon in Instellingen), maar de kiezer laat het niet zien.
Dit zou geen privacy kosten. De kiezer wordt door iOS getekend, in zijn eigen proces. De app ziet nooit wat erin staat, alleen ondoorzichtige tokens voor wat je hebt gekozen. HonorFit kan letterlijk niet zien welke apps je hebt gekozen. iOS zou dus gebruikstijden in de kiezer zelf kunnen tonen, en de app zou nog steeds niets te weten komen. Apple doet al zoiets met DeviceActivityReport-extensies, die je gebruik laten zien in een sandbox die de app niet kan uitlezen.
- Een optie in de kiezer om te kiezen tussen hele categorieën of alleen apps, zodat een app blocker een lijst met alleen apps kan aanbieden zonder per ongeluk gekozen categorieën (en websites kan verbergen als hij die niet gebruikt).
- Een optie om te sorteren op gemeten schermtijd en die te tonen naast elke app, getekend door iOS zodat de app de cijfers nooit ziet.
3. Je kunt geen nauwkeurige aftelling van je resterende tijd zien
In HonorFit loopt je verdiende tijd alleen af terwijl je echt in een geblokkeerde app zit. Het meest logische om te tonen is dus een aftelling: ‘nog 12:34’, die afloopt terwijl je scrolt en stopt als je de app verlaat.
Op Android is dat makkelijk. De achtergrondservice van HonorFit kijkt elke seconde welke app op het scherm staat, en de melding gebruikt de ingebouwde afteltimer van Android, dus het meldingenpaneel tekent hem zelf elke seconde opnieuw. Je trekt het paneel omlaag en ziet precies hoeveel tijd je nog hebt, tot op de seconde.
Op de iPhone kan het niet, en dit is waarom:
- iOS vertelt de app nooit wanneer je een geblokkeerde app opent of verlaat. Je krijgt alleen events in de trant van ‘er is zoveel gebruik opgebouwd’. HonorFit stelt er een in voor elke 15 seconden gebruik, en die worden afgeleverd bij een extensie op de achtergrond die de melding bijwerkt.
- Een gewone melding kan niet zelf aftellen, dus het beste wat HonorFit kan doen, is nieuwe tekst invullen elke keer dat er een event binnenkomt. Daarom staat er in de melding op de iPhone ‘Nog ~12:30’ met een golfje: hij springt in stappen van 15 seconden.
- Die events komen ook niet altijd op tijd binnen. Op iOS 26 heb ik ze te laat zien komen, of meerdere tegelijk.
- Live Activity’s kunnen wel zelf aftellen, maar ze kunnen niet pauzeren. Niets vertelt de app dat je Instagram hebt verlaten, dus een Live Activity zou doortikken terwijl je telefoon op tafel ligt, en dat zou niet kloppen.
Dus iPhone-gebruikers krijgen een ruwe schatting, terwijl Android-gebruikers het echte getal zien.
DeviceActivity-event een aftelling aansturen die iOS zelf tekent: in een melding, een Live Activity of het shield, en die alleen loopt terwijl de gemonitorde apps op het scherm staan. iOS houdt dat gebruik al tot op de seconde bij, dus het zou de tijd kunnen tonen zonder de app iets nieuws te geven. Zelfs simpele callbacks naar de monitor-extensie voor ‘geblokkeerde app geopend / gesloten’ zouden het grootste deel oplossen.Dat was het
Om eerlijk te zijn tegenover Apple: het privacymodel is hier echt goed. De app komt nooit te weten wat je hebt geblokkeerd of hoeveel je het gebruikt, en ik zou het jammer vinden als dat veranderde. Geen van de drie punten hierboven zou daar iets aan veranderen. Ze zouden iPhone-apps alleen net zo behulpzaam laten zijn als de Android-versies al zijn.
Bouw jij ook op Schermtijd en wil je een van deze dingen, dien het dan in via Feedbackassistent. Voor zover ik weet, worden dingen opgemerkt doordat er dubbele meldingen binnenkomen. En wil je de app gewoon proberen: HonorFit is gratis voor iPhone en Android. Misschien vinden sommigen van jullie het wel leuk!