Bare oculta los iconos del escritorio de Mac al aplicar la marca UF_HIDDEN a los elementos seleccionados. Guarda los nombres de los que cambia y elimina esa marca cuando vuelves a mostrarlos. Los archivos conservan su contenido y ubicación. Renombrar un archivo oculto puede dejarlo fuera del registro de restauración.
Para configurarlo, consulta cómo ocultar los iconos del escritorio en Mac.
Cambiar el bit de ocultación sin alterar las otras marcas
DesktopHider.swift lee las marcas existentes, cambia el bit de ocultación y escribe el valor resultante:
var st = stat()
guard lstat(path, &st) == 0 else { return false }
var flags = st.st_flags
if hidden {
flags |= UInt32(UF_HIDDEN)
} else {
flags &= ~UInt32(UF_HIDDEN)
}
return lchflags(path, flags) == 0
Las operaciones de bits conservan las marcas que no están relacionadas. En la comprobación aislada, un archivo empezó con UF_NODUMP activo. Tanto ocultarlo como mostrarlo conservaron esa marca, y leer su contenido después devolvió los mismos bytes.
Usar lstat y lchflags cambia las marcas de un enlace simbólico sin seguirlo hasta su destino. En la prueba, el enlace recibió la marca de oculto mientras el archivo al que apuntaba, fuera del escritorio de prueba, quedó intacto.
Finder puede mostrar esos archivos cuando está activo el modo de ver elementos ocultos. La marca no restringe el acceso a un documento ni lo cifra.
Revisar y clasificar los elementos del escritorio
Bare pide a FileManager el directorio Escritorio del usuario y enumera sus hijos inmediatos. No recorre todas las carpetas del escritorio para ocultar su contenido. Omite los nombres que empiezan por un punto.
Cada elemento se convierte en un registro con su URL, nombre, categoría y estado de ocultación. Classifier.swift comprueba alias y enlaces simbólicos, aplicaciones, carpetas, capturas y después otros tipos de contenido.
Las capturas tienen una comprobación adicional antes de las categorías generales de imágenes y multimedia. Bare busca el atributo extendido com.apple.metadata:kMDItemIsScreenCapture y, si no está, recurre a prefijos como Screenshot, Screen Shot y Screen Recording.
Una captura renombrada sin esos metadatos puede clasificarse como una imagen normal. Un archivo no relacionado que use un prefijo reconocido puede clasificarse como captura. El clasificador comprueba la presencia del atributo, sin decodificar su valor. Estas reglas determinan qué archivos oculta la selección de solo capturas.
Registrar qué elementos cambió Bare
La lógica de restauración compara el nombre de cada elemento con trackedNames, un conjunto persistido en Settings.swift:
let ours = tracked.contains(item.name)
if item.isHidden && !ours { continue }
Un elemento que ya estaba oculto y no figura en ese conjunto se deja como está. Si un elemento seleccionado está visible, Bare activa la marca y añade su nombre al conjunto cuando la operación termina correctamente. Al mostrar elementos, quita la marca a los registrados y elimina sus nombres del conjunto.
| Elemento encontrado al revisar el directorio | Resultado |
|---|---|
| Elemento visible de una categoría seleccionada | Ocultarlo y registrar su nombre. |
| Elemento oculto cuyo nombre está registrado | Mantenerlo oculto o restaurarlo según el modo actual. |
| Elemento oculto cuyo nombre no está registrado | Dejarlo como está. |
| Nombre registrado que falta después de una lectura correcta | Eliminar el nombre obsoleto del registro. |
Si falla la lectura del directorio, Bare conserva el conjunto registrado. No interpreta una lectura vacía como prueba de que los archivos desaparecieron. El programa de pruebas aislado comprobó ese comportamiento con un directorio no disponible.
Registrar nombres tiene un límite cuando se renombra un archivo
Bare registra nombres, no identidades duraderas del sistema de archivos. En la prueba aislada, ocultó Screenshot demo.png; el programa de pruebas lo renombró a Screenshot renamed.png, y el comando Show dejó el archivo renombrado oculto. El nombre nuevo estaba fuera del conjunto registrado, así que se aplicó la regla de no tocar archivos que ya estaban ocultos.
Lo mismo puede afectar a un archivo oculto que se mueve fuera del escritorio. Una vez fuera del directorio que Bare revisa, la aplicación no puede restaurarlo allí. Mostrar los elementos antes de moverlos o renombrarlos evita esa situación. La guía de restauración también explica cómo quitar la marca de oculto a un archivo conocido.
Más adelante, otro archivo puede ocupar el mismo nombre. Registrar la identidad del archivo además de su ubicación podría ayudar a distinguirlos, pero requeriría manejar explícitamente los movimientos, los borrados y la reutilización de identificadores.
Vigilar los cambios y agrupar las revisiones
Bare abre el directorio Escritorio con O_EVTONLY y registra un DispatchSource para eventos de escritura, cambio de nombre, borrado y enlace. Si están activas la ocultación y la opción de ocultar elementos nuevos, un evento del directorio programa otra aplicación de las categorías seleccionadas.
La implementación del observador cancela el trabajo pendiente y programa la revisión para 0,4 segundos después. Así agrupa ráfagas de actividad. Los eventos repetidos pueden retrasarla más, de modo que una captura recién guardada puede aparecer brevemente.
El programa de pruebas creó un archivo nuevo con un nombre de captura reconocido mientras el observador estaba activo. Recibió la marca de oculto dentro de la ventana de dos segundos de la prueba. Eso comprobó un evento de archivo nuevo, sin medir la latencia bajo carga.
Mostrar iconos al salir conserva el modo guardado
Cuando Show Icons When Quitting está activo, applicationWillTerminate llama a apply(forceShow: true). Para esa llamada, el conjunto de categorías seleccionadas queda vacío. Bare restaura los archivos registrados sin cambiar la preferencia guardada isHiding.
La prueba confirmó que forzar Show restauraba la visibilidad mientras seguía activa la preferencia de ocultación. Aplicar después el modo guardado volvió a ocultar el archivo correspondiente. El arranque de la aplicación también aplica ese modo.
Salir normalmente permite que Bare ejecute esa limpieza. Una caída o un cierre forzado pueden saltársela. El registro persistente permite que otro arranque intente restaurar, con los límites de nombres y directorios descritos antes. Conserva los ajustes guardados hasta que los archivos vuelvan a ser visibles.
Los iconos de discos usan otro mecanismo
Los discos montados y los servidores se gestionan mediante preferencias de Finder. Bare lee cuatro preferencias de visualización, guarda los valores que encuentra, los cambia a falso y reinicia Finder. Al restaurar, vuelve a escribir los valores guardados. Si no había un valor guardado, elimina la preferencia para que Finder use la predeterminada.
Para archivos normales, Bare avisa a Finder de un cambio en el sistema de archivos. Also Hide Disks & Servers cambia preferencias y ejecuta killall Finder.
El programa de pruebas mantuvo desactivada la ocultación de discos. Sus resultados no verifican la restauración de volúmenes montados ni el reinicio de Finder. Esos detalles proceden del código.
Qué demostraron las pruebas aisladas
El programa completó trece comprobaciones sobre el código de producción sin modificar en un Mac. Cubrieron la ocultación selectiva, la conservación de un elemento que ya estaba oculto, otras marcas, los bytes del archivo, enlaces simbólicos, restauración forzada, el límite al renombrar, la conservación del registro tras una lectura fallida y un evento de archivo nuevo.
Se usaron archivos controlados y no se probaron la sincronización con iCloud, varias pantallas, una caída del sistema, la revocación de permisos ni otra utilidad del escritorio actuando a la vez. La captura de prueba tenía un nombre reconocido y un contenido pequeño conocido. Comprobó la clasificación por nombre y las marcas sin decodificar una imagen.
Reproducir las pruebas del sistema de archivos
El programa aislado de Swift crea un directorio temporal y lo pasa al inicializador de escritorio que ya tiene la clase de producción. Desactiva la gestión de discos y omite la migración de ajustes antiguos. Para compilarlo con el código de Bare, ejecuta estos comandos en un Mac con las herramientas de línea de comandos de Xcode:
experiment_dir="$(mktemp -d)"
git clone \
https://github.com/orlandoascanio/Bare.git "$experiment_dir/Bare"
curl -fsSL \
https://www.orlandoascanio.com/examples/bare-file-flags/main.swift \
-o "$experiment_dir/main.swift"
cd "$experiment_dir/Bare"
git checkout --detach 144f7c4
swiftc Sources/Bare/DesktopHider.swift \
Sources/Bare/Classifier.swift Sources/Bare/Settings.swift \
Sources/Bare/Shortcut.swift Sources/Bare/HotKey.swift \
"$experiment_dir/main.swift" -o "$experiment_dir/BareEvidence"
"$experiment_dir/BareEvidence"
El programa imprime cada comprobación y la ubicación de los archivos de prueba que conserva. Solo cambia marcas dentro de ese directorio y escribe sus propias preferencias de prueba. No opera sobre el escritorio real ni abre la interfaz de Bare.
Puedes revisar la implementación de ocultación, las reglas de clasificación y el manejo de la salida. Si necesitas mostrar un archivo, usa la lista de restauración.
Un pequeño voto de confianza
¿Valió la pena leer esta nota?