Framework CLI para Swift (iOS/macOS): ArgumentParser
En el mundo del desarrollo para el ecosistema Apple, a menudo surge la necesidad de crear no solo aplicaciones gráficas, sino también potentes utilidades de consola. Ya sea para automatización de compilación, procesamiento de datos o creación de herramientas auxiliares para iOS/macOS, no se puede prescindir de una CLI (Command Line Interface) de calidad. Para estos fines, Apple ofrece el framework oficial ArgumentParser, que forma parte de Swift Package Manager. Es una herramienta moderna, type-safe y declarativa que permite crear aplicaciones de consola en Swift con el mínimo esfuerzo.
A diferencia del análisis simple de argumentos mediante CommandLine.arguments, ArgumentParser proporciona un enfoque estructurado: usted describe comandos, banderas y opciones como propiedades de sus estructuras, y el framework genera automáticamente la ayuda, maneja errores y valida la entrada. Analicemos cómo usar este framework para macOS e iOS (a través de Swift Package Manager).
Instalación y configuración
ArgumentParser no requiere instalación por separado; está disponible como parte de la biblioteca estándar de Swift (a partir de Swift 5.5). Para usarlo en su proyecto, agregue la dependencia en Package.swift:
// swift-tools-version:5.7import PackageDescription
let package = Package( name: "MyCLI", dependencies: [ .package(url: "https://github.com/apple/swift-argument-parser", from: "1.2.0") ], targets: [ .executableTarget( name: "MyCLI", dependencies: [ .product(name: "ArgumentParser", package: "swift-argument-parser") ] ) ])Para proyectos de iOS, el framework se puede agregar a través de Swift Package Manager en Xcode, indicando el mismo repositorio. Sin embargo, vale la pena recordar que las aplicaciones CLI generalmente se crean para macOS, pero la biblioteca también se puede usar en aplicaciones iOS para el análisis interno de cadenas.
Conceptos principales
ArgumentParser se basa en tres entidades clave:
- Comandos (
ParsableCommand) — el elemento principal que representa un comando CLI. Cada comando es una estructura que implementa el protocoloParsableCommand. - Argumentos (
@Argument) — parámetros posicionales, obligatorios de ingresar. - Opciones (
@Option) — parámetros nombrados con banderas largas (--name) y cortas (-n). - Banderas (
@Flag) — interruptores booleanos (--verbose, --quiet).
Ejemplo: creación de una calculadora CLI simple
Creemos una aplicación de consola para macOS que realice operaciones aritméticas básicas:
import ArgumentParser
struct Calculator: ParsableCommand { static let configuration = CommandConfiguration( commandName: "calc", abstract: "Calculadora simple para línea de comandos", discussion: "Admite suma, resta, multiplicación y división." )
@Argument(help: "Primer número") var firstNumber: Double
@Argument(help: "Segundo número") var secondNumber: Double
@Option(name: [.short, .long], help: "Operación: add, sub, mul, div") var operation: String = "add"
@Flag(name: [.short, .long], help: "Salida detallada") var verbose: Bool = false
mutating func run() throws { let result: Double switch operation { case "add": result = firstNumber + secondNumber case "sub": result = firstNumber - secondNumber case "mul": result = firstNumber * secondNumber case "div": guard secondNumber != 0 else { throw ValidationError("¡División por cero!") } result = firstNumber / s También en la biblioteca
Internacionalización (i18n) en Java: guía completa con ejemplos
Trabajo con S3 y almacenamiento en la nube en JavaScript (Node.js) — biblioteca @aws-sdk/client-s3
Trabajo con CSV en Swift (iOS/macOS) — bibliotecas y ejemplos de código
Trabajo con fechas en Swift: Foundation, SwiftDate, DateTools (iOS/macOS)