Skip to content

Перевод 🌍

Вы можете перевести или улучшить перевод этой страницы.

Внести вклад

Миграция Swift-пакета

Swift Package Manager появился как менеджер зависимостей для Swift-кода, который со временем непреднамеренно стал решать задачи управления проектами и поддержки других языков программирования, таких как Objective-C. Поскольку инструмент создавался с другой целью, его использование для управления крупными проектами может быть затруднено, потому что ему не хватает гибкости, производительности и возможностей, которые предоставляет Tuist. Это хорошо отражено в статье Scaling iOS at Bumble, где приведена таблица, сравнивающая производительность Swift Package Manager и нативных Xcode-проектов:

A table that compares the regression in performance when using SPM over native Xcode projects

Мы часто сталкиваемся с разработчиками и организациями, которые оспаривают необходимость использования Tuist, полагая, что Swift Package Manager может выполнять аналогичную роль в управлении проектами. Некоторые решаются на переход и позже осознают, что их опыт разработки значительно ухудшился. Например, переиндексация файла после его переименования может занять до 15 секунд. 15 секунд!

**Пока неясно, превратит ли Apple Swift Package Manager в универсальный менеджер проектов. ** Однако мы не видим никаких признаков того, что это происходит. На самом деле, мы видим прямо противоположное. Они принимают решения, основанные на Xcode, например, добиваются удобства с помощью неявных конфигураций, которые

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

SPM КАК ПРОСТО МЕНЕДЖЕР ЗАВИСИМОСТЕЙ

Tuist рассматривает Swift Package Manager как менеджер зависимостей, и это отличный менеджер. Мы используем его для разрешения и сборки зависимостей. Мы не используем его для определения проектов, потому что он не предназначен для этого.

Миграция с Swift Package Manager на Tuist

Сходство между Swift Package Manager и Tuist упрощает процесс миграции. Основное различие заключается в том, что вместо Package.swift вы будете описывать свои проекты с помощью DSL Tuist.

Сначала создайте файл Project.swift рядом с файлом Package.swift. Файл Package.swift будет содержать описание вашего проекта. Ниже приведён пример файла Package.swift, в котором определяется проект с единственной целью:

swift
import ProjectDescription

let project = Project(
    name: "App",
    targets: [
        .target(
            name: "App",
            destinations: .iOS,
            product: .app,
            bundleId: "dev.tuist.App",
            sources: ["Sources/**/*.swift"]*
        ),
    ]
)

Некоторые моменты, на которые следует обратить внимание:

  • ProjectDescription: Вместо PackageDescription, вы будете использовать ProjectDescription.
  • Project: вместо экспорта экземпляра package вы будете использовать экземпляр project.
  • Язык Xcode: Примитивы, используемые для определения проекта, повторяют язык Xcode, поэтому вы найдете схемы, цели и этапы сборки, среди прочего.

Затем создайте файл Tuist.swift со следующим содержимым:

swift
import ProjectDescription

let tuist = Tuist()

Файл Tuist.swift содержит конфигурацию вашего проекта, а путь к нему служит ссылкой для определения корня проекта. Подробнее о структуре проектов Tuist можно узнать в документе

directory structure.

Редактирование проекта

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

`tuist edit` для редактирования проекта в Xcode. Эта команда сгенерирует проект Xcode, который можно открыть и начать с ним работу.
bash
tuist edit

В зависимости от размера проекта вы можете выполнить миграцию целиком или поэтапно. Мы рекомендуем начать с небольшого проекта, чтобы познакомиться с DSL и рабочим процессом. Наш совет – всегда начинать с цели, от которой зависят другие, и постепенно переходить к целям верхнего уровня.

Released under the MIT License.