Skip to content

Перевод 🌍

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

Внести вклад

Совместное использование кода

Одно из неудобств Xcode при работе с большими проектами заключается в том, что он не позволяет повторно использовать элементы проектов, кроме настроек сборки, через файлы .xcconfig. Возможность повторного использования определений проектов полезна по следующим причинам:

  • Это облегчает обслуживание **** , поскольку изменения могут быть применены в одном месте, и все проекты получают их автоматически.
  • Это позволяет определить соглашения **** , которым могут соответствовать новые проекты.
  • Проекты более последовательны, поэтому вероятность сбоев из-за несогласованности значительно меньше.
  • Добавление новых проектов становится простой задачей, поскольку мы можем повторно использовать существующую логику.

Повторное использование кода в файлах манифеста возможно в Tuist благодаря концепции помощников описания проекта **** .

::: чаевые A TUIST UNIQUE ASSET

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

:::

Помощники описания проекта

Помощники описания проекта - это файлы Swift, которые компилируются в модуль ProjectDescriptionHelpers, который могут импортировать файлы манифеста. Модуль компилируется путем сбора всех файлов в каталоге Tuist/ProjectDescriptionHelpers.

Вы можете импортировать их в свой файл манифеста, добавив оператор импорта в верхней части файла:

swift
// Project.swift
import ProjectDescription
import ProjectDescriptionHelpers

ProjectDescriptionHelpers доступен в следующих манифестах:

  • Project.swift
  • Package.swift (только за флагом компилятора #TUIST )
  • Workspace.swift

Пример

Приведенные ниже фрагменты содержат пример того, как мы расширяем модель Project для добавления статических конструкторов и как мы используем их из файла Project.swift:

swift
import ProjectDescription

extension Project {
  public static func featureFramework(name: String, dependencies: [TargetDependency] = []) -> Project {
    return Project(
        name: name,
        targets: [
            .target(
                name: name,
                destinations: .iOS,
                product: .framework,
                bundleId: "dev.tuist.\(name)",
                infoPlist: "\(name).plist",
                sources: ["Sources/\(name)/**"],
                resources: ["Resources/\(name)/**",],
                dependencies: dependencies
            ),
            .target(
                name: "\(name)Tests",
                destinations: .iOS,
                product: .unitTests,
                bundleId: "dev.tuist.\(name)Tests",
                infoPlist: "\(name)Tests.plist",
                sources: ["Sources/\(name)Tests/**"],
                resources: ["Resources/\(name)Tests/**",],
                dependencies: [.target(name: name)]
            )
        ]
    )
  }
}
swift
import ProjectDescription
import ProjectDescriptionHelpers

let project = Project.featureFramework(name: "MyFeature")

::: совет Инструмент для создания конвенций

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

:::

Released under the MIT License.