Alexei Rojas Quiroga
← Todos los proyectos

Proyecto personal

StorageLens

App nativa de macOS que muestra a dónde se fue el disco y lo recupera con seguridad

Estado
En desarrollo
Rol
Individual: plan de producto, arquitectura, implementación en Swift

Arquitectura

  • SwiftUI nativo + Swift 6
  • Mide la asignación real, no el tamaño de archivo
  • Catálogo de limpieza basado en evidencia
  • Limpieza con Papelera primero y deshacer

El modelo de la app pide la capacidad a la sonda de volumen, que lee statfs, y sondea el acceso total al disco.

Arquitectura · 10 nodos · 4 flujos
LO QUE CONSTRUÍSwiftUIUI de treemap ylimpiezaTreemap, barra decategorías, hojas delimpiezaSwift 6 (Obser…Modelo de la appEstado de presentaciónobservablegetattrlistbulkMotor de escaneoEscaneo acotado, enstreaming y cancelablestatfs / getat…Llamadas de sistemaDarwinCapacidad y asignaciónen brutomacOS privacyAcceso total aldisco (TCC)Permiso de privacidadSwiftSonda de permisosVerificación de accesode tres estadosSwiftMotor de catálogoCarga, coincidencia,tamaño, seguridadVersioned JSONCatálogo delimpiezaObjetivos, riesgo,evidenciastatfsSonda de volumenContabilidad decapacidad por volumenFSEventsFSEventsNotificaciones decambios de archivos12345
  • Servicio / cómputo
  • Almacén de datos
  • Cliente
  • Sistema externo
  • Síncrono
  • Asíncrono / bucle
Desplázate hacia los lados para ver todo el diagrama

Cómo fluye, paso a paso

Haz clic en un paso para saltar a él. Haz clic en un componente para ver detalles.

Qué hace

StorageLens es una app nativa de macOS que explica a dónde se fue el espacio en disco. Muestra las distintas cifras de espacio libre que expone macOS, escanea el volumen en un treemap escuadrado y una barra de categorías, y ofrece un catálogo curado y versionado de objetivos de limpieza con niveles de riesgo y consecuencias explicadas. El borrado va a la Papelera por defecto, con plan en dry-run, registro de operaciones y delta de espacio verificado.

El problema

Los ajustes de Almacenamiento de macOS ocultan qué usa el disco y muestran varias cifras de espacio libre que no coinciden. Los limpiadores existentes son opacos. StorageLens muestra primero números exactos y solo después ofrece una limpieza informada y recuperable.

Qué construí

  • La contabilidad de capacidad muestra las distintas cifras de espacio libre que reporta macOS (incluido el espacio purgable) en lugar de reducirlas a un número engañoso.
  • Escáner en streaming y cancelable sobre getattrlistbulk con concurrencia acotada, que mide la asignación física y alimenta un treemap escuadrado y una barra de categorías.
  • Catálogo JSON versionado de objetivos de limpieza con niveles de riesgo (seguro, bajo, criterio, nunca), costo de regeneración y evidencia para cada afirmación, corregible sin publicar un nuevo binario.
  • Semántica de borrado conservadora: Papelera por defecto, plan en dry-run, registro de operaciones, deshacer y un nuevo stat del volumen para informar el delta real recuperado.
  • La lógica de medición vive en un paquete Swift local sin dependencias (StorageLensKit), separado del target SwiftUI, con tests unitarios sobre fixtures y comparación con la salida del sistema.
  • La sonda de Full Disk Access devuelve tres estados (concedido, denegado, desconocido) para que la UI degrade con honestidad; el proyecto Xcode se genera desde una especificación XcodeGen versionada.

Decisiones clave y por qué

01

Swift nativo en lugar de un stack multiplataforma

La semántica correcta de archivos requiere APIs de bajo nivel: asignación física con st_blocks, recorrido rápido con getattrlistbulk y estadísticas de volumen exactas con statfs.

02

Kit de medición separado de la UI

Un paquete sin dependencias externas mantiene escáner, matemática de contabilidad y coincidencia de catálogo testeables sobre árboles sintéticos, sin un disco real de cientos de GB.

03

El catálogo es el producto, no el treemap

Ya existen visualizadores y limpiadores; el diferenciador es un catálogo versionado de objetivos de limpieza con niveles de riesgo, evidencia y consecuencias explicadas.

04

Borrado con Papelera primero y resultados verificados

Eliminación recuperable mediante NSWorkspace, rutas exactas antes de actuar y un nuevo stat tras la limpieza, de modo que el éxito nunca se afirma solo por un código de retorno; las rutas de root usan un helper privilegiado mínimo.

05

Distribución sin sandbox, con Developer ID

Escanear todo el disco requiere Full Disk Access, que no encaja en el sandbox de la App Store; la app se distribuye como DMG notarizado.

Stack tecnológico

Lenguajes
Swift 6
Frontend
SwiftUI
DevOps
Swift Package ManagerXcodeGen
Backend
Darwin APIs (statfs)SMAppService + XPCgetattrlistbulk
Pruebas
XCTest