Weatherling

Blog · · Bijgewerkt · Door Matt Senter

Regen achter je vensters, zonder toestemming voor schermopname

Weatherling heeft geen toestemming voor schermopname of toegankelijkheid nodig om regen achter je vensters te tekenen. Het ziet nooit wat er op je scherm staat. Het gebruikt de omtrek van elk venster, die macOS met elke app deelt, en draait in de App Sandbox van Apple. Het gaat alleen online als je optionele weersynchronisatie aanzet en vraagt alleen om je locatie als je die daarvoor wilt gebruiken.

Dat klinkt misschien te mooi om waar te zijn. Wanneer je een druppel op een titelbalk ziet landen, langs de zijkant ziet stromen en achter het voorste venster ziet verdwijnen, vraag je je terecht af hoe de app weet wat er op je scherm staat. Het korte antwoord: dat weet hij niet. Hij weet waar dingen staan, en dat blijkt alles te zijn wat de regen nodig heeft.

Venstergeometrie, geen vensterinhoud

Elke Mac-app kan macOS om een lijst van de zichtbare vensters vragen. Weatherling doet dat via CGWindowListCopyWindowInfo, dezelfde openbare aanroep waarmee vensterbeheerders en schermafbeeldingstools beginnen. Per venster leest het vijf dingen en niets anders:

  • Afmetingen. Waar het venster staat en hoe groot het is.
  • Laag. Of het een gewoon venster, een menu of een onderdeel van de systeeminterface is.
  • Alfa. Of het echt zichtbaar of volledig transparant is.
  • Vensternummer. Een ID om het venster te volgen wanneer het beweegt.
  • Proces-ID van de eigenaar. Een nummer dat alleen wordt gebruikt om de eigen vensters van Weatherling van jouw vensters te onderscheiden.

De lijst staat in volgorde van voor naar achter. Dat is de andere helft van de truc. Een druppel die langs de rand van een voorste venster valt en op een verder gelegen venster landt, wordt simpelweg met de volgende omtrek in de lijst vergeleken. Zo kan regen vóór het ene venster en achter een ander vallen zonder dat de app één pixel van beide ziet.

Dezelfde lijst bevat ook de venstertitel, de naam van de bijbehorende app en of het venster wordt gedeeld. Weatherling leest die velden nooit. De regen heeft er niets aan. Door ze met rust te laten, is er geen toestemming nodig.

Waarom venstertitels toestemming voor schermopname vereisen

Sinds macOS Catalina telt de titel van een venster van een andere app als scherminhoud. Zo’n titel kan het onderwerp van een e-mail, een documentnaam of de pagina die je leest bevatten. Daarom geeft macOS titels alleen aan apps die je toestemming voor schermopname hebt gegeven. Zonder die toestemming blijft het titelveld leeg.

Die grens bepaalt het hele ontwerp. Een app die anders wil reageren op je mail dan op je code-editor, heeft titels of schermopnamen nodig en moet daarom toestemming vragen. Weatherling hoeft niet te weten wat een venster is, alleen waar het staat. Daardoor blijft het aan de kant van de grens waar geen melding nodig is. Ook toestemming voor toegankelijkheid wordt niet gevraagd: de app leest niets binnen andere apps en bestuurt ze niet. Geen toetsenbordcontrole, invoertoegang of automatisering.

In een sandbox, met weinig extra’s

Mac App Store-apps draaien in de App Sandbox van Apple. Extra mogelijkheden vragen ze aan via entitlements: netwerktoegang, de camera, bestanden buiten hun eigen container enzovoort. Weatherling declareert com.apple.security.app-sandbox en com.apple.security.files.user-selected.read-write. Die laatste staat toe een scorekaart op te slaan in een bestand dat je kiest in het bewaardialoogvenster. Sinds versie 1.6 declareert het ook uitgaande netwerkverbindingen en locatie, beide alleen voor de optionele functie Synchroniseer met je weer. (De codeondertekening van Apple voegt aan elke App Store-app ook app- en team-ID’s toe, die geen extra toegang verlenen.)

Wat ontbreekt, is net zo belangrijk als wat aanwezig is. Een sandbox-app kan geen uitgaande verbinding openen zonder het entitlement voor netwerktoegang. Tot versie 1.6 had Weatherling dat niet. Nu heeft het dat alleen om het weer op te vragen wanneer je synchronisatie aanzet. Met synchronisatie uit doet het geen netwerkverzoeken. Er is geen account, analyse of crashrapportagedienst. Instellingen zoals regenintensiteit en wind staan in de eigen sandboxopslag van de app op je Mac.

Het regengeluid werkt op dezelfde manier. De opname wordt met de app meegeleverd en wordt zachter wanneer je in gesprek bent. Weatherling herkent een gesprek door te controleren of een app de microfoon gebruikt: een ja of nee dat macOS over het apparaat meldt. Het opent de microfoon nooit, neemt geen audio op en vraagt niet om microfoontoegang.

Controleer het zelf

Je hoeft dit niet op vertrouwen aan te nemen. Drie controles kosten ongeveer een minuut:

  1. Open Systeeminstellingen > Privacy en beveiliging > Schermopname (Scherm- en systeemaudio-opname in nieuwere macOS-versies). Weatherling staat niet in de lijst, omdat het nooit toestemming heeft gevraagd.
  2. Controleer Toegankelijkheid en Microfoon in hetzelfde gedeelte. Het staat in geen van beide lijsten.
  3. Voer in Terminal uit: codesign -d --entitlements - /Applications/Weatherling.app. Naast de app- en team-ID’s die de ondertekening van Apple aan elke App Store-app toevoegt, zijn de entitlements App Sandbox, toegang tot door de gebruiker gekozen bestanden voor scorekaarten en, sinds 1.6, uitgaande netwerkverbindingen, locatie en WeatherKit voor optionele weersynchronisatie. Locatie wordt alleen gebruikt als je de locatie van je Mac kiest in plaats van een plaats in te voeren. macOS vraagt je eerst om toestemming.

Als een toekomstige versie ooit meer toegang nodig heeft, zie je eerst een melding. macOS laat een app deze rechten niet ongemerkt verkrijgen.

Wat het volgen van vensters verbruikt

Het lezen van de vensterlijst kost weinig. Weatherling vraagt die ongeveer tien keer per seconde op wanneer je vensters stilstaan en kort wat vaker wanneer er iets beweegt. Zo volgt het water een venster dat je versleept zonder achter te lopen. Tussen controles worden alleen de omtrekken bewaard. Zodra een venster sluit, verdwijnen die.

Bureaubladversiering zou geen onderhandeling over privacy moeten vereisen. Zet de regen aan, pas hem aan je stemming aan en ga verder met wat je deed. Weatherling hoeft niet te weten wat dat is.

Je kunt het gedrag uitproberen zonder iets te installeren op de startpagina, waar de versleepbare vensters een browserversie van hetzelfde idee zijn. Details over wat de app wel en niet bewaart staan in het privacybeleid, en waarom dit de moeite waard kan zijn lees je in Waarom regen op je bureaublad kalmerend kan voelen.

Volgende stappen