Легко превратите свой код в Swift Package

Что такое Swift Package Manager (он же SwiftPM или SPM)?

  • SwiftPM - это инструмент для управления распространением кода Swift, как и CocoaPods и Carthage.
  • Он интегрирован с системой сборки Swift для автоматизации процесса загрузки, компиляции и связывания зависимостей.
  • SwiftPM включен в Swift 3.0 и выше позволяет нам управлять зависимостями Swift.
  • С выпуском Swift 5 и Xcode 11 поддержка SwiftPM добавлена ​​в сам Xcode.

Вот пошаговое руководство по созданию вашего первого быстрого пакета в Xcode.

Создание собственного пакета Swift

Есть два способа создать свой собственный быстрый пакет. Вы можете использовать приложение Terminal или Xcode (Version 11+), в зависимости от ваших предпочтений.

Вариант 1: Использование терминала

Чтобы создать новый пакет Swift, откройте приложение Terminal (Applications > Utilities > Terminal.app) и создайте папку с именем MyFirstSPMDemo/>:

$ mkdir MyFirstSPMDemo
$ cd MyFirstSPMDemo

Или используя однострочную команду:

$ mkdir MyFirstSPMDemo && cd $_

Теперь инициализируйте пакет Swift, выполнив следующую команду в своем терминале, чтобы создать структуру каталогов пакета Swift:

$ swift package init

Вы также можете указать тип создаваемого пакета, указав подкоманду:

$ swift package init --type library

По умолчанию init создаст пакет библиотеки. Чтобы проверить другие параметры, используйте следующую команду:

$ swift package init --help
OVERVIEW: Initialize a new package
OPTIONS:
--name   Provide custom package name
--type   empty|library|executable|system-module|manifest

ПРИМЕЧАНИЕ.
Чтобы открыть пакет библиотеки / swift в приложении Xcode, дважды щелкните файл Package.swift.

Вариант 2: Использование Xcode (Версия 11+)

Создание нового пакета Swift с использованием Xcode - простой процесс:

  • Откройте приложение Xcode и выберите вариант File > New > Swift Package... или используйте сочетание клавиш ⌃⇧⌘ N.
  • Или перейдите к File > New > Project... и выберите шаблон Swift Package в разделе Multiplatform.
  • Введите название пакета, выберите свое местоположение и нажмите кнопкуCreate.
  • Выполнено!

Обзор пакета Swift

  • Пакет состоит из исходных файлов Swift и файла манифеста. Файл манифеста, называемый Package.swift, определяет имя пакета и его содержимое с помощью модуля PackageDescription.
  • У пакета есть одна или несколько целей. Каждая цель указывает продукт и может объявлять одну или несколько зависимостей.

Вот полный файл манифеста для справки (версия инструментов Swift будет зависеть от версии Xcode, которую мы использовали для создания нашего пакета Swift):

Написание исходного кода в пакете

Мы создали базовую структуру для нашего пакета Swift. Пришло время написать / добавить исходный код в наш пакет Swift.

  • Скопируйте все исходные файлы в папку Sources\MyFirstSPMDemo. При желании можно удалить существующий файл шаблона Sources\MyFirstSPMDemo.swift.
  • Если у вас есть файлы модульного теста, скопируйте их все в папку Tests\MyFirstSPMDemoTests.

Также рекомендуется регулярно обновлять ваш README.md файл содержательным содержанием. Это помогает другим разработчикам узнать, как использовать ваш пакет Swift.

Обновите файл манифеста по умолчанию (Package.swift)

Для простого пакета вам, вероятно, не потребуется изменять содержимое файла манифеста по умолчанию.

1. Определите платформу и версию

Чтобы указать минимальную версию развертывания для iOS для вашего быстрого пакета:

platforms: [
  // Only add support for iOS 13 and up.
  .iOS(.v13)
],

2. Импортируйте зависимости других пакетов.

Если у вашего пакета Swift есть другие зависимости, вы можете определить их с помощью тега thedependencies. Добавьте также все зависимости в свою цель.

Каждая зависимость указывает исходный URL-адрес и требования к версии.

  • Исходный URL-адрес - это URL-адрес, доступный текущему пользователю, который разрешается в репозиторий Git.
  • Требования к версии, которые следуют соглашениям Семантическое управление версиями (SemVer), используются для определения того, какой тег Git нужно проверить и использовать для построения зависимости.

В этом примере мы добавляем Swifty-Extensions фреймворк и говорим диспетчеру пакетов автоматически получать версию, начиная с 1.0.1. Это позволяет нам получать такие версии, как 1.0.2 или 1.1.0, но не 2.0.0, поскольку это следующая основная версия, которая может содержать критические изменения.

Другие варианты

Есть и другие варианты добавления конкретных требований к вашей зависимости, например, использование точных версий или диапазонов версий.

Чтобы получить точную версию (не рекомендуется):

.package(
url: "https://github.com/milanpanchal/Swifty-Extensions", 
.exact("1.0.1")
)

Чтобы перейти к следующей основной / дополнительной версии:

.package(
url: "https://github.com/milanpanchal/Swifty-Extensions", 
.upToNextMajor(from: "2.0.0")
)
.package(
url: "https://github.com/milanpanchal/Swifty-Extensions", 
.upToNextMinor(from: "1.2.0")
)

Чтобы получить ряд версий:

.package(
url: "https://github.com/milanpanchal/Swifty-Extensions", 
"1.0.1"..<"1.1.0")

Используя конкретную ветку или ревизию:

.package(
url: "https://github.com/milanpanchal/Swifty-Extensions",
.branch("development"))
.package(
url: "https://github.com/milanpanchal/Swifty-Extensions", .revision("51cc4b03d7a855633626f016f05706a4ae527d89"))

Сборка и тестовый пакет

  • Чтобы собрать пакет Swift, запустите команду swift build в терминале. Диспетчер пакетов загружает все зависимости (объявленные в Package.swift), компилирует их, а затем связывает их с модулем пакета.
  • Загруженные источники доступны в каталоге .build/checkouts в корне вашего проекта, а промежуточные продукты сборки - в каталоге .build в корне вашего проекта.
  • Чтобы запустить тесты для вашего пакета Swift, используйте: swift test.
$ swift build
$ swift test

Публикация вашего Swift-пакета

Чтобы опубликовать свой Swift Package, просто создайте новый тег версии и отправьте его в свой репозиторий Git. Вы можете использовать Xcode или Terminal приложение для публикации вашего пакета.

$ git add -A
$ git commit -m "My First Swift Package Demo"
// git tagging
$ git tag 1.0.0

// To push the specific tag
$ git push origin 1.0.0
// To push all the tags at once
$ git push origin --tags

Создание исполняемого файла

  • Цель считается исполняемой, если она содержит файл с именем main.swift. Диспетчер пакетов скомпилирует этот файл в двоичный исполняемый файл.
  • Процесс создания исполняемого файла почти такой же, как и при создании пакета библиотеки.

Сначала создайте и войдите в каталог с именем MyFirstSPMDemo:

$ mkdir MyFirstSPMDemo && cd $_

Теперь запустите команду init из пакета swift с типом исполняемого файла:

$ swift package init --type executable

Используйте команды swift build и swift run для сборки и запуска исполняемого файла:

$ swift build
$ swift run

использованная литература

Вопросов?

Пожалуйста, не стесняйтесь комментировать ниже, если у вас есть какие-либо вопросы.

Спасибо за прочтение!