CLI-Framework für Swift: Erstellung von Konsolen-Dienstprogrammen für iOS und macOS
Die Entwicklung von Konsolenanwendungen (CLI — Command Line Interface) für das Apple-Ökosystem war lange Zeit eine Domäne von Python, Ruby oder Bash. Mit dem Aufkommen von Swift und seinen leistungsstarken Werkzeugen, einschließlich Swift Package Manager (SPM), besteht nun jedoch die Möglichkeit, schnelle, typisierte und leicht wartbare Konsolen-Dienstprogramme in der nativen Sprache für iOS/macOS zu erstellen. In diesem Artikel betrachten wir das wichtigste Framework für den Bau von CLIs in Swift — Apple's ArgumentParser — sowie alternative Lösungen im Detail.
Was ist ein CLI-Framework für Swift?
Ein CLI-Framework ist eine Bibliothek, die Routineaufgaben wie das Parsen von Kommandozeilenargumenten, die Generierung von Hilfetexten, die Fehlerbehandlung und die Organisation von Befehlen übernimmt. In der Swift-Welt ist der De-facto-Standard ArgumentParser, entwickelt von Apple und Teil von Swift Open Source. Es ermöglicht die deklarative Beschreibung der Schnittstelle Ihres Dienstprogramms, während das Framework den Rest automatisch erledigt.
Hauptfunktionen von ArgumentParser:
- Deklarative Definition von Befehlen — Sie beschreiben die Struktur, das Framework parst die Argumente selbstständig.
- Automatische Hilfe — Die Flags
--helpund-hwerden automatisch generiert. - Unterstützung für verschachtelte Befehle (wie in
gitoderswift). - Typvalidierung — Wenn eine Zahl erwartet wird, aber eine Zeichenkette übergeben wird, wird eine verständliche Fehlermeldung ausgegeben.
- Integration mit SPM — Es genügt, eine Abhängigkeit in
Package.swifthinzuzufügen.
Installation und Einrichtung
Für die Arbeit benötigen Sie Swift 5.5+ (empfohlen wird 5.7 oder neuer). Erstellen Sie ein neues Konsolenprojekt über SPM:
mkdir MyCLIcd MyCLIswift package init --type executableBearbeiten Sie dann die Datei Package.swift, indem Sie die Abhängigkeit zu ArgumentParser hinzufügen:
// swift-tools-version:5.7import PackageDescription
let package = Package( name: "MyCLI", dependencies: [ .package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.2.0") ], targets: [ .executableTarget( name: "MyCLI", dependencies: [ .product(name: "ArgumentParser", package: "swift-argument-parser") ] ) ])Aktualisieren Sie nun die Abhängigkeiten und öffnen Sie das Projekt:
swift package updateopen Package.swift # öffnet in XcodeErstellung des ersten Befehls
Erstellen Sie eine Datei main.swift (oder Sources/MyCLI/main.swift) mit folgendem Inhalt:
import ArgumentParser
struct Greet: ParsableCommand { static let configuration = CommandConfiguration( abstract: "Benutzer begrüßen", discussion: "Dieser Befehl gibt eine personalisierte Begrüßung aus." )
@Argument(help: "Benutzername") var name: String
@Option(name: .shortAndLong, help: "Anzahl der Wiederholungen") var count: Int = 1
@Flag(name: .shortAndLong, help: "Version anzeigen") var verbose: Bool = false
mutating func run() throws { if verbose { print("Version 1.0.0") } for _ in 0..<count { print("Hallo, \\(name)!") } }}
Greet.main()Kompilieren und starten Sie nun:
swift run MyCLI Swift --count 3# Ausgabe:# Hallo, Swift!# Hallo, Swift!# Hallo, Swift!
swift run MyCLI --help# Usage: MyCLI <name> [--count <count>] [--verbose]# Benutzer begrüßen# ...Verschachtelte Befehle (Unterbefehle)
Für die Erstellung komplexer Dienstprogramme (wie
Auch in der Bibliothek
Internationalisierung (i18n) in TypeScript: Vollständiger Leitfaden
Prisma für TypeScript: vollständige Anleitung mit Beispielen
PHP-Aufgabenplaner: cron-express
Standard-PHP-Bibliothek: vollständiger Überblick über Funktionen und Klassen