
Blog · · Zaktualizowano · Autor: Matt Senter
Deszcz za twoimi oknami bez nagrywania ekranu
Weatherling nie potrzebuje uprawnień do nagrywania ekranu ani dostępności, żeby umieścić deszcz za twoimi oknami. Nigdy nie widzi, co jest na ekranie. Działa na podstawie obrysu każdego okna, który macOS udostępnia każdej aplikacji, i działa w piaskownicy App Sandbox Apple. Łączy się z internetem tylko wtedy, gdy włączysz opcjonalną synchronizację pogody, a o lokalizację prosi tylko wtedy, gdy zdecydujesz się użyć jej do synchronizacji.
Brzmi to zbyt pięknie, żeby było prawdziwe. Kiedy patrzysz, jak kropla ląduje na pasku tytułu, spływa po boku i znika za oknem z przodu, można się zastanawiać, skąd aplikacja wie, co jest na ekranie. Krótka odpowiedź: nie wie. Wie, gdzie co jest, a okazuje się, że deszczowi to w zupełności wystarcza.
Geometria okien, nie ich zawartość
Każda aplikacja na Maca może poprosić macOS o listę okien widocznych na ekranie. Weatherling robi to przez CGWindowListCopyWindowInfo, to samo publiczne wywołanie, od którego zaczynają menedżery okien i narzędzia do zrzutów ekranu. Dla każdego okna odczytuje pięć rzeczy i nic poza tym:
- Granice. Gdzie znajduje się okno i jak jest duże.
- Warstwa. Czy to zwykłe okno, menu, czy część interfejsu systemu.
- Alfa. Czy okno jest faktycznie widoczne, czy całkiem przezroczyste.
- Numer okna. Identyfikator, dzięki któremu można śledzić okno, gdy się przesuwa.
- ID procesu właściciela. Liczba, używana wyłącznie do odróżnienia okien Weatherling od twoich.
Lista wraca w kolejności od przodu do tyłu i to jest druga połowa sztuczki. Kropla, która spada za krawędź okna z przodu i ląduje na oknie położonym dalej, to po prostu kropla sprawdzona względem kolejnego obrysu na liście. Dzięki temu deszcz może padać przed jednym oknem i za drugim, a aplikacja nie widzi ani jednego piksela żadnego z nich.
Ta sama lista udostępnia też tytuł okna, nazwę aplikacji, do której należy, i informację, czy okno jest udostępniane. Weatherling nigdy nie odczytuje tych pól. Deszcz ich nie potrzebuje, a to, że pozostają nietknięte, jest jednym z powodów, dla których żadne uprawnienia nie są potrzebne.
Dlaczego tytuły okien wymagałyby nagrywania ekranu
Od macOS Catalina tytuł okna innej aplikacji jest traktowany jako zawartość ekranu. Tytuł może zawierać temat e-maila, nazwę dokumentu albo stronę, którą czytasz, więc macOS przekazuje tytuły tylko aplikacjom, którym zezwolisz na nagrywanie ekranu. Bez tego uprawnienia pole tytułu po prostu wraca puste.
Ta granica to całe ograniczenie projektowe. Aplikacja, która chciałaby zachowywać się inaczej przy twojej poczcie niż przy edytorze kodu, potrzebowałaby tytułów albo zrzutów ekranu i musiałaby o nie poprosić. Weatherling nie obchodzi, czym jest okno, tylko gdzie jest, więc zostaje po tej stronie granicy, która nie wymaga żadnego pytania. Nie ma też prośby o dostępność, bo nic nie jest odczytywane z wnętrza innych aplikacji i nic nimi nie steruje. Żadnego monitorowania klawiatury, dostępu do wprowadzania danych ani automatyzacji.
W piaskownicy, z niewielkimi dodatkami
Aplikacje z Mac App Store działają w piaskownicy App Sandbox Apple i deklarują wszystko, czego potrzebują ponad nią, przez uprawnienia (entitlements): dostęp do sieci, kamerę, pliki poza własnym kontenerem i tak dalej. Weatherling deklaruje com.apple.security.app-sandbox oraz com.apple.security.files.user-selected.read-write. To drugie pozwala zapisać kartę wyniku do pliku, który wybierzesz w oknie zapisu. Od wersji 1.6 aplikacja deklaruje też wychodzące połączenia sieciowe i lokalizację, używane wyłącznie przez opcjonalną funkcję Synchronizuj z twoją pogodą. (Podpis kodu Apple dodaje też do każdej aplikacji z App Store jej identyfikator i identyfikator zespołu, które nie dają żadnych uprawnień).
Brak ma tu takie samo znaczenie jak obecność. Aplikacja w piaskownicy nie może otworzyć połączenia wychodzącego bez uprawnienia klienta sieciowego, a do wersji 1.6 Weatherling go nie miał. Teraz ma je tylko po to, by sprawdzać pogodę, gdy włączysz synchronizację, a przy wyłączonej synchronizacji nie wysyła żadnych żądań sieciowych. Nie ma konta, analityki ani usługi raportowania awarii. Ustawienia, takie jak intensywność deszczu i wiatr, są przechowywane we własnym, odizolowanym magazynie aplikacji na twoim Macu.
Dźwięk deszczu działa tak samo. Nagranie jest wbudowane w aplikację, a gdy rozmawiasz przez telefon lub wideo, deszcz cichnie. Weatherling zauważa rozmowę, sprawdzając, czy jakakolwiek aplikacja używa mikrofonu, czyli odczytując prostą odpowiedź „tak” lub „nie”, którą macOS podaje o urządzeniu. Nigdy nie otwiera mikrofonu, nie nagrywa dźwięku ani nie prosi o dostęp do mikrofonu.
Sprawdź sam
Nie musisz wierzyć mi na słowo. Trzy sprawdzenia zajmują około minuty:
- Otwórz Ustawienia systemowe, Prywatność i ochrona, a potem Nagrywanie ekranu (w nowszych wersjach macOS: Nagrywanie ekranu i dźwięku systemowego). Weatherling nie ma na liście, bo nigdy o to nie prosił.
- Sprawdź w tej samej sekcji Dostępność i Mikrofon. Nie ma go w żadnej z nich.
- W Terminalu uruchom
codesign -d --entitlements - /Applications/Weatherling.app. Poza identyfikatorem aplikacji i zespołu, które podpis Apple dodaje do każdej aplikacji z App Store, uprawnienia to App Sandbox, dostęp do wybranych przez użytkownika plików w celu zapisywania kart wyniku oraz, od wersji 1.6, wychodzące połączenia sieciowe, lokalizacja i WeatherKit na potrzeby opcjonalnej synchronizacji pogody. Lokalizacja jest używana tylko wtedy, gdy zamiast wpisać miejsce wybierzesz lokalizację swojego Maca, a macOS najpierw cię o to zapyta.
Gdyby przyszła wersja kiedykolwiek potrzebowała więcej, najpierw zobaczysz pytanie. macOS nie pozwala aplikacji zdobyć żadnego z tych uprawnień po cichu.
Ile kosztuje obserwowanie okien
Odczyt listy okien jest tani. Weatherling pobiera ją mniej więcej dziesięć razy na sekundę, gdy okna stoją w miejscu, i na chwilę częściej, gdy coś się porusza, żeby woda podążała za przeciąganym oknem, zamiast zostawać w tyle. Między sprawdzeniami nie jest przechowywane nic poza samymi obrysami, a te znikają w chwili zamknięcia okna.
Dekoracja biurka nie powinna wiązać się z negocjacjami o prywatność. Włącz deszcz, dopasuj go do nastroju i wróć do tego, co robiłeś. Weatherling nie musi wiedzieć, co to jest.
Możesz wypróbować to działanie bez instalowania czegokolwiek na strona główna, gdzie przeciągane okna to przeglądarkowa wersja tego samego pomysłu. Szczegóły tego, co aplikacja przechowuje, a czego nie, znajdziesz w dokumencie polityka prywatności, a dlaczego w ogóle warto to robić, wyjaśnia wpis Dlaczego deszcz na biurku może uspokajać.