Spec-Zone.ru › Swift

Создание инструмента командной строки

Исходный код этого руководства можно найти на 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 сгенерировал для нас проект «Привет, мир!»

Мы можем запустить программу, выполнив 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API