diff --git a/PureMac/es.lproj/Localizable.strings b/PureMac/es.lproj/Localizable.strings new file mode 100644 index 0000000..03b7a56 --- /dev/null +++ b/PureMac/es.lproj/Localizable.strings @@ -0,0 +1,125 @@ +/* Full Disk Access Banner */ +"Full Disk Access Required" = "Se requiere acceso total al disco"; +"PureMac needs Full Disk Access to scan Trash, Mail, Desktop, Documents, and Homebrew cache." = "PureMac necesita acceso total al disco para analizar la Papelera, Mail, Escritorio, Documentos y la caché de Homebrew."; +"Open Settings" = "Abrir Ajustes"; + +/* Top Bar */ +"Macintosh HD" = "Macintosh HD"; +"%@ free" = "%@ libres"; +"Auto-clean: " = "Limpieza automática: "; + +/* Sidebar */ +"CLEANING" = "LIMPIEZA"; +"Last cleaned: %@" = "Última limpieza: %@"; + +/* Smart Scan */ +"Smart Scan" = "Análisis inteligente"; +"Click Scan to start" = "Haz clic en Analizar para empezar"; +"Total" = "Total"; +"Used" = "Usado"; +"Free" = "Libre"; +"Purgeable" = "Purgable"; +"junk found" = "archivos basura encontrados"; +"Your Mac is clean!" = "¡Tu Mac está limpio!"; +"freed up" = "liberados"; +"Cleaning..." = "Limpiando..."; +"Scanning..." = "Analizando..."; +"%lld/%lld items" = "%lld/%lld elementos"; + +/* Category Detail */ +"All Clean!" = "¡Todo limpio!"; +"No junk files found in this category." = "No se encontraron archivos basura en esta categoría."; +"Not scanned yet" = "Aún no analizado"; +"Click Scan to analyze this category" = "Haz clic en Analizar para revisar esta categoría"; +"%lld of %lld selected" = "%lld de %lld seleccionados"; +"Select All" = "Seleccionar todo"; +"Deselect All" = "Deseleccionar todo"; +"%lld items" = "%lld elementos"; + +/* Buttons */ +"Scan" = "Analizar"; +"Re-scan" = "Volver a analizar"; +"Scan Again" = "Analizar de nuevo"; +"Done" = "Listo"; +"Clean (%@)" = "Limpiar (%@)"; +"Clean %lld items (%@)" = "Limpiar %lld elementos (%@)"; + +/* Settings - Schedule */ +"Schedule" = "Programación"; +"Automatic Cleaning" = "Limpieza automática"; +"Automatically scan and clean your Mac on a schedule" = "Analiza y limpia tu Mac automáticamente según una programación"; +"Scan Interval" = "Intervalo de análisis"; +"Automation" = "Automatización"; +"Auto-clean after scan" = "Limpiar automáticamente tras el análisis"; +"Minimum junk size to trigger clean:" = "Tamaño mínimo de basura para iniciar la limpieza:"; +"50 MB" = "50 MB"; +"100 MB" = "100 MB"; +"250 MB" = "250 MB"; +"500 MB" = "500 MB"; +"1 GB" = "1 GB"; +"Auto-purge purgeable space" = "Purgar automáticamente el espacio purgable"; +"Show notification on completion" = "Mostrar notificación al finalizar"; +"Status" = "Estado"; +"Last run" = "Última ejecución"; +"Next run" = "Próxima ejecución"; +"Never" = "Nunca"; +"Not scheduled" = "Sin programar"; + +/* Settings - General */ +"General" = "General"; +"App Behavior" = "Comportamiento de la app"; +"Launch at login" = "Abrir al iniciar sesión"; +"Show in Dock" = "Mostrar en el Dock"; +"Show menu bar icon" = "Mostrar ícono en la barra de menús"; +"Safety" = "Seguridad"; +"PureMac will never delete system-critical files. Only caches, logs, temporary files, and user-selected items are removed." = "PureMac nunca eliminará archivos críticos del sistema. Solo se eliminan cachés, registros, archivos temporales y elementos seleccionados por el usuario."; + +/* Settings - About */ +"About" = "Acerca de"; +"Version 1.0.0" = "Versión 1.0.0"; +"A free, open-source Mac cleaning utility.\nKeep your Mac fast, clean, and optimized." = "Una utilidad de limpieza para Mac, gratuita y de código abierto.\nMantén tu Mac rápido, limpio y optimizado."; +"GitHub Repository" = "Repositorio de GitHub"; +"MIT License" = "Licencia MIT"; + +/* Cleaning Categories */ +"System Junk" = "Basura del sistema"; +"User Cache" = "Caché de usuario"; +"AI Apps" = "Apps de IA"; +"Mail Files" = "Archivos de Mail"; +"Trash Bins" = "Papeleras"; +"Large & Old Files" = "Archivos grandes y antiguos"; +"Purgeable Space" = "Espacio purgable"; +"Xcode Junk" = "Basura de Xcode"; +"Brew Cache" = "Caché de Brew"; + +/* Category Descriptions */ +"Scan everything at once" = "Analiza todo a la vez"; +"System caches, logs, and temporary files" = "Cachés del sistema, registros y archivos temporales"; +"Application caches and browser data" = "Cachés de aplicaciones y datos del navegador"; +"Logs, caches, and temporary files from local AI apps" = "Registros, cachés y archivos temporales de apps de IA locales"; +"Downloaded mail attachments" = "Adjuntos de correo descargados"; +"Files in your Trash" = "Archivos en tu Papelera"; +"Files over 100 MB or older than 1 year" = "Archivos de más de 100 MB o con más de 1 año"; +"APFS purgeable disk space" = "Espacio purgable de disco APFS"; +"Derived data, archives, and simulators" = "Datos derivados, archivos y simuladores"; +"Homebrew download cache" = "Caché de descargas de Homebrew"; + +/* Schedule Intervals */ +"Every Hour" = "Cada hora"; +"Every 3 Hours" = "Cada 3 horas"; +"Every 6 Hours" = "Cada 6 horas"; +"Every 12 Hours" = "Cada 12 horas"; +"Daily" = "Diariamente"; +"Weekly" = "Semanalmente"; +"Every 2 Weeks" = "Cada 2 semanas"; +"Monthly" = "Mensualmente"; + +/* Notifications */ +"Found %@ of junk files." = "Se encontraron %@ de archivos basura."; + +/* Node Cache */ +"Node Cache" = "Caché de Node"; +"npm, yarn, and pnpm download caches" = "Cachés de descarga de npm, yarn y pnpm"; +"npm cache" = "caché de npm"; +"yarn classic cache" = "caché de yarn classic"; +"pnpm content-addressable store" = "almacén de contenido direccionable de pnpm"; diff --git a/README.md b/README.md index c2ee780..eb9089e 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,14 @@ PureMac

+

+ English | + Español | + 日本語 | + 简体中文 | + 繁體中文 +

+

PureMac

diff --git a/docs/README.es.md b/docs/README.es.md new file mode 100644 index 0000000..64bf643 --- /dev/null +++ b/docs/README.es.md @@ -0,0 +1,157 @@ +

+ PureMac +

+ +

+ English | + Español | + 日本語 | + 简体中文 | + 繁體中文 +

+ +

PureMac

+ +

+ Gestor de aplicaciones y limpiador de sistema para macOS, gratuito y de código abierto.
+ Desinstala apps por completo. Encuentra archivos huérfanos. Limpia la basura del sistema.
+ Sin suscripciones. Sin telemetría. Sin recolección de datos. +

+ +

+ Última versión + Estado de build + macOS 13.0+ + Swift 5.9 + Licencia MIT + Estrellas + Descargas +

+ +

+ Instalación - + Características - + Capturas - + Contribuir +

+ +--- + +## Instalación + +### Homebrew (recomendado) + +```bash +brew update +brew install --cask puremac +``` + +### Descarga directa + +Descarga el `.dmg` más reciente desde [Releases](https://github.com/momenbasel/PureMac/releases/latest), ábrelo y arrastra PureMac a `/Applications`. + +> Firmado y notarizado con Apple Developer ID — se instala sin advertencias de Gatekeeper. + +### Compilar desde el código fuente + +```bash +brew install xcodegen +git clone https://github.com/momenbasel/PureMac.git +cd PureMac +xcodegen generate +xcodebuild -project PureMac.xcodeproj -scheme PureMac -configuration Release -derivedDataPath build build +open build/Build/Products/Release/PureMac.app +``` + +## Características + +### Desinstalador de apps +- Descubre todas las apps instaladas desde `/Applications` y `~/Applications` +- Motor heurístico de búsqueda de archivos con **10 niveles de coincidencia** (bundle ID, nombre de la empresa, entitlements, team identifier, metadatos de Spotlight, descubrimiento de contenedores) +- **3 niveles de sensibilidad**: Estricto (seguro), Mejorado (equilibrado), Profundo (exhaustivo) +- Muestra todos los archivos relacionados: cachés, preferencias, contenedores, registros, archivos de soporte, launch agents +- Protección de apps del sistema: 27 apps de Apple están excluidas de la lista +- Vista maestro-detalle: tabla de apps a la izquierda, archivos descubiertos a la derecha + +### Buscador de archivos huérfanos +- Detecta archivos sobrantes en `~/Library` de apps ya desinstaladas +- Compara el contenido de la Biblioteca con los identificadores de todas las apps instaladas +- Limpieza de archivos huérfanos con un clic + +### Limpiador del sistema +- **Análisis inteligente** — análisis de un clic en todas las categorías +- **Basura del sistema** — cachés del sistema, registros y archivos temporales +- **Caché de usuario** — descubre dinámicamente todos los cachés de apps (sin lista predefinida) +- **Adjuntos de correo** — adjuntos de correo descargados +- **Papeleras** — vacía todas las papeleras +- **Archivos grandes y antiguos** — archivos de más de 100 MB o con más de 1 año +- **Espacio purgable** — detección de espacio purgable APFS +- **Basura de Xcode** — DerivedData, Archives, cachés de simuladores +- **Caché de Brew** — caché de descargas de Homebrew (detecta HOMEBREW_CACHE personalizado) +- **Limpieza programada** — análisis automático en intervalos configurables + +### Experiencia nativa de macOS +- Desarrollado con SwiftUI usando componentes nativos de macOS +- `NavigationSplitView`, `Toggle`, `ProgressView`, `Form`, `GroupBox`, `Table` +- Respeta el modo claro/oscuro del sistema automáticamente +- Sin gradientes personalizados, resplandores ni estilos de app web +- Onboarding de primer arranque con configuración de acceso total al disco + +### Seguridad +- Diálogos de confirmación antes de cualquier operación destructiva +- Prevención de ataques por enlaces simbólicos — resuelve y valida rutas antes de eliminar +- Protección de apps del sistema — las apps de Apple no se pueden desinstalar +- Los archivos grandes y antiguos nunca se seleccionan automáticamente +- Registro estructurado con `os.log` (visible en Consola.app) + +## Capturas + +| Onboarding | Desinstalador de apps | +|---|---| +| ![Onboarding](../screenshots/onboarding.png) | ![Desinstalador de apps](../screenshots/app-uninstaller.png) | + +| Basura del sistema | Basura de Xcode | +|---|---| +| ![Basura del sistema](../screenshots/system-junk.png) | ![Basura de Xcode](../screenshots/xcode-junk.png) | + +| Caché de usuario | +|---| +| ![Caché de usuario](../screenshots/user-cache.png) | + +## Arquitectura + +``` +PureMac/ + Logic/Scanning/ - Motor heurístico de escaneo, base de ubicaciones, condiciones + Logic/Utilities/ - Registro estructurado + Models/ - Modelos de datos, errores tipados + Services/ - Motor de escaneo, motor de limpieza, programador + ViewModels/ - Estado centralizado de la app + Views/ - Vistas nativas de SwiftUI + Apps/ - Vistas del desinstalador + Cleaning/ - Análisis inteligente y vistas de categorías + Orphans/ - Buscador de huérfanos + Settings/ - Ajustes basados en Form nativo + Components/ - Componentes compartidos +``` + +Componentes clave: +- **AppPathFinder** — motor de coincidencia heurística de 10 niveles para descubrir archivos de apps +- **Locations** — más de 120 rutas de búsqueda del sistema de archivos macOS +- **Conditions** — 25 reglas de coincidencia por app para casos especiales (Xcode, Chrome, VS Code, etc.) +- **AppInfoFetcher** — metadatos de Spotlight + respaldo de Info.plist para descubrir apps +- **Logger** — registro unificado con `os.log` de Apple + +## Contribuir + +Las contribuciones son bienvenidas. Consulta [CONTRIBUTING.md](../CONTRIBUTING.md) para las pautas. + +Áreas donde la ayuda es especialmente bienvenida: +- Filtros predefinidos por tamaño y fecha en las vistas de categoría +- Cobertura de XCTest para AppState y el motor de escaneo +- Localización (es, pt-BR y otros idiomas) +- Diseño del ícono de la app + +## Licencia + +Licencia MIT. Consulta [LICENSE](../LICENSE) para más detalles. diff --git a/docs/README.ja.md b/docs/README.ja.md new file mode 100644 index 0000000..954a5c1 --- /dev/null +++ b/docs/README.ja.md @@ -0,0 +1,157 @@ +

+ PureMac +

+ +

+ English | + Español | + 日本語 | + 简体中文 | + 繁體中文 +

+ +

PureMac

+ +

+ 無料・オープンソースの macOS アプリマネージャー兼システムクリーナー。
+ アプリを完全にアンインストール。孤立ファイルを検出。システムのゴミを一掃。
+ サブスクリプション、テレメトリ、データ収集は一切なし。 +

+ +

+ 最新リリース + ビルド状況 + macOS 13.0+ + Swift 5.9 + MIT License + スター数 + ダウンロード数 +

+ +

+ インストール - + 機能 - + スクリーンショット - + コントリビューション +

+ +--- + +## インストール + +### Homebrew(推奨) + +```bash +brew update +brew install --cask puremac +``` + +### 直接ダウンロード + +[Releases](https://github.com/momenbasel/PureMac/releases/latest) から最新の `.dmg` をダウンロードし、開いて PureMac を `/Applications` にドラッグします。 + +> Apple Developer ID で署名・公証済み — Gatekeeper の警告なしでインストールできます。 + +### ソースからビルド + +```bash +brew install xcodegen +git clone https://github.com/momenbasel/PureMac.git +cd PureMac +xcodegen generate +xcodebuild -project PureMac.xcodeproj -scheme PureMac -configuration Release -derivedDataPath build build +open build/Build/Products/Release/PureMac.app +``` + +## 機能 + +### アプリアンインストーラー +- `/Applications` と `~/Applications` からすべてのインストール済みアプリを検出 +- **10 段階のマッチング**を行うヒューリスティックなファイル検出エンジン(バンドル ID、企業名、エンタイトルメント、チーム識別子、Spotlight メタデータ、コンテナ検出) +- **3 段階の感度**: Strict(安全)、Enhanced(バランス重視)、Deep(徹底) +- 関連するすべてのファイルを表示: キャッシュ、設定、コンテナ、ログ、サポートファイル、ランチエージェント +- システムアプリ保護 — 27 個の Apple 製アプリがアンインストール対象から除外されます +- マスター/ディテールビュー: 左にアプリ一覧、右に検出されたファイル + +### 孤立ファイル検出 +- アンインストール済みアプリが `~/Library` に残した残骸を検出 +- Library の内容を、インストール済みアプリの識別子と照合 +- ワンクリックで孤立ファイルをクリーンアップ + +### システムクリーナー +- **スマートスキャン** — すべてのカテゴリをワンクリックでスキャン +- **システムジャンク** — システムキャッシュ、ログ、一時ファイル +- **ユーザーキャッシュ** — すべてのアプリキャッシュを動的に検出(ハードコーディングされたリストなし) +- **メール添付ファイル** — ダウンロード済みのメール添付 +- **ゴミ箱** — すべてのゴミ箱を空に +- **大容量・古いファイル** — 100 MB を超える、または 1 年以上経過したファイル +- **消去可能領域** — APFS の消去可能ディスク領域を検出 +- **Xcode ジャンク** — DerivedData、Archives、シミュレータキャッシュ +- **Brew キャッシュ** — Homebrew ダウンロードキャッシュ(カスタム HOMEBREW_CACHE も検出) +- **スケジュールクリーニング** — 設定可能な間隔での自動スキャン + +### ネイティブな macOS 体験 +- ネイティブ macOS コンポーネントを使った SwiftUI で実装 +- `NavigationSplitView`、`Toggle`、`ProgressView`、`Form`、`GroupBox`、`Table` +- システムのライト/ダークモードを自動で尊重 +- カスタムグラデーション、グロー、Web アプリ風のスタイリングなし +- 初回起動時にフルディスクアクセスのオンボーディング + +### 安全性 +- 破壊的な操作の前に必ず確認ダイアログを表示 +- シンボリックリンク攻撃の防止 — 削除前にパスを解決・検証 +- システムアプリ保護 — Apple 製アプリはアンインストール不可 +- 大容量・古いファイルは自動選択されません +- `os.log` による構造化ログ(Console.app で閲覧可能) + +## スクリーンショット + +| オンボーディング | アプリアンインストーラー | +|---|---| +| ![オンボーディング](../screenshots/onboarding.png) | ![アプリアンインストーラー](../screenshots/app-uninstaller.png) | + +| システムジャンク | Xcode ジャンク | +|---|---| +| ![システムジャンク](../screenshots/system-junk.png) | ![Xcode ジャンク](../screenshots/xcode-junk.png) | + +| ユーザーキャッシュ | +|---| +| ![ユーザーキャッシュ](../screenshots/user-cache.png) | + +## アーキテクチャ + +``` +PureMac/ + Logic/Scanning/ - ヒューリスティックなスキャンエンジン、ロケーションデータベース、条件 + Logic/Utilities/ - 構造化ログ + Models/ - データモデル、型付きエラー + Services/ - スキャンエンジン、クリーニングエンジン、スケジューラ + ViewModels/ - アプリ全体の状態管理 + Views/ - ネイティブな SwiftUI ビュー + Apps/ - アプリアンインストーラーのビュー + Cleaning/ - スマートスキャンとカテゴリビュー + Orphans/ - 孤立ファイル検出 + Settings/ - ネイティブ Form ベースの設定画面 + Components/ - 共有コンポーネント +``` + +主要なコンポーネント: +- **AppPathFinder** — アプリ関連ファイルを検出するための 10 段階ヒューリスティックマッチングエンジン +- **Locations** — macOS の 120 以上のファイルシステム検索パス +- **Conditions** — 特殊ケース用の 25 個のアプリ別マッチングルール(Xcode、Chrome、VS Code など) +- **AppInfoFetcher** — アプリ検出のための Spotlight メタデータ + Info.plist フォールバック +- **Logger** — Apple の `os.log` による統合ロギング + +## コントリビューション + +コントリビューションを歓迎します。ガイドラインは [CONTRIBUTING.md](../CONTRIBUTING.md) を参照してください。 + +特に歓迎する分野: +- カテゴリビューでのサイズ/日付フィルターのプリセット +- AppState やスキャンエンジンに対する XCTest のカバレッジ +- ローカライゼーション(その他の言語) +- アプリアイコンのデザイン + +## ライセンス + +MIT ライセンス。詳細は [LICENSE](../LICENSE) を参照してください。 diff --git a/docs/README.zh-Hans.md b/docs/README.zh-Hans.md new file mode 100644 index 0000000..109fde1 --- /dev/null +++ b/docs/README.zh-Hans.md @@ -0,0 +1,157 @@ +

+ PureMac +

+ +

+ English | + Español | + 日本語 | + 简体中文 | + 繁體中文 +

+ +

PureMac

+ +

+ 免费、开源的 macOS 应用管理器与系统清理工具。
+ 彻底卸载应用。查找孤立文件。清理系统垃圾。
+ 无订阅。无遥测。无数据收集。 +

+ +

+ 最新版本 + 构建状态 + macOS 13.0+ + Swift 5.9 + MIT 许可证 + Stars + 下载量 +

+ +

+ 安装 - + 功能 - + 截图 - + 贡献 +

+ +--- + +## 安装 + +### Homebrew(推荐) + +```bash +brew update +brew install --cask puremac +``` + +### 直接下载 + +从 [Releases](https://github.com/momenbasel/PureMac/releases/latest) 下载最新的 `.dmg`,打开后将 PureMac 拖到 `/Applications` 目录。 + +> 已使用 Apple Developer ID 签名并公证 — 安装时不会出现 Gatekeeper 警告。 + +### 从源码构建 + +```bash +brew install xcodegen +git clone https://github.com/momenbasel/PureMac.git +cd PureMac +xcodegen generate +xcodebuild -project PureMac.xcodeproj -scheme PureMac -configuration Release -derivedDataPath build build +open build/Build/Products/Release/PureMac.app +``` + +## 功能 + +### 应用卸载器 +- 从 `/Applications` 和 `~/Applications` 发现所有已安装应用 +- 基于启发式的文件发现引擎,采用**10 级匹配**(Bundle ID、公司名称、entitlements、团队标识符、Spotlight 元数据、容器发现) +- **3 种灵敏度**:严格(安全)、增强(平衡)、深度(彻底) +- 展示所有相关文件:缓存、偏好设置、容器、日志、支持文件、启动代理 +- 系统应用保护 — 排除 27 个 Apple 应用,避免误删 +- 主从视图:左侧为应用列表,右侧为发现的文件 + +### 孤立文件查找 +- 检测 `~/Library` 中已卸载应用残留的文件 +- 将 Library 内容与所有已安装应用的标识符进行比对 +- 一键清理孤立文件 + +### 系统清理 +- **智能扫描** — 一键扫描所有类别 +- **系统垃圾** — 系统缓存、日志和临时文件 +- **用户缓存** — 动态发现所有应用缓存(无需硬编码应用列表) +- **邮件附件** — 已下载的邮件附件 +- **废纸篓** — 清空所有废纸篓 +- **大文件与旧文件** — 超过 100 MB 或超过 1 年的文件 +- **可清除空间** — 检测 APFS 可清除磁盘空间 +- **Xcode 垃圾** — DerivedData、Archives、模拟器缓存 +- **Brew 缓存** — Homebrew 下载缓存(可识别自定义 HOMEBREW_CACHE) +- **定时清理** — 按可配置的间隔自动扫描 + +### 原生 macOS 体验 +- 使用 SwiftUI 和原生 macOS 组件构建 +- `NavigationSplitView`、`Toggle`、`ProgressView`、`Form`、`GroupBox`、`Table` +- 自动遵循系统浅色/深色模式 +- 无自定义渐变、发光或 Web 应用样式 +- 首次启动引导,支持完整磁盘访问设置 + +### 安全性 +- 所有破坏性操作前都有确认对话框 +- 防御符号链接攻击 — 删除前解析并验证路径 +- 系统应用保护 — Apple 应用无法被卸载 +- 大文件与旧文件永远不会被自动选中 +- 通过 `os.log` 进行结构化日志记录(可在“控制台”应用中查看) + +## 截图 + +| 引导 | 应用卸载器 | +|---|---| +| ![引导](../screenshots/onboarding.png) | ![应用卸载器](../screenshots/app-uninstaller.png) | + +| 系统垃圾 | Xcode 垃圾 | +|---|---| +| ![系统垃圾](../screenshots/system-junk.png) | ![Xcode 垃圾](../screenshots/xcode-junk.png) | + +| 用户缓存 | +|---| +| ![用户缓存](../screenshots/user-cache.png) | + +## 架构 + +``` +PureMac/ + Logic/Scanning/ - 启发式扫描引擎、位置数据库、条件 + Logic/Utilities/ - 结构化日志 + Models/ - 数据模型、类型化错误 + Services/ - 扫描引擎、清理引擎、调度器 + ViewModels/ - 集中式应用状态 + Views/ - 原生 SwiftUI 视图 + Apps/ - 应用卸载器视图 + Cleaning/ - 智能扫描与分类视图 + Orphans/ - 孤立文件查找 + Settings/ - 基于原生 Form 的设置 + Components/ - 共享组件 +``` + +核心组件: +- **AppPathFinder** — 用于发现应用相关文件的 10 级启发式匹配引擎 +- **Locations** — 120+ 个 macOS 文件系统搜索路径 +- **Conditions** — 25 条针对特殊情况的应用级匹配规则(Xcode、Chrome、VS Code 等) +- **AppInfoFetcher** — 使用 Spotlight 元数据,并以 Info.plist 作为回退的应用发现 +- **Logger** — 基于 Apple `os.log` 的统一日志 + +## 贡献 + +欢迎贡献。请参阅 [CONTRIBUTING.md](../CONTRIBUTING.md) 了解指南。 + +特别欢迎的贡献方向: +- 分类视图中的大小/日期过滤器预设 +- AppState 与扫描引擎的 XCTest 覆盖 +- 本地化(其他语言) +- 应用图标设计 + +## 许可证 + +MIT 许可证。详情请参阅 [LICENSE](../LICENSE)。 diff --git a/docs/README.zh-Hant.md b/docs/README.zh-Hant.md new file mode 100644 index 0000000..b3f0962 --- /dev/null +++ b/docs/README.zh-Hant.md @@ -0,0 +1,157 @@ +

+ PureMac +

+ +

+ English | + Español | + 日本語 | + 简体中文 | + 繁體中文 +

+ +

PureMac

+ +

+ 免費、開源的 macOS 應用程式管理與系統清理工具。
+ 徹底解除安裝應用程式。尋找孤立檔案。清理系統垃圾。
+ 無訂閱。無遙測。無資料收集。 +

+ +

+ 最新版本 + 建置狀態 + macOS 13.0+ + Swift 5.9 + MIT 授權 + Stars + 下載數 +

+ +

+ 安裝 - + 功能 - + 螢幕截圖 - + 貢獻 +

+ +--- + +## 安裝 + +### Homebrew(建議) + +```bash +brew update +brew install --cask puremac +``` + +### 直接下載 + +從 [Releases](https://github.com/momenbasel/PureMac/releases/latest) 下載最新的 `.dmg`,開啟後將 PureMac 拖曳到 `/Applications`。 + +> 已使用 Apple Developer ID 簽署並公證 — 安裝時不會出現 Gatekeeper 警告。 + +### 由原始碼建置 + +```bash +brew install xcodegen +git clone https://github.com/momenbasel/PureMac.git +cd PureMac +xcodegen generate +xcodebuild -project PureMac.xcodeproj -scheme PureMac -configuration Release -derivedDataPath build build +open build/Build/Products/Release/PureMac.app +``` + +## 功能 + +### 應用程式解除安裝 +- 從 `/Applications` 及 `~/Applications` 探索所有已安裝的應用程式 +- 具備**10 層比對機制**的啟發式檔案發現引擎(Bundle ID、公司名稱、entitlements、Team Identifier、Spotlight 中繼資料、容器探索) +- **3 種靈敏度**:Strict(安全)、Enhanced(平衡)、Deep(徹底) +- 顯示所有相關檔案:快取、偏好設定、容器、記錄、支援檔案、啟動代理 +- 系統應用程式保護 — 排除 27 個 Apple 應用程式,避免誤刪 +- 主從檢視:左側為應用程式列表,右側為發現的檔案 + +### 孤立檔案搜尋 +- 偵測 `~/Library` 中已解除安裝應用程式留下的殘餘檔案 +- 將 Library 內容與所有已安裝應用程式的識別碼比對 +- 一鍵清除孤立檔案 + +### 系統清理 +- **智慧掃描** — 一鍵掃描所有分類 +- **系統垃圾** — 系統快取、記錄與暫存檔案 +- **使用者快取** — 動態發現所有應用程式快取(不需寫死清單) +- **郵件附件** — 已下載的郵件附件 +- **垃圾桶** — 清空所有垃圾桶 +- **大型與舊檔案** — 超過 100 MB 或超過 1 年的檔案 +- **可清除空間** — 偵測 APFS 可清除磁碟空間 +- **Xcode 垃圾** — DerivedData、Archives、模擬器快取 +- **Brew 快取** — Homebrew 下載快取(可辨識自訂的 HOMEBREW_CACHE) +- **排程清理** — 以可設定的間隔自動掃描 + +### 原生 macOS 體驗 +- 使用 SwiftUI 與原生 macOS 元件打造 +- `NavigationSplitView`、`Toggle`、`ProgressView`、`Form`、`GroupBox`、`Table` +- 自動沿用系統淺色/深色模式 +- 不使用自訂漸層、光暈或網頁風格樣式 +- 首次啟動時提供完整磁碟存取權的設定流程 + +### 安全性 +- 所有破壞性操作前皆會顯示確認對話框 +- 符號連結攻擊防護 — 刪除前先解析並驗證路徑 +- 系統應用程式保護 — Apple 應用程式無法被解除安裝 +- 大型與舊檔案永遠不會被自動勾選 +- 透過 `os.log` 進行結構化記錄(可在「主控台」App 中檢視) + +## 螢幕截圖 + +| 引導 | 應用程式解除安裝 | +|---|---| +| ![引導](../screenshots/onboarding.png) | ![應用程式解除安裝](../screenshots/app-uninstaller.png) | + +| 系統垃圾 | Xcode 垃圾 | +|---|---| +| ![系統垃圾](../screenshots/system-junk.png) | ![Xcode 垃圾](../screenshots/xcode-junk.png) | + +| 使用者快取 | +|---| +| ![使用者快取](../screenshots/user-cache.png) | + +## 架構 + +``` +PureMac/ + Logic/Scanning/ - 啟發式掃描引擎、位置資料庫、條件 + Logic/Utilities/ - 結構化記錄 + Models/ - 資料模型、型別化錯誤 + Services/ - 掃描引擎、清理引擎、排程器 + ViewModels/ - 集中式應用程式狀態 + Views/ - 原生 SwiftUI 視圖 + Apps/ - 應用程式解除安裝視圖 + Cleaning/ - 智慧掃描與分類視圖 + Orphans/ - 孤立檔案搜尋 + Settings/ - 以原生 Form 為基礎的設定 + Components/ - 共用元件 +``` + +核心元件: +- **AppPathFinder** — 用於發現應用程式相關檔案的 10 層啟發式比對引擎 +- **Locations** — 120 組以上的 macOS 檔案系統搜尋路徑 +- **Conditions** — 針對特殊情況(Xcode、Chrome、VS Code 等)的 25 條應用程式比對規則 +- **AppInfoFetcher** — 以 Spotlight 中繼資料搭配 Info.plist 作為後備的應用程式發現 +- **Logger** — 以 Apple `os.log` 為基礎的整合式記錄 + +## 貢獻 + +歡迎參與貢獻。請參閱 [CONTRIBUTING.md](../CONTRIBUTING.md) 了解指引。 + +特別歡迎協助的方向: +- 分類視圖中的大小/日期篩選預設值 +- AppState 與掃描引擎的 XCTest 覆蓋率 +- 本地化(其他語言) +- 應用程式圖示設計 + +## 授權 + +MIT 授權。詳情請參閱 [LICENSE](../LICENSE)。