您的第一个 Swift CLI:从想法到成品工具
\n\n您是否曾想过,终端中那些便捷的工具——curl、git、brew——是如何创建的?其实,编写自己的 Swift CLI 工具 并不比制作一个简单的 iOS 应用更复杂。而且,Swift 非常适合这个任务:它速度快、内存安全,并且在 macOS 和 Linux 上都能出色运行。
在本文中,我们将从零开始创建一个完整的控制台工具,它能够解析参数、输出彩色文本,甚至处理错误。您将学习如何通过 Swift Package Manager 配置项目,集成强大的 ArgumentParser 库,并准备将工具发布到 Homebrew。准备好了吗?开始吧!
\n\n为什么 Swift 适合 CLI?
\n\n当谈到 创建命令行工具 时,许多人首先想到的是 Python、Bash 或 Go。但 Swift 是一匹黑马,令人惊喜:
\n\n- \n
- 速度堪比 C 语言 — 您的工具将运行飞快。 \n
- 安全的内存管理 — 没有段错误和内存泄漏。 \n
- 跨平台 — Swift 在 Linux 上运行良好,因此您的 CLI 甚至可以在服务器上运行。 \n
- 现代语法 — 代码读起来像优美的散文。 \n
- 庞大的生态系统 — Swift Package Manager (SPM) 让您可以访问数千个库。 \n
顺便提一下,如果您已经在使用 Python 编写代码,并想尝试一些新的 CLI 开发方式,Swift 将是一个绝佳选择:您将获得一个无依赖、内存占用极小的原生二进制文件。
\n\n项目配置:Swift Package Manager
\n\n首先,创建一个新项目。打开终端并执行:
\n\nmkdir MyCLI\ncd MyCLI\nswift package init --type executable\n\n该命令会创建标准的 SPM 结构。请注意 Package.swift 文件——这是您项目的核心。我们来编辑它,添加对 Apple/Swift ArgumentParser 的依赖:
// swift-tools-version:5.9\nimport PackageDescription\n\nlet package = Package(\n name: "MyCLI",\n dependencies: [\n .package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.2.0")\n ],\n targets: [\n .executableTarget(\n name: "MyCLI",\n dependencies: [\n .product(name: "ArgumentParser", package: "swift-argument-parser")\n ]\n )\n ]\n)\n\n现在执行 swift build。SPM 会自动下载库并构建项目。如果一切顺利——您就可以开始编写代码了!
编写第一个命令:增强版 Hello World
\n\n打开 Sources/MyCLI/main.swift,编写一个简单的命令来输出问候语。但不仅仅是 "Hello, World!",而是使用参数:
import ArgumentParser\n\nstruct HelloCommand: ParsableCommand {\n static let configuration = CommandConfiguration(\n commandName: "hello",\n abstract: "输出问候语",\n discussion: "使用此命令向世界或特定的人打招呼。"\n )\n\n @Argument(help: "要问候的人的名字")\n var name: String = "World"\n\n @Option(name: .shortAndLong, help: "重复次数")\n var count: Int = 1\n\n func run() throws {\n for _ in 0..<count {\n print("你好,\\(name)! 👋")\n }\n }\n}\n\nHelloCommand.main()\n\n运行:swift run MyCLI hello --count 3 "iOS Developer"。您将看到:
你好,iOS Developer! 👋\n你好,iOS Developer! 👋\n你好,iOS Developer! 👋\n\n请注意:Argumen