Конфиденциальность

Никакой телеметрии, никакой аналитики, никакого сервера — и четыре случая, когда чтение выходит за пределы собственного контейнера приложения

← Вся документация

Нет ни телеметрии, ни SDK для аналитики, ни нашего собственного сервера. Каждый сетевой запрос идёт напрямую к поставщику проверяемого приложения — либо к api.github.com, formulae.brew.sh и xcodereleases.com (поддерживаемому сообществом индексу, из которого читаются версии Xcode), — и не несёт о вас ничего сверх того, что требуется самому запросу: собственную версию приложения, чтобы лента поставщика могла ответить для нужного канала.

Четыре вещи стоит назвать отдельно, потому что они связаны с чтением за пределами собственного контейнера приложения.

CleanShot X. Если оно установлено, его activationKey считывается из настроек приложения и используется для запроса персонализированной ленты appcast, которой пользуется собственный обновитель CleanShot. Без ключа лента CleanShot сообщает о пробном канале, и вам предлагали бы обновления, которые невозможно установить. Ключ отправляется только на legit.maketheweb.io, никогда не записывается в журнал и исключён из дискового HTTP-кеша.

TablePlus. Считывается его настройка IsReceiveBetaBuild, чтобы проверка выполнялась для того же канала, на который настроено само приложение.

GitHub. Чтобы поднять лимит запросов к API с 60 в час до 5000, токен берётся из GITHUB_TOKEN / GH_TOKEN, а если их нет — из gh auth token. Он отправляется только на api.github.com и удаляется из любого перенаправления, ведущего за пределы этого узла.

Ваш вход в App Store. Каждый раз, когда читаются данные TestFlight, из системной базы учётных записей читается одно: входит ли App Store в типы медиаконтента активной учётной записи App Store. Это определяет, можно ли прямо сейчас предложить вам бета-версию из TestFlight, и не даёт кнопке обновления запускать TestFlight только для того, чтобы попросить вас войти. Больше оттуда ничего не читается — ни Apple ID, ни имя, ни какой-либо идентификатор, — и ничего из прочитанного там не покидает Mac.

Ваш вход Apple Developer (Xcode)

Беты и релиз-кандидаты Xcode загружаются только с сайта разработчиков Apple, за вашим Apple ID. Если вы решите войти в разделе «Настройки → Xcode», вход происходит на собственной странице Apple внутри приложения: ваш пароль и код двухфакторной аутентификации уходят к Apple, и приложение их не читает. Приложение сохраняет только получившуюся сессию — куки apple.com, которые устанавливает Apple, — в Keychain и в собственном веб-хранилище приложения, поэтому повторный запуск не выводит вас из системы. Они отправляются только на *.apple.com: чтобы загрузить Xcode, чтобы прочитать список загрузок Xcode от Apple, когда вы открываете или обновляете его в разделе «Настройки → Xcode», и раз в час — чтобы спросить у Apple, действует ли ещё сессия. Их значения никогда не записываются в журнал; в журнал попадают только имена куки, которые присылает Apple. «Настройки → Xcode → Выйти и очистить» удаляет их вместе с куки «доверенного устройства», поэтому при следующем входе снова понадобится код.

Apple завершает сессию на своей стороне через несколько часов — в наших тестах это было около восьми. Когда приложение обнаруживает, что сессия завершилась (при ежечасной проверке или когда вы начинаете загрузку Xcode), оно один раз, скрыто, загружает страницу входа Apple в том же веб-хранилище. Если Apple всё ещё узнаёт вход этого Mac, она возвращает новую сессию без вашего пароля. Никакое окно не появляется, ничего не набирается; если Apple хочет получить ваш пароль, страница сбрасывается через 30 секунд, и строка Xcode снова просит вас войти. Это происходит не чаще одного раза при каждом завершении сессии, и это можно отключить в разделе «Настройки → Xcode → Продлевать сеанс в фоне».

Учётные данные остаются в Keychain

Всё, что вы вводите сами — токен GitHub, лицензию Alcove, сессию Apple Developer выше, — хранится в связке ключей login как AfterFirstUnlockThisDeviceOnly. Не синхронизируется с iCloud, не записывается в plist.

Страницы поставщиков не оставляют после себя куки

Заметки о выпуске, которые можно показать только как собственную веб-страницу поставщика, отображаются в WKWebView с непостоянным хранилищем данных, поэтому куки поставщика не переживают повторный запуск. Единственное исключение — вход Apple Developer, его окно и скрытая страница продления, — которые нарочно сохраняют сессию, как описано выше.

Этот сайт

Всё сказанное выше — о самом приложении. Эта страница, которую вы читаете, — отдельная вещь, и она действительно кое-что собирает, так что об этом стоит сказать прямо, а не заставлять вас догадываться по поведению приложения.

На сайте работают два скрипта, оба от Vercel, оба собственные (first-party).

Vercel Web Analytics считает просмотры страниц. Согласно собственной документации Vercel, для каждого просмотра записываются: время, URL и его шаблон маршрута, реферер, отфильтрованные параметры запроса, приблизительное местоположение (страна, регион, город), браузер и операционная система с версиями, а также тип устройства.

Vercel Speed Insights измеряет, насколько быстро страница на самом деле загрузилась именно у вас. Согласно собственной документации Vercel, каждое измерение несёт: URL и его шаблон маршрута, измеряемый показатель Web Vital и элемент, которому он приписан (CSS-селектор вроде html>body img.header), класс соединения (4g, 3g, …), браузер, тип устройства и его ОС, страну в виде двухбуквенного кода, версию измеряющего пакета и время получения события. Обратите внимание на более узкую геолокацию: только страна — там, где Analytics опускается до города.

Чего нет ни у того, ни у другого: сторонних куки не существует. Analytics определяет посетителя по хешу, полученному из входящего запроса, а не по чему-либо, сохранённому на вашем компьютере, и удаляет эту идентификацию через 24 часа — так что она не может отслеживать вас на других сайтах и не может восстановить, что вы делали здесь неделю назад. У Speed Insights вообще нет идентификации посетителя; Vercel заявляет, что не собирает и не хранит ничего, что позволило бы восстановить сессию просмотра по разным страницам, и что ни одна из функций не привязывает точки данных к IP-адресу.

Больше ничего нет. Никакой рекламной сети, никакой записи сессий, никаких сторонних скриптов любого рода. Кнопка загрузки ведёт прямо на GitHub, а заметки о выпуске берутся из файла в собственном репозитории этого сайта.

Если вы не хотите, чтобы вас измеряли, любой блокировщик контента отключит оба скрипта, и сайт будет работать точно так же без них.