CLI framework para Swift: creando potentes utilidades de consola para iOS y macOS
Swift no es solo un lenguaje para aplicaciones móviles. Con la llegada de Swift Package Manager (SPM) y frameworks como ArgumentParser, los desarrolladores han obtenido la capacidad de crear herramientas de consola completas para macOS e incluso para iOS (en el contexto de procesos de servidor o CI/CD). Los frameworks CLI (Command Line Interface) para Swift permiten analizar argumentos de línea de comandos, procesar banderas, opciones y subcomandos, así como generar ayuda automática.
En este artículo, analizaremos en detalle uno de los frameworks CLI más populares y oficiales: Swift ArgumentParser (desarrollado por Apple). Aprenderá cómo instalarlo a través de SPM, escribir una herramienta de consola simple, agregar subcomandos y argumentos, y verá ejemplos de código para tareas reales.
¿Qué es un framework CLI para Swift?
Un framework CLI es una biblioteca que se encarga del trabajo rutinario de analizar la cadena de la línea de comandos. En lugar de escribir manualmente bucles sobre CommandLine.arguments, usted describe la estructura del comando de forma declarativa: qué argumentos son obligatorios, cuáles son opcionales, qué banderas se admiten. El framework mismo genera la ayuda (--help) y maneja los errores de entrada.
Principales capacidades de Swift ArgumentParser:
- Descripción declarativa de argumentos y opciones
- Generación automática de ayuda y versión
- Soporte para subcomandos (como en
git commitoswift build) - Validación de tipos (Int, String, Double y personalizados)
- Integración con SPM y Xcode
Instalación a través de Swift Package Manager
Agregue la dependencia en el archivo Package.swift de su proyecto:
// 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") ] ) ])Ahora ejecute swift build — la biblioteca se descargará y compilará.
Escribiendo nuestro primer comando
Creemos una utilidad simple que salude al usuario por su nombre y edad.
import ArgumentParser
struct Greet: ParsableCommand { @Argument(help: "Nombre del usuario") var name: String
@Option(name: .shortAndLong, help: "Edad") var age: Int?
mutating func run() throws { if let age = age { print("¡Hola, \\(name)! Tienes \\(age) años.") } else { print("¡Hola, \\(name)!") } }}
Greet.main()Ejecute el binario compilado:
./MyCLITool "Ana" --age 25# Salida: ¡Hola, Ana! Tienes 25 años.
./MyCLITool "Máximo"# Salida: ¡Hola, Máximo!La ayuda generada automáticamente (--help) mostrará todos los argumentos y opciones.
Subcomandos: estructura como en utilidades reales
A menudo, las herramientas CLI tienen varios subcomandos: create, delete, list. ArgumentParser admite esto de forma nativa.
import ArgumentParser
struct TaskManager: ParsableCommand { static var configuration = CommandConfiguration( subcommands: [Add.self, List.self, Delete.self] )}
struct Add: ParsableCommand { @Argument(help: "Texto de la tarea") var text: String
func run() { print("Tarea añadida: \\(text)") }}
struct List: ParsableCommand { func run() { print("Lista de tareas:")``` También en la biblioteca
Trabajo con imágenes en Kotlin: bibliotecas, herramientas y ejemplos
Cliente HTTP para Go (Golang): mejores bibliotecas para trabajar con la red
Envío de SMS en Go (Golang): API bibliotecas golang-sms
ORM para JavaScript (Node.js): comparación de Sequelize, TypeORM, Prisma
Cliente Redis para Kotlin: Lettuce y Kreds — comparación y ejemplos