Как это работает
Откуда берётся номер версии каждого приложения и почему способ установки для разных приложений различается
DuoUpdater сканирует /Applications, /Applications/Utilities и ~/Applications,
а затем сверяет найденное с несколькими источниками обновлений — в порядке
приоритета. Отвечает за приложение первый источник, который его распознал;
остальные не опрашиваются.
- Mac App Store — API поиска iTunes от Apple, с учётом витрины и региона.
Учитываются только нативные результаты
mac-software; приложения для iOS, запущенные на Mac, пропускаются, потому что их номера версий меняются независимо и иначе показывались бы как обновления, которые невозможно установить. - Xcode Releases — сборки Xcode, не полученные из App Store: каждая бета и релиз-кандидат, сопоставленные с тем каналом, который у вас действительно установлен. Xcode, установленный из App Store, уже учтён пунктом выше.
- Homebrew Cask — сопоставление по имени файла
.app, а если оно не найдено — по bundle id, поэтому находятся и casks, которые устанавливаютpkg, а не bundle приложения. Этот источник отвечает только за приложения, которые Homebrew установил и поддерживает актуальными (не отмеченные какauto_updates), поэтому после обновления одного приложения запись Homebrew остаётся актуальной, иbrew upgradeне устанавливает тот же самый релиз повторно. - Sparkle — собственная лента appcast приложения по адресу
SUFeedURL— та же лента, которую читает встроенный обновитель приложения. - GitHub Releases — сопоставление с учётом канала для приложений, распространяемых таким образом. Только обнаружение, если только отдельное правило для конкретного приложения не назвало и не проверило устанавливаемый файл для Mac.
- Alcove — его собственная конечная точка обновлений с аутентификацией, и только если вы ввели лицензию. Без неё этот источник отсутствует полностью, и Alcove переходит к публичной проверке поставщика ниже.
- Проверки поставщика (vendor probes) — написанные вручную правила для собственной конечной точки поставщика, для всего, что не публикует ни ленту, ни карточку в магазине.
Два вида приложений, которые вообще пропускают этот список
Приложение, которым управляет JetBrains Toolbox, и приложение, установленное из TestFlight, получают ответ раньше, чем опрашивается хоть один из семи источников выше. Toolbox и TestFlight сами отвечают за обновления этих приложений, и получить полезное второе мнение неоткуда, поэтому для них список вообще не запускается.
Каждое приложение обновляется так, как ожидает именно оно
Большинство программ обновления выбирают один механизм и пропускают через него все приложения. Эта же использует то, с чем приложение уже поставляется, поэтому нажатие кнопки приводит к разным действиям в зависимости от строки:
| Канал | Что происходит при нажатии «Обновить» |
|---|---|
| Sparkle | Загрузка, проверки ниже, замена bundle — затем приложение закрывается и открывается заново, если вы не отключили это |
| Mac App Store | Полная загрузка через магазин. Там, где это невозможно — фоновый помощник не одобрен или приложение привязано к другому региону, — строка передаёт управление приложению App Store |
| Самообновляющиеся (Electron, Squirrel) | Приложение открывается, и его собственный обновитель делает всю работу |
| Homebrew app cask | brew install --cask --force |
Homebrew pkg cask |
Загрузка официального пакета и открытие системного установщика |
Когда приложение поставляется с собственным обновителем, DuoUpdater уступает ему, а не соперничает с ним. Когда что-то нельзя сделать безопасно, DuoUpdater сообщает об этом прямо в строке, а не действует наугад.
Инструменты командной строки и шрифты
Одна строка внизу списка охватывает всё, что устанавливает Homebrew и что не
является приложением: формулы командной строки и casks, не устанавливающие
вообще никакого .app, — CLI, шрифт, драйвер. Ни одно из этого не требует
отдельного решения для каждого приложения, и у них нет bundle для сканирования,
так что без этой строки они были бы попросту не видны.
Cask, который действительно устанавливает приложение, получает обычную строку, как и всё остальное, и никогда не затрагивается обновлением из этой нижней строки, поэтому ничего не учитывается дважды.