#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