- Вопрос или проблема
- Ответ или решение
- 1. Загрузка старой версии WhatsApp
- 2. Установка приложения
- 3. Отключение обновлений Squirrel
- 4. Извлечение исходного кода
- 5. Модификация времени истечения
- 6. Упаковка исходного кода обратно
- 7. Замена испорченного файла приложения
- Дополнительно: Блокировка обновлений через DNS
- Заключение
Вопрос или проблема
Привет, я установил WhatsApp Desktop для MacOS, и он пытается загружать обновления по 200|300 МБ каждый день, что раздражает, поэтому мне нужно остановить это.
Я уже пытался найти в приложении отдельный автообновлятор, чтобы его удалить, но не смог найти.
Используя Handsoff
, я обнаружил, что запрос идет через *.fbcdn.net
, и это довольно легко заблокировать, однако сделать это нативно невозможно.
Сначала нужно установить dnsmasq
, как указано по ссылке: https://gist.github.com/ogrrd/5831371
В конфигурации в $(brew --prefix)/etc/dnsmasq.conf
используйте:
address=/.fbcdn.net/127.0.0.1
А для резольвера в /etc/resolver/fbcdn.net
используйте:
nameserver 127.0.0.1
Запустите scutil --dns
, чтобы увидеть резольвер.
Запустите sudo brew services start dnsmasq
, чтобы запустить DNS-сервер.
Проверьте это через:
ping test.fbcdn.net
PING test.fbcdn.net (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.053 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.349 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.444 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.084 ms
Старое приложение WhatsApp для настольных ПК основано на Electron (фреймворке, который сочетает Chrome с веб-технологиями для более легкой доставки веб-приложений, которые выглядят нативными).
Вы можете изменить разрешения на файле приложения или исполняемом файле, чтобы попытаться отключить автообновление. На macOS, используя инспектор Finder, вы можете “заблокировать” приложение.
Это может отключить автообновления, но в конечном итоге вы все равно столкнетесь с постоянными всплывающими окнами, требующими ввести ваш пароль для разрешения обновления.
Под капотом многие приложения на Electron используют Squirrel для обновлений. Вы можете отключить Squirrel с помощью переменной окружения.
Например, запуская бинарный файл WhatsApp из терминала с чем-то вроде:
DISABLE_UPDATE_CHECK=1 /Applications/WhatsApp.app/Contents/MacOS/WhatsApp
Действительно, всплывающие окна Squirrel для ввода пароля для установки помощника обновления исчезают.
…тем не менее, вы все равно можете столкнуться с экраном “Обновление WhatsApp…”, который никогда не исчезает после отключения Squirrel.
Изучая это, похоже, что WhatsApp использует отметку времени истечения в DOM-элементе, чтобы определить, когда ему следует проверять обновления. Я не смог найти никакую переменную окружения, которую я мог бы легко изменить, чтобы отключить процесс обновления.
Вы можете использовать electron_inject
(python-проект), чтобы немного изменить способ работы приложения.
pip3 install electron_inject
В частности, вы можете внедрить настраиваемые скрипты для выполнения внутри приложения Electron и подключить отладчик devtools, чтобы понять, что происходит.
Например, вы можете сохранить следующее как whatsapp-inject.js
function initPostDom () {
var expiresEl = document.getElementById('hard_expire_time');
expiresEl.dataset.time = ""+(Date.now()/1000 + 24*60*60*7); // 7 дней с этого момента
}
document.addEventListener('DOMContentLoaded', initPostDom);
А затем запустить WhatsApp, используя electron_inject
следующим образом:
DISABLE_UPDATE_CHECK=1 python3 -m electron_inject -t 5 -r whatsapp-inject.js - /Applications/WhatsApp.app/Contents/MacOS/WhatsApp
При условии, что вы изменили разрешения файловой системы для блокировки автообновления, запуск WhatsApp таким образом выполняет следующие 2 действия:
- отключает обновление Squirrel, что устраняет всплывающие окна “введите пароль для установки”.
- говорит WhatsApp не пытаться обновляться в течение следующих 7 дней. Если вы не перезапустите WhatsApp в течение недели, вы можете увидеть некоторые обновления.
На Windows должно быть то же самое, просто замените /Applications/WhatsApp.app/Contents/MacOS/WhatsApp
на путь к вашему WhatsApp .exe
.
Неизвестно, как долго это будет работать или если вы находитесь на другой версии. Проверено на версии macOS 2.2349.51
.
Я использую неподдерживаемую macOS (Big Sur) по конкретным причинам, и автообновлятор заменил мое приложение на то, которое даже не запускается на Big Sur. Кроме того, есть переписанное приложение, на которое они пытаются заставить всех перейти. Я пробовал его и он мне не понравился. У нового приложения много ужасного UX и отсутствуют функции… поэтому я откладываю переход на него как можно дольше. Надеюсь, они исправят потрясающий UX нового приложения и добавят отсутствующие функции, прежде чем APIs, с которыми работает старое приложение, будут отключены.
Если вы хотите исследовать сами, вы можете получить доступ к devtools, добавив флаг -b
при запуске electron_inject. Вы можете поиграть с такими вещами, как перехват ответов fetch
из вашего внедренного скрипта. Обратите внимание на вызовы killswitch
и check-update
. Для вашего сведения, перехват этих вызовов и переопределение ответов, похоже, не помогло отключить обновления.
Если вы хотите исследовать источники на диске, вы можете сделать следующее:
npx @electron/asar extract /Applications/WhatsApp.app/Contents/Resources/app.asar /tmp/whatsapp-app-asar
После нескольких часов настройки я нашел идеальное рабочее решение
-
Скачайте последнюю рабочую “старую” версию WhatsApp 2.2349.51 оттуда https://whatsapp-desktop.en.uptodown.com/mac/versions
-
Установите его, но не запускайте
-
Отключите обновления Squirrel (WhatsApp, будучи приложением на основе Atom, зависит от него)
/bin/launchctl setenv DISABLE_UPDATE_CHECK 1
- Извлеките исходный код
npx @electron/asar extract /Applications/WhatsApp.app/Contents/Resources/app.asar ~/whatsapp-app-asar
- Измените в ~/whatsapp-app-asar/index.html hard_expire_time data-time последовательность на год 2099
<div id="hard_expire_time" data-time="4074711589"></div>
- Упакуйте обратно исходный код
npx @electron/asar pack whatsapp-app-asar app.asar
- Замените app.asar в /Applications/WhatsApp.app/Contents/Resources на нашу новую изменённую
Ответ или решение
Чтобы остановить автоматическое обновление WhatsApp Desktop на MacOS, вы можете предпринять следующие шаги. Пожалуйста, следуйте инструкциям внимательно:
1. Загрузка старой версии WhatsApp
Сначала вам нужно скачать последнюю рабочую версию старого WhatsApp (например, 2.2349.51). Вы можете найти ее здесь: Старые версии WhatsApp.
2. Установка приложения
Установите скачанное приложение, но не запускайте его сразу.
3. Отключение обновлений Squirrel
WhatsApp использует Squirrel для автоматических обновлений, поэтому сначала необходимо отключить проверки обновлений. Откройте терминал и выполните следующую команду:
/bin/launchctl setenv DISABLE_UPDATE_CHECK 1
4. Извлечение исходного кода
Теперь извлеките исходный код приложения с помощью команды:
npx @electron/asar extract /Applications/WhatsApp.app/Contents/Resources/app.asar ~/whatsapp-app-asar
5. Модификация времени истечения
Перейдите в директорию извлеченного приложения:
cd ~/whatsapp-app-asar
Откройте файл index.html
в текстовом редакторе и измените элемент hard_expire_time
. Установите data-time
в значение, представляющее 2099 год, например:
<div id="hard_expire_time" data-time="4074711589"></div>
6. Упаковка исходного кода обратно
После внесения изменений, упакуйте исходный код обратно:
npx @electron/asar pack ~/whatsapp-app-asar app.asar
7. Замена испорченного файла приложения
Затем замените модифицированный файл app.asar
в папке:
/Applications/WhatsApp.app/Contents/Resources
Для этого может потребоваться увеличить права доступа. Вы можете воспользоваться sudo
для выполнения команды копирования.
Дополнительно: Блокировка обновлений через DNS
Хотя это не обязательно, вы можете дополнительно заблокировать домен, через который WhatsApp проверяет обновления. Для этого вам понадобится dnsmasq
.
Установите dnsmasq
, если он у вас еще не установлен:
brew install dnsmasq
Добавьте следующую строку в конфигурационный файл dnsmasq
:
address=/.fbcdn.net/127.0.0.1
Создайте файл-резолвер:
echo "nameserver 127.0.0.1" | sudo tee /etc/resolver/fbcdn.net
Запустите dnsmasq
:
sudo brew services start dnsmasq
Проверьте, работает ли правильно:
ping test.fbcdn.net
Заключение
После выполнения всех описанных шагов, автоматические обновления WhatsApp Desktop должны быть отключены. Учтите, что разработчики могут изменить работу приложения в будущем, поэтому описанные методы могут стать неактуальными.