Конфиденциальность
Никакой телеметрии, никакой аналитики, никакого сервера — и четыре случая, когда чтение выходит за пределы собственного контейнера приложения
Нет ни телеметрии, ни 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, а заметки о выпуске берутся из файла в собственном репозитории этого сайта.
Если вы не хотите, чтобы вас измеряли, любой блокировщик контента отключит оба скрипта, и сайт будет работать точно так же без них.