Framework CLI pour Swift : créer des utilitaires console puissants pour iOS et macOS
Swift n'est pas seulement un langage pour applications mobiles. Avec l'arrivée de Swift Package Manager (SPM) et de frameworks comme ArgumentParser, les développeurs ont la possibilité de créer des outils console complets pour macOS et même pour iOS (dans le cadre de processus serveur ou CI/CD). Les frameworks CLI (Command Line Interface) pour Swift permettent d'analyser les arguments de la ligne de commande, de traiter les drapeaux, les options et les sous-commandes, ainsi que de générer une aide automatique.
Dans cet article, nous allons détailler l'un des frameworks CLI les plus populaires et officiels — Swift ArgumentParser (développé par Apple). Vous apprendrez à l'installer via SPM, à écrire un outil console simple, à ajouter des sous-commandes et des arguments, et vous verrez des exemples de code pour des tâches réelles.
Qu'est-ce qu'un framework CLI pour Swift ?
Un framework CLI est une bibliothèque qui prend en charge le travail fastidieux d'analyse de la ligne de commande. Au lieu d'écrire manuellement des boucles sur CommandLine.arguments, vous décrivez la structure de la commande de manière déclarative : quels arguments sont obligatoires, lesquels sont optionnels, quels drapeaux sont pris en charge. Le framework génère lui-même l'aide (--help) et gère les erreurs de saisie.
Principales fonctionnalités de Swift ArgumentParser :
- Description déclarative des arguments et options
- Génération automatique de l'aide et de la version
- Prise en charge des sous-commandes (comme dans
git commitouswift build) - Validation des types (Int, String, Double et personnalisés)
- Intégration avec SPM et Xcode
Installation via Swift Package Manager
Ajoutez la dépendance dans le fichier Package.swift de votre projet :
// swift-tools-version:5.9import PackageDescription
let package = Package( name: "MyCLITool", dependencies: [ .package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.2.0") ], targets: [ .executableTarget( name: "MyCLITool", dependencies: [ .product(name: "ArgumentParser", package: "swift-argument-parser") ] ) ])Exécutez maintenant swift build — la bibliothèque sera téléchargée et compilée.
Écrivons notre première commande
Créons un utilitaire simple qui salue l'utilisateur par son nom et son âge.
import ArgumentParser
struct Greet: ParsableCommand { @Argument(help: "Nom de l'utilisateur") var name: String
@Option(name: .shortAndLong, help: "Âge") var age: Int?
mutating func run() throws { if let age = age { print("Bonjour, \\(name) ! Tu as \\(age) ans.") } else { print("Bonjour, \\(name) !") } }}
Greet.main()Exécutez le binaire compilé :
./MyCLITool "Anna" --age 25# Sortie : Bonjour, Anna ! Tu as 25 ans.
./MyCLITool "Maxime"# Sortie : Bonjour, Maxime !L'aide générée automatiquement (--help) affichera tous les arguments et options.
Sous-commandes : une structure comme dans les vrais utilitaires
Souvent, les outils CLI ont plusieurs sous-commandes : create, delete, list. ArgumentParser les prend en charge nativement.
import ArgumentParser
struct TaskManager: ParsableCommand { static var configuration = CommandConfiguration( subcommands: [Add.self, List.self, Delete.self] )}
struct Add: ParsableCommand { @Argument(help: "Texte de la tâche") var text: String
func run() { print("Tâche ajoutée : \\(text)") }}
struct List: ParsableCommand { func run() { print("Liste des tâches :")