Swift的CLI框架:在iOS和macOS上创建控制台工具
长期以来,为Apple生态系统开发控制台应用程序(CLI — 命令行界面)一直是Python、Ruby或Bash的专利。然而,随着Swift及其强大工具集(包括Swift Package Manager(SPM))的出现,现在可以使用iOS/macOS的原生语言创建快速、类型安全且易于维护的控制台工具。在本文中,我们将详细介绍用于构建Swift CLI的主要框架——Apple的ArgumentParser,以及其他替代方案。
什么是Swift的CLI框架?
CLI框架是一个库,它负责处理命令行参数解析、帮助信息生成、错误处理和命令组织等日常任务。在Swift世界中,事实上的标准是ArgumentParser,它由Apple开发并属于Swift开源项目的一部分。它允许您声明式地描述工具的界面,其余工作由框架自动完成。
ArgumentParser的主要功能:
- 声明式命令定义 — 您描述结构,框架自动解析参数。
- 自动帮助信息 —
--help和-h标志自动生成。 - 支持嵌套命令(如
git或swift中的命令)。 - 类型验证 — 如果期望数字但传入了字符串,会显示清晰的错误信息。
- 与SPM集成 — 只需在
Package.swift中添加依赖即可。
安装和配置
您需要Swift 5.5+(建议使用5.7或更高版本)。通过SPM创建一个新的控制台项目:
mkdir MyCLIcd MyCLIswift package init --type executable然后编辑Package.swift,添加对ArgumentParser的依赖:
// 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") ] ) ])现在更新依赖并打开项目:
swift package updateopen Package.swift # 将在Xcode中打开创建第一个命令
创建文件main.swift(或Sources/MyCLI/main.swift),内容如下:
import ArgumentParser
struct Greet: ParsableCommand { static let configuration = CommandConfiguration( abstract: "用户问候", discussion: "此命令输出个性化的问候语。" )
@Argument(help: "用户名") var name: String
@Option(name: .shortAndLong, help: "重复次数") var count: Int = 1
@Flag(name: .shortAndLong, help: "显示版本") var verbose: Bool = false
mutating func run() throws { if verbose { print("版本 1.0.0") } for _ in 0..<count { print("你好,\\(name)!") } }}
Greet.main()现在编译并运行:
swift run MyCLI Swift --count 3# 输出:# 你好,Swift!# 你好,Swift!# 你好,Swift!
swift run MyCLI --help# 用法:MyCLI <name> [--count <count>] [--verbose]# 用户问候# ...嵌套命令(子命令)
要创建复杂的工具(例如