Реестр пакетов Swift
По мере роста числа зависимостей увеличивается и время на их разрешение. В то время как другие менеджеры пакетов, такие как CocoaPods или npm, являются централизованными, Swift Package Manager — нет. Из-за этого SwiftPM приходится разрешать зависимости, выполняя глубокое клонирование каждого репозитория, что может занимать много времени и потреблять больше памяти по сравнению с централизованным подходом. Чтобы решить эту проблему, Tuist предоставляет реализацию Package Registry, позволяющую скачивать только те коммиты, которые вам действительно нужны. Пакеты в реестре основаны на данных из Swift Package Index: если вы можете найти пакет там, он также доступен в реестре Tuist. Кроме того, пакеты распространяются по всему миру с использованием edge-хранилища для обеспечения минимальной задержки при их разрешении.
Использование#
Существует два способа настройки реестра:
Вариант 1: Автоматическая настройка во время генерации (рекомендуется)#
Если вы используете Tuist для генерации проекта, вы можете включить реестр, установив опцию registryEnabled в конфигурации Tuist.swift:
import ProjectDescription
let tuist = Tuist(
project: .tuist(
generationOptions: .options(
registryEnabled: true
)
)
)
При включении этой опции tuist generate автоматически создаст файл конфигурации реестра в вашем рабочем пространстве. Это избавляет от необходимости отдельно запускать tuist registry setup.
registryEnabled также настраивает реестр для проектов, которые интегрируют зависимости через стандартную интеграцию Swift Package Manager в Xcode, а не через интеграцию на основе XcodeProj в Tuist. Эта опция не настраивает Xcode на разрешение пакетов, объявленных с URL-адресом системы контроля версий из реестра. Для этого выполните tuist registry setup один раз на каждой машине, как описано в разделе Разрешение пакетов из системы контроля версий.
Вариант 2: Ручная настройка#
Чтобы настроить реестр вручную, выполните следующую команду в каталоге вашего проекта:
tuist registry setup
Эта команда генерирует файл конфигурации реестра, который включает реестр для вашего проекта. Убедитесь, что этот файл зафиксирован в системе контроля версий, чтобы ваша команда также могла пользоваться преимуществами реестра.
Аутентификация (необязательно)#
Аутентификация является необязательной. Без аутентификации вы можете использовать реестр с ограничением частоты запросов 1000 запросов в минуту на один IP-адрес. Чтобы получить более высокое ограничение в 20 000 запросов в минуту, вы можете пройти аутентификацию, выполнив команду:
tuist registry login
Для аутентификации требуется учетная запись и проект Tuist.
Разрешение зависимостей#
Чтобы разрешать зависимости из реестра вместо системы контроля версий, продолжайте чтение в соответствии с настройками вашего проекта:
- Xcode project
- Generated project with the Xcode package integration
- Generated project with the XcodeProj-based package integration
- Swift package
Чтобы настроить реестр в CI, следуйте этому руководству: Непрерывная интеграция.
Идентификаторы реестра пакетов#
При использовании идентификаторов реестра пакетов в файле Package.swift или Project.swift необходимо преобразовать URL-адрес пакета в формат реестра. Идентификатор реестра всегда имеет вид {organization}.{repository}. Например, чтобы использовать реестр для пакета https://github.com/pointfreeco/swift-composable-architecture, идентификатор реестра будет pointfreeco.swift-composable-architecture.
Идентификатор не может содержать более одной точки. Если имя репозитория содержит точку, она заменяется на символ подчеркивания. Например, пакет https://github.com/groue/GRDB.swift будет иметь идентификатор реестра groue.GRDB_swift.