Framework CLI para Swift (iOS/macOS): ArgumentParser
No mundo do desenvolvimento para o ecossistema Apple, surge frequentemente a necessidade de criar não apenas aplicativos gráficos, mas também utilitários de console poderosos. Seja para automação de build, processamento de dados ou criação de ferramentas auxiliares para iOS/macOS — não é possível prescindir de um CLI (Command Line Interface) de qualidade. Para esses fins, a Apple oferece o framework oficial ArgumentParser, que faz parte do Swift Package Manager. Esta é uma ferramenta moderna, type-safe e declarativa que permite criar aplicativos de console em Swift com o mínimo de esforço.
Ao contrário da análise simples de argumentos via CommandLine.arguments, o ArgumentParser fornece uma abordagem estruturada: você descreve comandos, flags e opções como propriedades de suas estruturas, e o framework gera automaticamente a ajuda, trata erros e valida a entrada. Vamos entender como usar este framework para macOS e iOS (através do Swift Package Manager).
Instalação e configuração
O ArgumentParser não requer instalação separada — ele está disponível como parte da biblioteca padrão do Swift (a partir do Swift 5.5). Para usá-lo em seu projeto, adicione a dependência no 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 projetos iOS, o framework pode ser adicionado através do Swift Package Manager no Xcode, informando o mesmo repositório. No entanto, vale lembrar que aplicativos CLI geralmente são criados para macOS, mas a biblioteca também pode ser usada em aplicativos iOS para análise interna de strings.
Conceitos principais
O ArgumentParser é construído em torno de três entidades principais:
- Comandos (
ParsableCommand) — o elemento principal, representando um comando CLI. Cada comando é uma estrutura que implementa o protocoloParsableCommand. - Argumentos (
@Argument) — parâmetros posicionais, obrigatórios para entrada. - Opções (
@Option) — parâmetros nomeados com flags longa (--nome) e curta (-n). - Flags (
@Flag) — chaves booleanas (--verbose, --quiet).
Exemplo: criando uma calculadora CLI simples
Vamos criar um aplicativo de console para macOS que realiza operações aritméticas básicas:
import ArgumentParser
struct Calculator: ParsableCommand { static let configuration = CommandConfiguration( commandName: "calc", abstract: "Calculadora simples para linha de comando", discussion: "Suporta adição, subtração, multiplicação e divisão." )
@Argument(help: "Primeiro número") var firstNumber: Double
@Argument(help: "Segundo número") var secondNumber: Double
@Option(name: [.short, .long], help: "Operação: add, sub, mul, div") var operation: String = "add"
@Flag(name: [.short, .long], help: "Saída detalhada") 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("Divisão por zero!") } result = firstNumber / s Também na biblioteca
Migrações de banco de dados em TypeScript: TypeORM, Prisma e Drizzle
PDFKit para JavaScript (Node.js): guia completo com exemplos
EventKit para Swift: guia completo com exemplos práticos