Przejdź do głównej zawartości

Uprawnienia integracji z systemem (TCC) na macOS

Na macOS dostęp do Kalendarza, Przypomnień, Poczty i Notatek kontroluje system Transparency, Consent and Control (TCC), czyli mechanizm stojący za oknami dialogowymi “zezwól na dostęp”. Pomocnik wiersza poleceń, uruchamiany jako osobny proces, potrzebuje kilku dodatkowych informacji, żeby współpracować z TCC tam, gdzie zwykłe polecenie zawiodłoby po cichu. Zobacz Wewnętrzne mechanizmy integracji z systemem, żeby dowiedzieć się, jak żądanie w ogóle trafia do tych pomocników.

Każdy pomocnik ma własny plik Info.plist wbudowany bezpośrednio w swój plik binarny, dzięki czemu tekst opisu użycia widoczny w oknie z prośbą o dostęp oraz tożsamość aplikacji podróżują razem z pomocnikiem przez granicę procesu. Ma to znaczenie na macOS 14 i nowszych: bez wbudowanego NSCalendarsFullAccessUsageDescription żądanie dostępu do kalendarza zostaje odrzucone bez żadnego okna dialogowego, zamiast zapytać ciebie o zgodę. Każdy pomocnik ma też swój własny identyfikator, na przykład pl.speedwave.desktop.calendar.

Uprawnienie systemowe stojące za daną integracją nie zawsze nazywa się tak jak aplikacja. Poczta i Notatki działają przez Apple Events zamiast osobnego frameworka, więc obie podlegają temu samemu uprawnieniu AppleEvents:

IntegracjaUsługa TCC
KalendarzCalendar
PrzypomnieniaReminders
PocztaAppleEvents
NotatkiAppleEvents

Jeden mechanizm centralnie kieruje sprawdzanie uprawnień zarówno dla EventKit, jak i Apple Events do wspólnego modelu stanu, dzięki czemu Speedwave może zgłosić spójny stan niezależnie od tego, który framework stoi za daną integracją. Gdy Poczta albo Notatki, czyli aplikacja docelowa, nie są uruchomione, macOS zgłasza właśnie to zamiast błędu uprawnień, a Speedwave każe ci otworzyć aplikację zamiast sugerować reset uprawnień.

Przy każdym uruchomieniu Speedwave sprawdza każdą włączoną przez ciebie integrację z systemem względem jej aktualnego uprawnienia w macOS i wyłącza każdy przełącznik, którego uprawnienie przestało być przyznane. To, które integracje w ogóle da się przełączać, kontrolują Funkcje beta.