Пакет Swift с дополнительными зависимостями?

#ios #swift #swift-package-manager

Вопрос:

Мне любопытно, как я мог бы настроить следующее:

  • Создайте базовый пакет Swift с некоторыми базовыми функциями.
  • Имейте другие дополнительные пакеты, которые соответствуют основному пакету (напрямую связаны). Может быть более 10 функциональных блоков функциональности.

Таким образом, в пакете swift вы жестко кодируете зависимости. Я этого не хочу. Чтобы свести размер приложения к минимуму и позволить разработчикам выбирать функциональные блоки кода по мере необходимости, нужно ли, чтобы разработчик включал основной пакет, а затем другие пакеты с определенной функциональностью по мере необходимости, которые каким — то образом зависят от основного пакета?

Не могли бы вы просто добавить основной пакет swift, а затем каждый пакет swift функционального блока?

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

Ответ №1:

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

Как реализовать необязательную зависимость в пакете Swift?

Ответ: Просто не добавляйте зависимость в файл Package.swift.

Чтобы использовать основной пакет (назовем его MyCorePackage так), код должен будет проверить, можно ли импортировать этот пакет, например:

 #if canImport(MyCorePackage)

import MyCorePackage

#endif

struct MyRelatedType { ... }

#if canImport(MyCorePackage)

extension MyRelatedType {
  var asCoreType: CoreType { ... }
}

#endif