Por que Swift não é só para aplicativos
\n\nQuando você ouve "Swift", a primeira coisa que vem à mente é desenvolvimento iOS, Xcode, storyboards e constraints infinitas. Mas existe um outro lado dessa linguagem que poucos conhecem. Swift é uma ferramenta poderosa para automação de tarefas no macOS. E não estou falando de compilar aplicativos, mas de coisas do dia a dia: renomear centenas de arquivos, analisar um relatório CSV, enviar uma notificação às 18h ou coletar logs do servidor.
\n\nPor que Swift em vez de Python ou Bash? Porque Swift:
\n- \n
- funciona nativamente com o macOS (acesso a
Foundation,Dispatch,UserNotifications); \n - não requer ambiente virtual ou dependências (a menos que você use SPM); \n
- fornece erros de compilação claros — você não vai perder horas procurando um espaço extra, como no Bash; \n
- pode ser executado como script com um único comando:
swift myScript.swift. \n
Neste artigo, vou mostrar alguns cenários reais de automação com Swift. Você pode copiar o código, executá-lo na sua máquina e, o mais importante, aprender a criar suas próprias utilidades. Vamos nessa!
\n\nComo funciona um script Swift: o mínimo de teoria
\n\nPara escrever uma automação em Swift, você não precisa do Xcode. Apenas do Terminal e de um editor de texto. Crie um arquivo script.swift e execute-o com o comando:
swift script.swift\n\nO próprio Swift compila e executa o código. Se o script for grande e você quiser acelerar execuções futuras, pode compilá-lo previamente: swiftc -O script.swift -o script e executar o binário diretamente.
Tudo o que vamos escrever daqui em diante funciona de fábrica — sem bibliotecas externas. Apenas o Foundation, que é importado automaticamente.
Cenário #1: Renomear arquivos em lote
\n\nImagine: você tem uma pasta com fotos IMG_001.jpg, IMG_002.jpg … IMG_100.jpg. Você quer renomeá-las para Ferias_1.jpg, Ferias_2.jpg e assim por diante. Manualmente, seriam 100 operações. Com um script, 0,5 segundo.
import Foundation\n\nlet fileManager = FileManager.default\nlet currentPath = fileManager.currentDirectoryPath\n\nguard let files = try? fileManager.contentsOfDirectory(atPath: currentPath) else {\n print("Não foi possível ler a pasta")\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 = "Ferias_\\(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("❌ Erro com o arquivo \\(file): \\(error.localizedDescription)")\n }\n}\n\nComo funciona:
\n- \n
FileManager.default— acesso ao sistema de arquivos; \n contentsOfDirectory— obtém a lista de arquivos na pasta atual; \n - filtra apenas as imagens; \n
- renomeia usando
moveItem(sim, em Swift, renomear é um movimento). \n
Você pode adaptar facilmente o script: mudar o prefixo, as extensões, adicionar a data ao nome. Isso já é um script Swift útil que economiza tempo todos os dias.
\n\nExtra: sufixo com data
\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 // ... continue como no exemplo acima\n}\n\n