Changelog¶
Todas as mudanças notáveis neste projeto serão documentadas neste arquivo.
O formato é baseado em Keep a Changelog, e este projeto adere ao Semantic Versioning.
[Unreleased]¶
✨ Adicionado¶
- Disk X-Ray — lupa com pinça: amplia o mapa até 10⁸× (um arquivo de 1 KB num disco inteiro) com pinça, roda do mouse ou ⌥ + rolar, sem precisar clicar na janela antes; arrastar/rolar desloca com inércia, e o mapa redesenha nítido durante o gesto, com camadas por baixo para nunca sobrar borda vazia. O layout é só o squarified dos tamanhos — ampliar não muda a arrumação, e a área fica proporcional ao tamanho em qualquer zoom.
- Disk X-Ray — ir até a seleção: ⌘↩ ou Magnify to Fit voa até o item, por menor que seja; selecionar na árvore ou em Largest Files leva o mapa até ele sem exagero (no máximo até a pasta dele encher a tela), e itens pequenos demais para o contorno ganham um pino com nome e tamanho. A caixa azul desliza até a nova seleção, com um pulso ao chegar.
- Disk X-Ray — modo 3D (Metal): botão de cubo na barra de ferramentas; a GPU desenha o mapa como almofadas iluminadas (cushion treemap), com as pastas aparecendo como vincos, nítido quadro a quadro em qualquer zoom. O 2D continua o mesmo de antes e é o padrão.
- Disk X-Ray — nomes e tooltip: botão Labels liga/desliga os nomes dos blocos e cabeçalhos (2D e 3D); parar o ponteiro sobre um bloco mostra o nome e o tamanho numa bandeirinha 3D, como um tooltip, que vira de lado perto da borda.
- .NET — modo agressivo: remove SDKs de majors fora de suporte (6, 7) e bandas superadas do mesmo
major.minor(9.0.102 com 9.0.306 instalado), preservando o SDK mais novo e a banda fixada por qualquerglobal.json; e desinstala workloads (MAUI, Android, iOS, Aspire 8…) que nenhum projeto em~/Projectse pastas afins usa — vários GB empacks/. - Homebrew: além do cache, roda
brew cleanup --prune=all(versões antigas, downloads, links quebrados) ebrew autoremove(dependências órfãs), e lista as ferramentas grandes que você instalou e das quais nada depende, com o comando para remover. - iOS Simulators — runtimes órfãos: o card aponta runtimes que o Xcode não usa mais e que continuam em
/System/Library/AssetsV2(sobra dosimctl runtime delete, que só desregistra), com o tamanho e o comando para remover pelo Terminal da Recuperação — a pasta é protegida pelo SIP, nemsudo rmapaga. - Docker — limpeza total (opcional): novo ajuste "Docker full cleanup" para máquinas de desenvolvimento. Para todos os contêineres e remove contêineres (com os logs), todas as imagens, todos os volumes — bancos de dados incluídos, build cache e redes. Desligado por padrão, não fica salvo entre aberturas do app e sempre pede confirmação. O card lista cada volume que será apagado.
- Docker — caches em uso visíveis: o card mostra os volumes de cache de build presos a um contêiner (ex.:
cargo-target10 GB emrecordarfotos-dev-api-1), e volumes*-cargo(CARGO_HOME) passam a contar como cache. - Liquid Glass é o tema principal e todo nativo: padrão para quem nunca escolheu tema e primeiro no seletor. O popover usa só componentes do sistema —
ListcomSection,Gaugecircular,LabeledContent,Picker,Toggle,ProgressView,NSSearchField— e painéis de confirmação, progresso e resultado em vidro nativo. Classic, Cyberpunk e Matrix mantêm o visual próprio. - Tema Liquid Glass: tema com o vidro nativo da Apple (
glassEffect,GlassEffectContainer, botões.glass/.glassProminent) nos controles e na navegação; conteúdo em preenchimentos semânticos, sem vidro sobre vidro. Respeita Reduzir Transparência, Aumentar Contraste e Reduzir Movimento. - Disk X-Ray com cara nova: cores por categoria de arquivo (Vídeo, Imagens, Código, Discos virtuais…), cabeçalho com a barra do disco e cartões por categoria, painel de tipos, mapa squarified com pastas agrupadas, ladrilhos arredondados e rótulos, trilha de navegação, tamanhos no padrão do Finder e toolbar nativa da janela.
- Instalação por script (
docs/install.sh): compila e instala na própria máquina, sem depender de certificado de desenvolvedor. - Disk X-Ray = WinDirStat no Mac (substitui o Disk Map): port fiel da janela principal do WinDirStat — árvore "All Files" / "Largest Files", lista de extensões e treemap cushion sincronizados, com o layout "Rows", o sombreamento, a paleta e os padrões do código original. O scanner segue o motor do WinDirStat: leitura em lote por pasta com
getattrlistbulk(2)(o equivalente aoNtQueryDirectoryFile) e workers paralelos — ~2,9 milhões de itens em ~16 s, contra ~55 s comfts(espaço físico real, hardlinks uma vez, montagens virtuais fora);<Free Space>(F6) e<Unknown>(F7) fecham a conta com o disco inteiro. - .NET SDKs: nova categoria que remove patches superados de SDKs, runtimes e targeting packs em
/usr/local/share/dotnet(uma senha de admin) e~/.dotnet. Mantém o mais novo de cada feature band (SDK) e de cadamajor.minor(runtime/pack); previews e packs de workload nunca são tocados. - Cargo/Rust: remove toolchains rustup fixadas em versão que já foram superadas (canais,
default_toolchaine[overrides]ficam) e o lixo de~/.rustup/{downloads,tmp}. - IDE Cache: apaga extensões que o próprio editor marcou em
extensions/.obsolete(VS Code, Cursor, Trae, Antigravity, Windsurf, Kiro) e entradas do histórico local (User/History) sem toque há mais de 90 dias. - Docker: remove a cópia em
com.docker.install/in_progresssó quando a versão em staging não é mais nova que a instalada — uma atualização pendente é preservada. - Novos caminhos: cache do Yarn Berry (
~/.yarn/berry/cache),DocumentationCachedo Xcode e índice do Continue (~/.continue/index).
🐛 Corrigido¶
- Disk X-Ray — caixas pretas no mapa: pastas com milhares de arquivos minúsculos (
node_modules, caches,.git/objects) deixavam a área deles vazia; agora ela é pintada com a cor do maior deles. - Disk X-Ray — caixa azul fora do lugar com zoom: com arquivos de tamanho idêntico, o layout ampliado podia diferir do calculado (até ~300 px num disco inteiro); empates no squarified agora são decididos sempre igual e a área ampliada tem exatamente a escala do mapa a 1×.
- iOS Simulators — runtimes órfãos: o comando para a Recuperação usa o nome real do volume de dados (
Macintosh HD - Datana instalação padrão, mas pode ser outro). - Disk X-Ray — rótulos embolados no mapa: pastas com um filho só ou dominante (≥ 90%) viram um cabeçalho com o caminho (
Users › alexkads), no máximo três níveis de título, tamanho alinhado à direita (sai antes de cortar o nome) e caminhos longos cortados no começo para manter a pasta final. - Disk X-Ray — contorno da seleção cortado: o contorno azul era desenhado para fora do bloco e sumia nos blocos colados na borda do mapa; agora fica inteiro por dentro do bloco e da área visível.
- Avisos no Xcode:
Invalid ExcludedeMAC-LIMPO.dmg/dmg_staging(o.dmg, sua montagem e o site do MkDocs agora são gerados embuild/, que existe em todo clone) e capturaweak/forte deselfno scan do Disk X-Ray. - Disk X-Ray — espaço vazio entre os blocos do mapa: o recuo das pastas se acumulava a cada nível e a folga/arredondamento valia até para blocos minúsculos, ilhando os arquivos pequenos. Agora o recuo é proporcional (só em pastas grandes e rasas) e folga e cantos só existem em blocos que os comportam.
- Disk X-Ray — navegação lenta: a árvore virou um
NSOutlineViewnativo (virtualizado, como o list control do WinDirStat), com ícones de pasta carregados em segundo plano; o destaque por extensão no mapa deixou de varrer milhões de itens a cada movimento do mouse. - Disk X-Ray — threads por máquina: a quantidade de threads e o buffer do scan são decididos pelo hardware e pelo volume (SSD: um por núcleo, 4–16; HD mecânico: 2; rede: 4 com buffer de 64 KiB), em vez de 8 fixo.
- Versão visível: o rodapé do popover mostra a versão e o build (
Version 1.3.10 (13)), lidos doInfo.plist. - Cards girando sem fim (era preciso reabrir o app): scans
asyncque mediam tamanho comdusíncrono (Logs, Project Builds, Rust Targets) prendiam as threads do pool cooperativo e travavam os demais. Agora medem fora do pool, atrás do limite global dedu. Cada categoria também tem prazo (420s): um scan preso libera o card e não bloqueia mais o refresh. Umduque estoura o timeout não cai mais numa varredura lenta e sem limite, e um processo que ignora SIGTERM recebe SIGKILL. - Rust Targets — "Cleaning Failed" com projeto em Docker: um
target/que é ponto de montagem de um volume (./backend:/app+ volume em/app/target) não pode ser removido enquanto o contêiner roda, e a limpeza saía como falha mesmo com o conteúdo apagado — que também ficava fora do total liberado. Agora otarget/é esvaziado (a pasta fica), os itens vão para a Lixeira, o espaço é medido antes/depois, e o scan indica quando o diretório está montado num contêiner. - iOS Simulators — card com GB que não limpava: o scan somava a pasta inteira de dispositivos, e a limpeza (
simctl erase all) falhava com qualquer simulador ligado (CoreSimulator 405), sem liberar nada. Agora cada dispositivo tem um destino: indisponível é apagado, desligado é zerado (erase <udid>), ligado fica de fora do total e aparece como "in use". O espaço liberado é medido pelo própriosimctlantes/depois. - Re-scan após limpeza: limpar uma categoria durante o scan completo reescaneia só aquela categoria, não todas.
- Docker — volumes de cache de build: desde a 1.3.5 todo volume nomeado não usado era preservado, inclusive caches reconstruíveis como
cargo-target,node-modulesenext-cachede projetos compose (um únicocargo-targetchegava a 53 GB, invisível ao Rust Targets por viver dentro doDocker.raw). Volumes não usados com esses nomes voltam a ser limpos; bancos, uploads e demais volumes de dados continuam preservados. - Pedidos de permissão em loop: sem Full Disk Access, os scans de System Data, Logs e dos apps em containers (WhatsApp, Teams, Podcasts, apps criativos) abriam um diálogo do macOS por container em
~/Library/Containerse~/Library/Group Containers— centenas deles — e os cards ficavam girando para sempre. Essas áreas agora são puladas sem a permissão, e o System Data informa quantas ficaram de fora. - Detecção de Full Disk Access: passa a sondar o
TCC.dbdo usuário; o probe antigo (Safari/History.db) não existe em quem nunca abriu o Safari, e o app se achava sem permissão para sempre.
⚡️ Desempenho¶
- System Data mede os caminhos com
duem lotes, em vez de um processo por caminho (antes eram mais de mil só nos containers).
Planejado¶
- Agendamento automático de limpeza
- Notificações quando espaço está baixo
- Exportação de relatórios de limpeza
- Atalhos de teclado
- Preferências avançadas
[1.1.0] - 2026-07-04¶
✨ Adicionado¶
- Temas: seletor com Classic (visual original), Cyberpunk (neon ciano/magenta) e Matrix (verde), com glow, tipografia monoespaçada e persistência da escolha.
- Modo de limpeza agressiva (opt-in): remove caches grandes porém regeneráveis — modelos de IA on-device do Chrome (~4 GB) e
docker image prune -a. - Diálogo de confirmação antes de qualquer limpeza, mostrando o espaço estimado.
- Novas coberturas: Chrome/Chromium multi-profile (Chrome, Edge, Brave, Arc) incluindo
Service Worker; categoria TikTok LIVE Studio; cache do antigravity-updater; leftover do Wondershare Dr.Fone. - Rede de testes unitários (target
MACLIMPOTests).
🔒 Segurança¶
- Deleções vão para a Lixeira (reversível), com fallback para remoção definitiva só quando a Lixeira recusa o caminho.
du/rmpassam o caminho por argumento (sem interpolação em shell): paths com aspas/espaços deixam de quebrar.
⚡ Performance¶
- Scan paralelo das categorias usando os núcleos do Mac (medição de tamanho no pool do GCD, sem travar o pool cooperativo).
- Clean All paralelo (concorrência limitada), com progresso agregado e resultado somado.
- Correção da medição via
duque zerava pastas grandes (subcontagem silenciosa).
🧹 Refatoração¶
PathBasedCleaningService: base testada que unificou ~12 serviços baseados em path, com estratégias (item/conteúdo), filtro de idade e alvos "agressivos".- Remoção de código morto; falhas antes silenciosas passam a registrar log.
📦 Build¶
create_installer.shmais robusto (set -euo pipefail, verificação de codesign/DMG) e versionado a partir do arquivoVERSION.
[1.0.0] - 2025-12-17¶
✨ Adicionado¶
Interface Principal¶
- Interface moderna no menu bar com design vibrante
- Cards interativos com gradientes coloridos e hover effects
- Visualização de espaço em disco (usado/total)
- Tema adaptável (dark/light mode)
- Animações suaves e micro-interações
- Glassmorphism e efeitos modernos
Módulos de Limpeza (11 categorias)¶
- Docker: Limpeza de containers, imagens, volumes e build cache
- Xcode Cache: Remoção de DerivedData, Archives e DeviceSupport
- Node Modules: Limpeza de node_modules de projetos antigos
- Homebrew Cache: Remoção de cache do Homebrew
- IDE Cache: Limpeza de cache de IDEs JetBrains (Rider, IntelliJ, etc.)
- Temp Files: Remoção de arquivos temporários e cache de apps
- Terminal Logs: Limpeza de logs de terminal (zsh, bash)
- Messaging Apps: Remoção de cache de WhatsApp, Telegram, Slack
- Trash: Esvaziamento da lixeira
- Large Files: Identificação e remoção de arquivos grandes (>100MB)
- Duplicate Files: Detecção e remoção de arquivos duplicados
Disk Map - Visualização Treemap¶
- Treemap interativo estilo WinDirStat
- Cores por tipo de arquivo (código, documentos, vídeos, imagens, arquivos compactados)
- Navegação hierárquica (zoom in/out)
- Breadcrumb navigation
- Botão "Back" para voltar ao diretório pai
- Janela separada e independente (900x700, redimensionável)
- Scan paralelo com TaskGroup (3-5x mais rápido)
- Progresso em tempo real com contador de diretórios
- Info panel com detalhes ao passar o mouse
- Seleção de diretórios com cards bonitos e gradientes
- Algoritmo squarified para melhor visualização
Funcionalidades do Sistema¶
- Execução discreta no menu bar
- Scan de todas as categorias simultaneamente
- Resultados detalhados pós-limpeza
- Tempo de execução das operações
- Estimativa de espaço recuperável por categoria
- Logging estruturado com níveis (info, warning, error)
Documentação¶
- README.md completo com screenshots e roadmap
- CONTRIBUTING.md com guia detalhado para contribuidores
- CHANGELOG.md para rastreamento de versões
- Comentários em código para funções complexas
- Templates de issues para bugs e features
🔧 Técnico¶
Arquitetura¶
- Arquitetura MVVM (Model-View-ViewModel)
- Protocolo
CleaningServicepara extensibilidade - Componentes SwiftUI reutilizáveis
- Separação clara de responsabilidades
Performance¶
- Scan paralelo de diretórios usando Swift Concurrency (TaskGroup)
- Uso eficiente de
dupara cálculo de tamanho de diretórios - Renderização otimizada do treemap com Canvas
- Actor para gerenciamento thread-safe de progresso
Utilitários¶
FileSystemHelper: Operações de arquivo e sistemaShellExecutor: Execução segura de comandos shellTreemapLayout: Algoritmo squarified para layout do treemapLogger: Sistema de logging estruturado
🐛 Corrigido¶
- Tratamento de erros em operações de arquivo
- Validação de permissões antes de operações destrutivas
- Proteção contra remoção acidental de arquivos do sistema
- Handling de diretórios vazios no scan
🔒 Segurança¶
- Validação de caminhos antes de remoção
- Proteção contra path traversal
- Confirmação antes de operações destrutivas
- Logging de todas as operações de limpeza
[0.1.0] - 2025-12-01 (Versão Inicial)¶
Adicionado¶
- Estrutura básica do projeto
- Integração com menu bar
- Primeiros serviços de limpeza (Docker, Xcode)
- Interface básica com SwiftUI
Tipos de Mudanças¶
Adicionadopara novas funcionalidadesModificadopara mudanças em funcionalidades existentesDescontinuadopara funcionalidades que serão removidasRemovidopara funcionalidades removidasCorrigidopara correções de bugsSegurançapara vulnerabilidades corrigidas
Como Manter o Changelog¶
Para Contribuidores¶
Ao criar um Pull Request que adiciona novas funcionalidades ou corrige bugs:
- Adicione uma entrada na seção
[Unreleased] - Use o tipo de mudança apropriado
- Descreva a mudança de forma clara e concisa
- Referencie issues relacionadas quando aplicável
Exemplo:
## [Unreleased]
### Adicionado
- Nova categoria de limpeza para cache do VS Code (#123)
### Corrigido
- Crash ao escanear diretórios sem permissão (#124)
Para Mantenedores¶
Ao criar uma nova release:
- Mova as entradas de
[Unreleased]para uma nova seção de versão - Adicione a data da release
- Atualize o link de comparação no final do arquivo
- Crie uma tag Git com a versão
Exemplo:
# Atualizar CHANGELOG.md
# Commit das mudanças
git add CHANGELOG.md
git commit -m "chore: release v1.1.0"
# Criar tag
git tag -a v1.1.0 -m "Release v1.1.0"
git push origin v1.1.0
Formato baseado em Keep a Changelog