YandexMusicModClient icon indicating copy to clipboard operation
YandexMusicModClient copied to clipboard

Поддержка других ОС

Open nyarkus opened this issue 1 year ago • 44 comments

Привет! Не думал добавить поддержку линукса? Под линукс есть неофициальный клиент, работает он по такому же принципу, что и на винде, но использует electron(движок рендера браузерный). Об этом гласит строка запуска этого клиента: изображение

nyarkus avatar Nov 21 '24 16:11 nyarkus

Вы в теории можете установить тот клиент, а затем найти где в нем храниться app.asar и поменять его на app.asar из вложений релиза моей модификации.

TheKing-OfTime avatar Nov 22 '24 01:11 TheKing-OfTime

А. Ну и клиент на винде тоже использует электрон. Так что... Разницы особой нет

TheKing-OfTime avatar Nov 22 '24 06:11 TheKing-OfTime

Я пытался уже заменить app.asar, но после этого приложение попросту не запускалось

nyarkus avatar Nov 22 '24 10:11 nyarkus

Я пытался уже заменить app.asar, но после этого приложение попросту не запускалось

Это странно. попробуйте получить логи с мейн процесса. Честно не знаю где они лежат на линуксе, но на винде они лежат в %appdata%/YandexMusic/logs

TheKing-OfTime avatar Nov 22 '24 10:11 TheKing-OfTime

Вот логи: main.log

nyarkus avatar Nov 22 '24 10:11 nyarkus

Если я правильно понял, у него не получается залогиниться

nyarkus avatar Nov 22 '24 10:11 nyarkus

изображение В диспетчере задач нашёл, что он всё-так запускается, но просто не отображается почему-то

nyarkus avatar Nov 22 '24 10:11 nyarkus

Вообще, этот "неофициальный клиент" делается с помощью скрипта, который во вход принимает .exe и перелопачивает его под linux. Возможно будет достаточно просто изменить их скрипт под твой мод, не знаю.

nyarkus avatar Nov 22 '24 10:11 nyarkus

Судя по логу проблема началась после того как запустился модуль discordRPC. Я его писал без учёта возможности запуска на линуксе. Возможно проблема в этом.

TheKing-OfTime avatar Nov 22 '24 12:11 TheKing-OfTime

К вопросу поддержки других ос добавлю свои пять копеек про macOS 15.3 Вот что попробовал сделать Взял актуальный офф клиент Я.Музыки https://music-desktop-application.s3.yandex.net/stable/Yandex_Music_universal_5.40.4.dmg

Нужный файл лежит по пути /Applications/Яндекс Музыка.app/Contents/Resources/app.asar

Если пробовать его просто заменить, то приложение крашится при запуске. Вот кусок крашдампа:

Exception Type:        EXC_BREAKPOINT (SIGTRAP)
Exception Codes:       0x0000000000000001, 0x0000000119f28cfc

Termination Reason:    Namespace SIGNAL, Code 5 Trace/BPT trap: 5
Terminating Process:   exc handler [53876]

Thread 0 Crashed::  Dispatch queue: com.apple.main-thread
0   Electron Framework            	       0x119f28cfc ares_dns_rr_get_name + 4512188
1   Electron Framework            	       0x119f28c30 ares_dns_rr_get_name + 4511984
2   Electron Framework            	       0x119f28744 ares_dns_rr_get_name + 4510724
3   Electron Framework            	       0x119f28db8 ares_dns_rr_get_name + 4512376
4   Electron Framework            	       0x119f28dd0 ares_dns_rr_get_name + 4512400
5   Electron Framework            	       0x116c1ed4c v8::CodeEvent::GetScriptName() + 138776
6   Electron Framework            	       0x116c1cd58 v8::CodeEvent::GetScriptName() + 130596
7   Electron Framework            	       0x116c1e4d4 v8::CodeEvent::GetScriptName() + 136608
8   Electron Framework            	       0x116bff8bc v8::CodeEvent::GetScriptName() + 10632
9   Electron Framework            	       0x117d91a6c v8::SourceLocation::ToString() const + 154952
10  Electron Framework            	       0x117d911c8 v8::SourceLocation::ToString() const + 152740
11  ???                           	       0x157ea9494 ???
12  ???                           	       0x157e0e48c ???
13  ???                           	       0x157f943b8 ???
14  ???                           	       0x157e0d620 ???

И там еще много всякого, но ничего толкового я глазами не нашел и простигосподи эйай тоже ничего дельного об этом всем не сказал. Странновато что там речь идет про ares_dns_rr_get_name - судя по гуглу это то ли модуль то ли либа резолва DNS. Правда в контексте электрона про это вообще считай нет результатов в интернете. Наверное потому что эта ошибка по сути и не связана с проблемой)

Попробовал запустить бинарник приложения напрямую из терминала и вот тут стало интереснее. Получил такую ошибку:

[55517:0303/165641.689207:FATAL:asar_util.cc(148)] Integrity check failed for asar archive (e4e49ade7b52f13936feb835f3f6d5302d584225d4af9d54280e16223c815a42 vs 885249bd6a5ae29b44fa18832876842e61b99065e587c6d9cd13f2c42ed07936)

Видно что в приложении есть какая-то проверка целостности и как раз из-за подмены файла на модифицированный она не проходит. Погуглил интернеты и оказалось действительно, это фича Электрона для защиты ресурсов: https://www.electronjs.org/docs/latest/tutorial/asar-integrity В данном случае, получается, e4e4... это оригинальный хэш который ждет программа, а 8852... это модифицированный. Правда, судя по информации по ссылке выше, это не просто sha256 хэш файла, а некое вычисленное при его сборке и хранящееся в нем самом значение. Однако в модифицированном app.asar я такого хэша grep'ом не нашел. Нашел много других, но не этот. А в оригинальном файле аналогично грепом не нашел оригинальный же хэш. Так я и не понял откуда они берутся. Решил просто воспользоваться тем хэшом что выдала мне эта ошибка. Нашел все фалы Info.plist в которых встречается оригинальный хэш, всего их 9:

/Applications/Яндекс Музыка.app/Contents/Info.plist
/Applications/Яндекс Музыка.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/Info.plist
/Applications/Яндекс Музыка.app/Contents/Frameworks/Mantle.framework/Versions/A/Resources/Info.plist
/Applications/Яндекс Музыка.app/Contents/Frameworks/ReactiveObjC.framework/Versions/A/Resources/Info.plist
/Applications/Яндекс Музыка.app/Contents/Frameworks/Squirrel.framework/Versions/A/Resources/Info.plist
/Applications/Яндекс Музыка.app/Contents/Frameworks/Яндекс Музыка Helper (GPU).app/Contents/Info.plist
/Applications/Яндекс Музыка.app/Contents/Frameworks/Яндекс Музыка Helper (Plugin).app/Contents/Info.plist
/Applications/Яндекс Музыка.app/Contents/Frameworks/Яндекс Музыка Helper (Renderer).app/Contents/Info.plist
/Applications/Яндекс Музыка.app/Contents/Frameworks/Яндекс Музыка Helper.app/Contents/Info.plist

И во всех заменил оригинальный e4e4... хэш на модифицированный 8852... И вот тут программа кажется завелась. Больше она не крашится. Правда и не работает все равно 🤪 Теперь она выдает модальное окно с ошибкой JavaScript в которой, насколько я могу понять, идет речь уже про код самого модифицированного asar файла:

A JavaScript error occurred in the main process
Uncaught Exception:
TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received undefined
at Object.join (node:path:1203:7)
at Object.<anonymous> (/Applications/Яндекс Музыка.app/Contents/Resources/app.asar/main/lib/modUpdater.js:20:28)
at Module._compile (node:internal/modules/cjs/loader:1484:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1564:10)
at Module.load (node:internal/modules/cjs/loader:1295:32)
at Module._load (node:internal/modules/cjs/loader:1111:12)
at c._load (node:electron/js2c/node_init:2:17025)
at Module.require (node:internal/modules/cjs/loader:1318:19)
at require (node:internal/modules/helpers:179:18)
at Object.<anonymous> (/Applications/Яндекс Музыка.app/Contents/Resources/app.asar/main/lib/tray.js:7:25)

Но на этом, как говорится, мои полномочия всё - js я не знаю и код мода, увы, поправить не смогу. После нажатия "ок" в этом модальном окне программа остается запущенной, но активного окна у нее нет. Вероятно "где-то там" она ждет авторизации, но ее не пройти без окна) Все что можно сделать это вызвать "about" из системного меню и она покажет версию себя. Судя по tray.js там и по чейнджлогу мода и по добавленным фичам и в целом по тому что изначально мод под Windows, я полагаю, что есть некая несовместимость с макосью. Может если просто убрать часть специфичной для венды функциональности и оставить чисто "разблокировку премиума" то сработает?

Вообще лично я именно в Яндекс Музыке не прям очень заинтересован т.к. там нет многого из того что я слушаю. Сам использую Spotify. Но если потребуется потестировать-попробовать всякое именно на макоси, то я могу помочь. Плюс, несмотря на то что год линукса на десктопе уже наступил, аудитория маков все же еще пока поболее и, думаю, их пользователи были бы заинтересованы и благодарны если модификация станет доступна и для них.

В любом случае, спасибо за мод! 🙂

user334 avatar Mar 03 '25 17:03 user334

Но на этом, как говорится, мои полномочия всё - js я не знаю и код мода, увы, поправить не смогу. После нажатия "ок" в этом модальном окне программа остается запущенной, но активного окна у нее нет. Вероятно "где-то там" она ждет авторизации, но ее не пройти без окна) Все что можно сделать это вызвать "about" из системного меню и она покажет версию себя. Судя по tray.js там и по чейнджлогу мода и по добавленным фичам и в целом по тому что изначально мод под Windows, я полагаю, что есть некая несовместимость с макосью. Может если просто убрать часть специфичной для венды функциональности и оставить чисто "разблокировку премиума" то сработает?

Вообще лично я именно в Яндекс Музыке не прям очень заинтересован т.к. там нет многого из того что я слушаю. Сам использую Spotify. Но если потребуется потестировать-попробовать всякое именно на макоси, то я могу помочь. Плюс, несмотря на то что год линукса на десктопе уже наступил, аудитория маков все же еще пока поболее и, думаю, их пользователи были бы заинтересованы и благодарны если модификация станет доступна и для них.

В любом случае, спасибо за мод! 🙂

Вы смогли победить ASAR Integrity. Это похвально. Я не стал делать поддержку MacOs как раз из за него. Ибо аппле не оценит если я буду хеш приложения менять из этого самого приложения. Нужен патчер, отдельная программа установщик. Он в планах но не в ближайшем будущем.

Проблема же с которой вы столкнулись после связана с тем что я писал мод не оглядываясь на совместимость с MacOs. Из за этого например пути до некоторых файлов и папок я указывал через /LOCAL_APPDATA/... Которых очевидно нет в macOs

TheKing-OfTime avatar Mar 03 '25 17:03 TheKing-OfTime

Я провёл некоторые изменения чтобы мод мог запуститься на Mac OS. Если вам интересно, то можете попробовать установить его снова. @user334

TheKing-OfTime avatar Mar 05 '25 17:03 TheKing-OfTime

Проделал на macOS 15.3.1 все описанные выше действия - приложение запустилось и вроде как все функции работают.

Artemon4ik8091 avatar Mar 11 '25 16:03 Artemon4ik8091

На линуксе тоже работает. app.asar переименовал в yandex-music.asar и положил в /lib/yandex-music/

Damon95 avatar Mar 14 '25 08:03 Damon95

На линуксе тоже работает. app.asar переименовал в yandex-music.asar и положил в /lib/yandex-music/

Вы мод ставили поверх https://github.com/cucumber-sp/yandex-music-linux ? Если да то работает ли воспроизведение? Ибо у них там были проблемы с ним. А их фиксы не произведены в моей модификации.

TheKing-OfTime avatar Mar 14 '25 08:03 TheKing-OfTime

Проделал на macOS 15.3.1 все описанные выше действия - приложение запустилось и вроде как все функции работают.

Пришло обновление яндекс музыки Итог - слёт модификации :(

Artemon4ik8091 avatar Mar 14 '25 08:03 Artemon4ik8091

На линуксе тоже работает. app.asar переименовал в yandex-music.asar и положил в /lib/yandex-music/

Вы мод ставили поверх https://github.com/cucumber-sp/yandex-music-linux ? Если да то работает ли воспроизведение? Ибо у них там были проблемы с ним. А их фиксы не произведены в моей модификации.

Да, бывает с 1 раза кнопка play работает, а бывает с 5. В консоле если передается: [14.03.2025, 12:06:38,841] [info] (Events) Event received PLAYER_STATE true true true то играет Если [14.03.2025, 12:09:25,937] [info] (Events) Event received PLAYER_STATE false true true то не играет Иконка на панели задач отвалилась и трей, но это мелочи.

Damon95 avatar Mar 14 '25 09:03 Damon95

Проделал на macOS 15.3.1 все описанные выше действия - приложение запустилось и вроде как все функции работают.

Пришло обновление яндекс музыки Итог - слёт модификации :(

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

TheKing-OfTime avatar Mar 14 '25 09:03 TheKing-OfTime

Да, бывает с 1 раза кнопка play работает, а бывает с 5. В консоле если передается: [14.03.2025, 12:06:38,841] [info] (Events) Event received PLAYER_STATE true true true то играет Если [14.03.2025, 12:09:25,937] [info] (Events) Event received PLAYER_STATE false true true то не играет Иконка на панели задач отвалилась и трей, но это мелочи.

Это хорошая новость. Тогда я разморожу работу над патчером. Он будет представлен в версии модификации 2.0.0 Он позволит устанавливать модификацию на другие OS. А также избавит от проблемы со слётом модификации при обновлении приложения.

TheKing-OfTime avatar Mar 14 '25 09:03 TheKing-OfTime

А когда примерная дата выхода 2.0? Я бы тоже хотел использовать на macos эту модификацию

dmitrybabich avatar Mar 27 '25 14:03 dmitrybabich

Я не думаю, что стоит ожидать 2.0 в ближайшее время. Я не могу работать фултайм над проектом. К тому же у меня на носу дипломная работа и экзамены. Так что разработка ещё сильнее замедлится.

TheKing-OfTime avatar Mar 27 '25 15:03 TheKing-OfTime

Важное дополнение. Яндекс обновил приложение и теперь нужно заменить хэш только по следующему пути: /Applications/Яндекс Музыка.app/Contents/Info.plist Это легче всего делается в Xcode.

Artemon4ik8091 avatar Apr 13 '25 14:04 Artemon4ik8091

Обновил toolset.js теперь он поддерживает macOS и выполнит при сборке асара из соурсов обход asar integrity автоматически

TheKing-OfTime avatar May 05 '25 05:05 TheKing-OfTime

Потестировал - сработало. Правда даже с sudo скрипт не мог заменить файлы в "/Applications/Яндекс Музыка.app/Contents/". я сделал все локально и скопировал asar и plist вручную.

dmitrybabich avatar May 05 '25 07:05 dmitrybabich

Правда даже с sudo скрипт не мог заменить файлы в "/Applications/Яндекс Музыка.app/Contents/".

Странно, у меня вот эта команда выполнилась без проблем:

node toolset.js build -d -m

Минификация завершена: 15.337s
Архивация в /Applications/Яндекс Музыка.app/Contents/Resources/app.asar
Архивация завершена: 722.359ms
Минифицированный код отчищен
Asar integrity включено. Обход
Хеш модифицированного asar: b89f1a7c2e0d020a49ddeced361d1e9db30096f0025bc6e1b3d4a9b7b8e99663
Подменяю хеш в Info.plist
Подменяю подпись
Executable=/Applications/Яндекс Музыка.app/Contents/MacOS/Яндекс Музыка
warning: Specifying ':' in the path is deprecated and will not work in a future release
Упакованы entitlements из /Applications/Яндекс Музыка.app в /Users/[cut]/YandexMusicModClient/temp/extracted_entitlements.xml
/Applications/Яндекс Музыка.app: replacing existing signature
Кеш очищен
Обход asar integrity завершён
Image

korenskoy avatar May 05 '25 07:05 korenskoy

Потестировал - сработало. Правда даже с sudo скрипт не мог заменить файлы в "/Applications/Яндекс Музыка.app/Contents/". я сделал все локально и скопировал asar и plist вручную.

А с какой именно ошибкой вы столкнулись? (желательно скриншот из консоли) Это важно ибо я буду использовать эту же реализацию в https://github.com/TheKing-OfTime/YandexMusicModPatcher

TheKing-OfTime avatar May 05 '25 07:05 TheKing-OfTime

Похоже это не работает из-за System Integrity Protection (SIP). Я даже не могу вот такую команду выполнить:

sudo cp "/Applications/Яндекс Музыка.app/Contents/Resources/app.asar" "/Applications/Яндекс Музыка.app/Contents/Resources/app.asar-1"
cp: /Applications/Яндекс Музыка.app/Contents/Resources/app.asar-1: Operation not permitted

При запуске node toolset.js build -d -m у меня последний лог это

Архивация в /Applications/Яндекс Музыка.app/Contents/Resources/app.asar

и дальше скрипт завершается без ошибок в консоли

dmitrybabich avatar May 05 '25 07:05 dmitrybabich

А, вот оно что. Да, у меня SIP отключен.

korenskoy avatar May 05 '25 07:05 korenskoy

Добавил проверку на SIP в toolset.js На сколько я понимаю не нужно его полностью отключать. Достаточно выключить его для File System

Image

TheKing-OfTime avatar May 05 '25 14:05 TheKing-OfTime

Релизнул альфа билд Патчера https://github.com/TheKing-OfTime/YandexMusicModPatcher/releases/tag/v0.1.0 Поддерживается установка мода на мак и винду. Но при этом патчер поставить можно уже и на linux Много багов и недочётов. Используйте на свой страх и риск

Image

Image

Image

TheKing-OfTime avatar May 08 '25 21:05 TheKing-OfTime