Создание инструмента командной строки
Исходный код этого руководства можно найти на GitHub
Установка Swift
Чтобы начать, установите Swift, чтобы использовать его на macOS, Linux или Windows.
Подсказка: Чтобы проверить установку Swift, запустите
swift --versionиз вашей оболочки или приложения терминала.
Swift поставляется с менеджером пакетов Swift (SwiftPM), который управляет распространением кода Swift. Он позволяет легко импортировать другие пакеты Swift в ваши приложения и библиотеки, что делает его ценным инструментом для любого разработчика Swift.
Swift регулируется лицензией Apache версии 2.0.
Настройка
Давайте напишем небольшое приложение с нашей новой средой разработки Swift. Для начала мы будем использовать SwiftPM, чтобы создать для нас новый проект. В вашем терминале выполните:
$ mkdir MyCLI
$ cd MyCLI
$ swift package init --name MyCLI --type executable
Это создаст новую директорию под названием MyCLI с следующими файлами:
.
├── Package.swift
└── Sources
└── main.swift
Package.swift — это файл манифеста для Swift. Здесь хранятся метаданные вашего проекта, а также зависимости.
Sources/main.swift — это точка входа приложения, где мы будем писать код приложения.
Фактически, SwiftPM сгенерировал для нас проект «Hello, world!»
Мы можем запустить программу, выполнив swift run в нашем терминале.
$ swift run MyCLI
Building for debugging...
[3/3] Linking MyCLI
Build complete! (0.68s)
Hello, world!
Добавление зависимостей
Приложения на основе Swift обычно состоят из библиотек, которые предоставляют полезные функции.
В этом проекте мы будем использовать пакет под названием example-package-figlet, который поможет нам создавать ASCII-арт.
Вы можете найти больше интересных библиотек на Swift Package Index — неофициальном индексе пакетов для Swift.
Для этого мы расширим наш файл Package.swift следующей информацией:
// swift-tools-version: 5.8
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "MyCLI",
dependencies: [
.package(url: "https://github.com/apple/example-package-figlet", branch: "main"),
],
targets: [
// Targets are the basic building blocks of a package, defining a module or a test suite.
// Targets can depend on other targets in this package and products from dependencies.
.executableTarget(
name: "MyCLI",
dependencies: [
.product(name: "Figlet", package: "example-package-figlet"),
],
path: "Sources"),
]
)
Выполнение swift build укажет SwiftPM на загрузку новых зависимостей, а затем на построение кода.
При выполнении этой команды также был создан новый файл для нас — Package.resolved. Этот файл — моментальная копия точных версий зависимостей, которые мы используем локально.
Небольшое приложение
Начните с удаления main.swift. Мы заменим его новым файлом под названием MyCLI.swift. Добавьте в него следующий код:
import Figlet
@main
struct FigletTool {
static func main() {
Figlet.say("Hello, Swift!")
}
}
Это предоставляет новую точку входа в приложение, которая может быть асинхронной, если это необходимо. Вы можете иметь файл main.swift или точку входа @main, но не оба.
С помощью import Figlet мы теперь можем использовать модуль Figlet, который экспортирует пакет example-package-figlet.
После сохранения мы можем запустить наше приложение с помощью swift run. При успешном выполнении вы увидите, что ваше приложение выводит это на экран:
_ _ _ _ ____ _ __ _ _
| | | | ___ | | | | ___ / ___| __ __ (_) / _| | |_ | |
| |_| | / _ \ | | | | / _ \ \___ \ \ \ /\ / / | | | |_ | __| | |
| _ | | __/ | | | | | (_) | _ ___) | \ V V / | | | _| | |_ |_|
|_| |_| \___| |_| |_| \___/ ( ) |____/ \_/\_/ |_| |_| \__| (_)
|/
Обработка аргументов
Большинству инструментов командной строки необходимо уметь обрабатывать аргументы командной строки.
Чтобы добавить эту возможность в наше приложение, мы добавим зависимость от swift-argument-parser.
Для этого мы расширим наш файл Package.swift следующей информацией:
// swift-tools-version: 5.8
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "MyCLI",
dependencies: [
.package(url: "https://github.com/apple/example-package-figlet", branch: "main"),
.package(url: "https://github.com/apple/swift-argument-parser", from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package, defining a module or a test suite.
// Targets can depend on other targets in this package and products from dependencies.
.executableTarget(
name: "MyCLI",
dependencies: [
.product(name: "Figlet", package: "example-package-figlet"),
.product(name: "ArgumentParser", package: "swift-argument-parser"),
],
path: "Sources"),
]
)
Теперь мы можем импортировать модуль обработки аргументов, предоставляемый swift-argument-parser, и использовать его в нашем приложении:
import Figlet
import ArgumentParser
@main
struct FigletTool: ParsableCommand {
@Option(help: "Specify the input")
public var input: String
public func run() throws {
Figlet.say(self.input)
}
}
Для получения дополнительной информации о том, как swift-argument-parser обрабатывает параметры командной строки, см. документацию swift-argument-parser.
После сохранения мы можем запустить наше приложение с помощью swift run MyCLI --input 'Hello, world!'
Обратите внимание, что в данном случае нам нужно указать исполняемый файл, поэтому мы можем передать аргумент input в него.
При успешном выполнении вы увидите, что ваше приложение выводит это на экран:
_ _ _ _ _ _ _
| | | | ___ | | | | ___ __ __ ___ _ __ | | __| | | |
| |_| | / _ \ | | | | / _ \ \ \ /\ / / / _ \ | '__| | | / _` | | |
| _ | | __/ | | | | | (_) | _ \ V V / | (_) | | | | | | (_| | |_|
|_| |_| \___| |_| |_| \___/ ( ) \_/\_/ \___/ |_| |_| \__,_| (_)
|/
Исходный код этого руководства можно найти на GitHub
The Swift Programming Language, Copyright © 2014-2025 Apple Inc.
Swift and the Swift logo are trademarks of Apple Inc.
Documentation for Swift 6.0.3
https://www.swift.org/getting-started/cli-swiftpm/