Pourquoi Swift ne se limite pas aux applications
\n\nQuand on entend « Swift », on pense tout de suite au développement iOS, à Xcode, aux storyboards et aux contraintes interminables. Mais ce langage a un autre visage, bien moins connu. Swift est un outil puissant pour l'automatisation de tâches sur macOS. Et je ne parle pas de compilation d'applications, mais de choses du quotidien : renommer une centaine de fichiers, parser un rapport CSV, envoyer une notification à 18h00 ou récupérer des logs depuis un serveur.
\n\nPourquoi Swift plutôt que Python ou Bash ? Parce que Swift :
\n- \n
- fonctionne nativement avec macOS (accès à
Foundation,Dispatch,UserNotifications) ; \n - ne nécessite ni environnement virtuel ni dépendances (sauf si vous utilisez SPM) ; \n
- affiche des erreurs de compilation claires — vous ne perdrez pas une heure à chercher une espace manquante comme dans Bash ; \n
- peut être exécuté comme un script en une seule ligne :
swift monScript.swift. \n
Dans cet article, je vais vous montrer plusieurs scénarios concrets d'automatisation avec Swift. Vous pourrez copier le code, l'exécuter chez vous et, surtout, comprendre comment écrire vos propres utilitaires. C'est parti !
\n\nComment fonctionne un script Swift : le minimum théorique
\n\nPour écrire une automatisation en Swift, vous n'avez pas besoin de Xcode. Un terminal et un éditeur de texte suffisent. Créez un fichier script.swift et lancez-le avec la commande :
swift script.swift\n\nSwift compile et exécute le code automatiquement. Si le script est volumineux et que vous voulez accélérer les exécutions suivantes, vous pouvez le précompiler : swiftc -O script.swift -o script et lancer le binaire directement.
Tout ce que nous allons écrire fonctionne directement — aucune bibliothèque externe nécessaire. Seulement Foundation, qui est importé automatiquement.
Scénario n°1 : Renommer des fichiers en lot
\n\nImaginez : vous avez un dossier avec des photos IMG_001.jpg, IMG_002.jpg … IMG_100.jpg. Vous voulez les renommer en Vacances_1.jpg, Vacances_2.jpg, etc. À la main, cela représente 100 opérations. Avec un script, c'est fait en 0,5 seconde.
import Foundation\n\nlet fileManager = FileManager.default\nlet currentPath = fileManager.currentDirectoryPath\n\nguard let files = try? fileManager.contentsOfDirectory(atPath: currentPath) else {\n print("Impossible de lire le dossier")\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 = "Vacances_\\(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("❌ Erreur avec le fichier \\(file) : \\(error.localizedDescription)")\n }\n}\n\nComment ça fonctionne :
\n- \n
FileManager.default— accès au système de fichiers ; \n contentsOfDirectory— récupère la liste des fichiers dans le dossier actuel ; \n - filtre uniquement les images ; \n
- renomme via
moveItem(oui, en Swift, renommer revient à déplacer). \n
Vous pouvez facilement adapter le script : changer le préfixe, les extensions, ajouter la date dans le nom. C'est déjà un script Swift utile qui vous fait gagner du temps chaque jour.
\n\nAstuce supplémentaire : suffixe avec la date
\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 // ... suite comme dans l'exemple ci-dessus\n}\n\n