Структура Swift Package

Структура Swift Package

Viktor Grushevskii (https://t.me/iOS_Career)
Что из себя представляет Swift Package?

Создание package

Мы можем использовать Xcode, как вы уже догадались (в этом примере используется 13.3). После открытия Xcode нужно перейти File -> New -> Package:

Создание Package

После того, как мы выбрали эту опцию, должно открыться примерно такое окно:

Создание Swift Package

Когда мы определимся с расположением и именем нашего пакета, мы можем нажать кнопку создать, и SPM создаст наш пакет Swift со структурой папок по умолчанию.

Структура разделов внутри

Пример структуры папок

Наш package будет создан с такой структурой по умолчанию. Каждый файл и папка имеют своё назначение:

  • README.md: Описание пакета для пользователей
  • Package.swift: Файл манифеста, определяющий, что это за пакет
  • Sources: Папка, содержащая исходные файлы
  • Tests: Папка, содержащая тесты, покрывающие код из раздела Sources

Файл манифеста

Каждый Swift package имеет манифест (названный Package.swift). Манифест содержит следующую важную информацию:

  • Его имя.
  • Поддерживаемые платформы.
  • Цели, которые он содержит.
  • Зависимости.
  • Продукты, которые распространяются (библиотеки).
Пример Package.swift

Посмотрим, какие элементы ещё находятся в Package:

Цели (targets)

Пакет разделён на таргеты. Они как строительные кирпичи для пакета. Каждый таргет имеет своё назначение и определяет модуль:

Пример таргетов

Цели имеют свою собственную папку в разделе Sources, содержащую их исходный код. Они также могут зависеть от внешнего кода или от других целей. Это позволяет нам при необходимости модулировать наш код.

Тестовые цели (test targets)

Мы можем написать автоматизированные тесты для каждой из целей. Всё, что нам нужно сделать — определить тестовую цель с соответствующей папкой и наборами тестов (обратите внимание, что наш Simple-Package используется как зависимость):

Пример тестовой цели

Продукты (products)

Модуль, определяемый целью, не доступен напрямую пользователям пакета. Он изначально является внутренним. Единственный способ распространить публичный API для цели — определить продукт с типом library. Он распространяет модуль, определенный его целью, позволяя использовать его публичный API через импорт:

Пример для products

Зависимости (dependencies)

Пакеты также могут ссылаться и на другие packages. Когда мы определяем зависимости, нужно указать и номера версий, которые нужны:

Что такое зависимости?

Сразу после того, как мы отредактируем наш манифест, SPM разрулит (разрешит) наши зависимости — абсолютно тот же самый процесс, который он делает и в обычном проекте Xcode:

Package.resolved после изменения манифеста

После этого мы можем использовать любые продукты из подключенных swift-алгоритмов в наших целях (targets):

Теперь мы можем включать в зависимости подключенные пакеты

Workflow (рабочий процесс)

Workflow для пакетов Xcode очень похоже на наши обычные проекты (будь то iOS или MacOS).

Добавление файлов

Чтобы добавить файлы swift к цели, просто поместите их в ее папку. Этот файл будет принадлежать модулю в target, что означает, что мы можем добавить в него новый код и получить доступ к другому коду, уже определенному в нем.

Пример добавления других файлов

Building and testing (сборка и тестирование)

Процесс сборки очень прост. Просто выберите product из списка. Я добавил несколько целей для того, чтобы это продемонстрировать:

Процесс сборки

Вот как будет выглядеть манифест в таком случае:

Пример обновлённого Package

А вот так будет выглядеть структура проекта:

Обновлённая структура проекта

Заключение

Мы узнали, как создавать пакеты и как они выглядят с точки зрения структуры. Мы изучили, что такое манифесты и как их можно использовать для определения пакета. Мы также рассмотрели ключевые компоненты пакета:

  • Dependencies.
  • Targets.
  • Products.

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

Авторский канал об iOS-разработке

Report Page