Por qué Swift no es solo para aplicaciones
\n\nCuando escuchas «Swift», la primera asociación es desarrollo iOS, Xcode, storyboards y restricciones infinitas. Pero hay otro lado de este lenguaje que no todos conocen. Swift es una herramienta poderosa para la automatización de tareas en macOS. Y no me refiero a compilar aplicaciones, sino a cosas cotidianas y comunes: renombrar cien archivos, analizar un informe CSV, enviar una notificación a las 18:00 o recopilar registros del servidor.
\n\n¿Por qué Swift y no Python o Bash? Porque Swift:
\n- \n
- funciona de forma nativa con macOS (acceso a
Foundation,Dispatch,UserNotifications); \n - no requiere entornos virtuales ni dependencias (si no usas SPM); \n
- proporciona errores de compilación claros: no perderás una hora buscando un espacio extra, como en Bash; \n
- se puede ejecutar como script con una sola línea:
swift myScript.swift. \n
En este artículo, te mostraré varios escenarios reales de automatización con Swift. Podrás copiar el código, ejecutarlo en tu máquina y, lo más importante, entender cómo escribir tus propias utilidades. ¡Vamos allá!
\n\nCómo funciona un script de Swift: mínimo de teoría
\n\nPara escribir una automatización en Swift, no necesitas Xcode. Solo necesitas la terminal y cualquier editor de texto. Crea un archivo script.swift y ejecútalo con el comando:
swift script.swift\n\nSwift compilará y ejecutará el código automáticamente. Si el script es grande y quieres acelerar ejecuciones posteriores, puedes compilarlo previamente: swiftc -O script.swift -o script y luego ejecutar el binario.
Todo lo que escribiremos a continuación funciona de fábrica, sin bibliotecas externas. Solo Foundation, que se importa automáticamente.
Escenario n.º 1: Renombrar archivos por lotes
\n\nImagina: tienes una carpeta con fotos IMG_001.jpg, IMG_002.jpg … IMG_100.jpg. Quieres renombrarlas a Vacation_1.jpg, Vacation_2.jpg y así sucesivamente. A mano: 100 operaciones. Con un script: 0.5 segundos.
import Foundation\n\nlet fileManager = FileManager.default\nlet currentPath = fileManager.currentDirectoryPath\n\nguard let files = try? fileManager.contentsOfDirectory(atPath: currentPath) else {\n print("No se pudo leer la carpeta")\n exit(1)\n}\n\nlet imageFiles = files.filter { $0.hasSuffix(".jpg") || $0.hasSuffix(".png") }\n\nfor (index, file) in imageFiles.enumerated() {\n let newName = "Vacation_\\(index + 1)." + (file.hasSuffix(".jpg") ? "jpg" : "png")\n let oldURL = URL(fileURLWithPath: currentPath).appendingPathComponent(file)\n let newURL = URL(fileURLWithPath: currentPath).appendingPathComponent(newName)\n \n do {\n try fileManager.moveItem(at: oldURL, to: newURL)\n print("✅ \\(file) → \\(newName)")\n } catch {\n print("❌ Error con el archivo \\(file): \\(error.localizedDescription)")\n }\n}\n\nCómo funciona:
\n- \n
FileManager.default— acceso al sistema de archivos; \n contentsOfDirectory— obtenemos la lista de archivos en la carpeta actual; \n - filtramos solo las imágenes; \n
- renombramos usando
moveItem(sí, en Swift renombrar es mover). \n
Puedes adaptar fácilmente el script: cambiar el prefijo, las extensiones, añadir la fecha al nombre. Este es ya un script útil de Swift que ahorra tiempo cada día.
\n\nCaracterística adicional: sufijo con fecha
\n\nlet dateFormatter = DateFormatter()\ndateFormatter.dateFormat = "yyyy-MM-dd"\nlet dateString = dateFormatter.string(from: Date())\n\nfor (index, file) in imageFiles.enumerated() {\n let newName = "\\(dateString)_\\(index + 1).jpg"\n // ... luego como en el ejemplo anterior\n}\n\n