From 242e2040b671c93d5128c0ba1098c0b16ccf05b6 Mon Sep 17 00:00:00 2001 From: Dezoff-max <199903504+Dezoff-max@users.noreply.github.com> Date: Sat, 11 Jul 2026 14:32:47 +0500 Subject: [PATCH] Improve GitHub project presentation --- README.md | 122 ++++++++++++++++-- docs/screenshots/applications-multiselect.png | Bin 0 -> 2929546 bytes docs/screenshots/overview.png | Bin 0 -> 2726164 bytes docs/screenshots/scan-areas.png | Bin 0 -> 1543135 bytes docs/signing-notarization.md | 2 +- project-analysis.md | 6 +- 6 files changed, 113 insertions(+), 17 deletions(-) create mode 100644 docs/screenshots/applications-multiselect.png create mode 100644 docs/screenshots/overview.png create mode 100644 docs/screenshots/scan-areas.png diff --git a/README.md b/README.md index 976c484..f34f847 100644 --- a/README.md +++ b/README.md @@ -4,29 +4,125 @@
+ Безопасная локальная очистка macOS с предварительным просмотром,
+ Safe Mode и удалением приложений через Корзину.
+
+
+
|
|
+
+## Возможности
+
+- **Безопасное сканирование.** Кэши пользователя и браузеров, логи, временные файлы, Xcode Derived Data, кэши Node/SwiftPM, Загрузки, установщики и Корзина.
+- **Понятный просмотр результатов.** Категории, размер, риск, причина рекомендации, точный путь и недоступные для чтения области.
+- **Safe Mode.** Включён по умолчанию и блокирует выбор элементов, требующих ручной проверки.
+- **Очистка через Корзину.** Разрешённые пути повторно проверяются перед выполнением; постоянное удаление не используется.
+- **Восстановление.** Элементы, перемещённые в текущем сеансе, можно вернуть, если исходный путь свободен.
+- **Удаление приложений.** Поиск сторонних программ в `/Applications` и `~/Applications`, выбор нескольких приложений и необязательных точных остатков по bundle ID.
+- **Меню-бар и автоматическое сканирование.** Статус диска, последний результат, расписание безопасного сканирования и локальные уведомления, пока CleanMac запущен.
+- **Контроль разрешений.** Живой статус Full Disk Access и Finder Automation без автоматического запроса доступа.
+- **Русский и английский интерфейс.** Переключение языка и светлой/тёмной темы внутри приложения.
+
+## Модель безопасности
+
+1. Сканирование выполняется только для чтения.
+2. Каждый кандидат относится к известной категории и допустимому корневому пути.
+3. Очистка требует явного выбора и отдельного подтверждения.
+4. Перед выполнением пути проверяются повторно.
+5. Файлы перемещаются в Корзину, а не удаляются навсегда.
+6. При удалении приложения сначала перемещается сам `.app`; связанные остатки не затрагиваются, если этот шаг завершился ошибкой.
+7. CleanMac не повышает привилегии и не устанавливает системный helper.
+
+## Установка
+
+Готовые архивы находятся на странице [Releases](https://github.com/Dezoff-max/CleanMac/releases/latest). Вместе с ZIP публикуется файл `.sha256` для проверки загрузки:
```bash
-./script/build_and_run.sh
+shasum -a 256 CleanMac-*.zip
```
-Core package checks:
+Сравните полученный хеш с первым значением в приложенном файле `.sha256`, затем распакуйте архив и переместите `CleanMac.app` в `/Applications`.
+
+Актуальные ограничения готовой сборки:
+
+- macOS 14 или новее;
+- архитектура Apple Silicon (`arm64`);
+- релиз пока подписан только ad-hoc и не нотарифицирован Apple.
+
+## Разрешения macOS
+
+CleanMac запрашивает доступ только по действию пользователя:
+
+- **Файлы и папки** — для выбранных пользовательских областей;
+- **Полный доступ к диску** — опционально, для более глубокого чтения защищённых метаданных;
+- **Автоматизация Finder** — опционально, только чтобы показать выбранный элемент в Finder.
+
+Сканирование и очистка не требуют Finder Automation. Разрешения можно проверить на экране «Доступы» и изменить в системных настройках macOS.
+
+## Сборка из исходников
+
+Требуются macOS 14+ и Xcode 26+.
+
+```bash
+git clone https://github.com/Dezoff-max/CleanMac.git
+cd CleanMac
+./script/build_and_run.sh --verify
+```
+
+Тесты ядра:
```bash
-cd CleanMacCore
-swift test
+swift test --package-path CleanMacCore
```
-## Project
+Локальный Release ZIP и SHA-256:
+
+```bash
+./script/package_release.sh
+```
+
+Подписание Developer ID и нотарификация описаны в [docs/signing-notarization.md](docs/signing-notarization.md).
+
+## Структура проекта
+
+```text
+CleanMac/ SwiftUI-приложение для macOS
+CleanMacCore/ Тестируемое ядро сканирования и очистки
+script/ Сборка, запуск и упаковка релиза
+docs/ Документация и скриншоты
+.github/workflows/ CI и публикация GitHub Releases
+```
+
+## Участие в разработке
+
+1. Создайте отдельную ветку от `main`.
+2. Сохраняйте модель безопасности: scan → review → confirm → Trash.
+3. Добавляйте тесты для изменений путей, сканирования и удаления.
+4. Перед Pull Request выполните `swift test --package-path CleanMacCore` и `./script/build_and_run.sh --verify`.
-- `CleanMac/` contains the macOS SwiftUI app.
-- `CleanMacCore/` contains reusable core logic.
-- `script/build_and_run.sh` builds and launches the app from a local build folder.
+Сообщения об ошибках и предложения можно создавать через [GitHub Issues](https://github.com/Dezoff-max/CleanMac/issues).
-## License
+## Лицензия
-[MIT](LICENSE)
+Проект распространяется по лицензии [MIT](LICENSE).
diff --git a/docs/screenshots/applications-multiselect.png b/docs/screenshots/applications-multiselect.png
new file mode 100644
index 0000000000000000000000000000000000000000..6819799209c873f54efd1d9e5d4652cc8c140003
GIT binary patch
literal 2929546
zcma&O2Uru^w>FM|0-{s}X@c}3ph%Gtih>xBE+8GHm(YupfPg57fOL`Gd#DLDp@{Sj
zA#{}9k&@8iKb&*!y}$qWJ@-52d4?HgX3y-h_S*0Ju9bwUt18~SPJbN_5AP=Uxx6MG
z9?1qC9?=BxHQ)>bJ**TDkC4pf=~H#Pr;1Ms2wvvy%FK8q;H=68RB(}<4bMXDd%DF`)Wa@s5eU;po&W-658_q}br`a|<
z(zoO&n)83g{Jbz|=DKHFv>C>qS*4yy7{q-zaIBayL`$+>`>3)$rp6B0J$1B{yzRF<
z+N{85UF2c)BRK2Kcz0i1u5b-tHC_!G!c8{#Eq9O6?>f=QU-u z6J^ez%dDM%Xs~Xc0qA<+jNi#7UZQ<}-EJ4(aGq+b2oVJ0zQ%>J+Dvg>maDdCm z^wi?87L@g&E9#@F(<0l;sXnSkZ+`_V;TP3_S(ljn4u7o;r=3?B K+NB0Zk%+Zd#Mt{?{ z<&r_BjtMH3`LLsy5h~?p`P83S#qj-XImU)1sIYS~L~evnnFMwN`%EPbeIzhv#Rk)F zu}&)r^)QXTW#0$+5?p;+)fdq5XLLgI@0-4I{G{HP_F7I^Ll`*n_j^^)5JUHpW?$|$ z+4T_nEEdG7E`;eQ_a+&9(=Ix9v%9C=cpe+gR$LU4zC03^cm0P^PWU0LYA?a7U4xhL zVe?35sU?FV1$mm(&k#6H!)gA|@R&c7@*vQZ|Q%Yy%@j3dfS*7MRQ T_=xMyw$C fkFmVal9b2#HMN6&YlCrT-QJP~axG56rG$?b}OwOBmYhoVJ zPq{HJ{P^F*pC8oE^~02g&GebUKv+@3U9T&QW@EE BR8eh73My2tr zq;98;p}R7kXwkFpG20lv+XgXip8#H~2Vdp(K^_OEi@A^=EA1F920ac}X(ecQLh-6? z3;L5mE}^{8LwTwx^6vL6)%T$JS;j>S11ZhQ?^4xhPyD0B5c?RrXg>Nq1*;h1x0lmX zC1!V!Yb?ej%J&zk3HM~jEBO(N=!VGW`Q|acfk@YWkl5HY%vgs;i=eW##S!+yHZ3EN zY7swS8g#Qu#oWL&l$bke_eHeHTi-3$G|~#^K%^ow^kt|_OtxcU(dGqO*F<~vuubfP zKSf43N5#&BT`7}&B46Y4)wMMtfk2_egtN@8f2^co?i1e#^ZD zMRGTl8t1`YFb={+0>(csVs9V5y_IuK8a@iVnPrP?`@8;n4Oi)h)Ir? znYWw5RdZW29Ue2%v|RWqG?5n0?xrln8riprHMOK;g(&@XZPQAmYn^k5`CA%bVRjs2 zKFhsVurr_Kuqn(Qg=+RQYZgw^w %3P&-aIo9#O09g?4Id6+DVK%-tU%+B 6gYa* ztA8N#r9o`XkP=@oqULrz(cQN!A)mOGqq9rH1nRhn-I+MXs2~0uRAeq$>P^zM&AvEh zrS7_8QOsFV)^c6Wdbu-3SuSdkLr2~}Qs%to;a>uI-9of-msbL`gwRJ1mcc}0c#Zd7 zvBEnW`BWGSb+hr2iwpk00G8`qKiA&vdVCpGi#B=*eOdb%qr1#UJ*iKEn-T%97EQ3T zicw~R>kj9_f>vD7$Hm${zaXt)$}3DKz`9Ax(IQSscb!2D1jrFefl<$+`5`}MRH&Nd z?}Tha52nQqYeXw7c>~nV?WSeUR@MF%bXX<*z-957(Q0K}sA=p;zR)AGatv!53G0}F zk|e();l@lE_$VU6S-%WZOgsKDt2^YliA(lD%4GZE0ryjAUN%QlPhzp!wlElUcwRcnoyEbTH$YgXBC-YDN3C08$mBM ziovfDV+Pj*D7Rrq+=T3aU@*+O=k~^U;|(53I*A<;9Q*M%;+Yr6r^_;>sQnzlMEgwB z?TT&zE!Nye;P-DTZg18&|6-;%-E{Q7)Q(dhl18A^hcDT8P+4D_`g kHG6U|!@^JK z8d$(*Rz&z5H|y`uVQ@8x9WxL@U?k&Jn!$&N?FhUSE%jYGIaI2zHyhJk<@y%@lD_np zFCnWu45{qZqD6BSHau@mE&B^?0lFBoX+5C1bX|F}>*O{$7VyAaMFrtovdrFW!d`nt z*VjzcuGj?xYdrV9efy@G2fGhIgV4Zy%IgzfW=tz`NhHPz09rYV;Cds~cxisDLKzqI zcoe5nOS7Q@84AnfTl+C2){8gIAj%^cHd!(D$yBWXFi6W6%rCc5APW1Be3Ns>Lx1a_ zGgK 8f4WXzek?}XHxM*lF-rExzKwkl zjXKAcCfPexnY^28H71unOpi7Z`^w%3D`VR{BJ|l+{sd6 Bzj8qh&0u5>0!+ @QqizF;A!@k~ zfw}002X@{Okacj3b-UaQjyk>G#(w19E9kcqR#BtXMY%yI!T8trSN`{}V90Kg)BwRt zP%bvgoc0oO!Y?6bb>kTX+wXt=sEKpk6kr?RyYFv9Ht?9K%%28AMtr(h$6`VPDmZy1 z>pMNFHNc~q%-$;*EOqHsp~{}q?g`NlFOKnbv@>LA^fu4f@cKBj!_dhgEJM C7?l8J_|%fSE%5MWb{dM+0mM1 zVpVLgt(;r0)evvD*VbGJJzh7b@FlzMNe39yGbGyOq{J!>87f@}T3~0Rs5bcFBbota zg;V9OtOnmc4RmF1`z}kaQKucse{okZ ULa=UXn$BF7>(BOF#BIZ;s!TCAYQlV zebTz6)y45?7T^T5Uu!ltJ;2L0tQ!`{4-W4^bl*w1lG71WF5SCM6dQ3GPXD$N*s3<= zUG18%`7gA2nP$}k?wU5LuINL ;-9$ucQYDoH_jXejtcs z&AFSux&v3X1`xQoXt=hC1Q5p>F>plYh)!6uxwp|-9lq$Y0C=Vi)M!Bh