Теги метаданных
По мере роста размера и сложности проектов работа со всей кодовой базой сразу может стать неэффективной. Tuist предоставляет теги метаданных **** как способ организовать цели в логические группы и сосредоточиться на определенных частях проекта во время разработки.
Что такое теги метаданных?
Теги метаданных - это строковые метки, которые вы можете прикрепить к целям в вашем проекте. Они служат в качестве маркеров, которые позволяют вам:
- Группировать связанные цели - пометить цели, принадлежащие к одной и той же функции, команде или архитектурному слою.
- Фокусировка рабочего пространства - генерируйте проекты, включающие только цели с определенными тегами.
- Оптимизируйте рабочий процесс - работайте над конкретными функциями, не загружая несвязанные части кодовой базы.
- Выбрать цели для сохранения в качестве источников - Выберите группу целей, которые вы хотите сохранить в качестве источников при кэшировании.
Теги определяются с помощью свойства metadata для целей и хранятся в виде массива строк.
Определение тегов метаданных
Вы можете добавить теги к любой цели в манифесте проекта:
swift
import ProjectDescription
let project = Project(
name: "MyApp",
targets: [
.target(
name: "Authentication",
destinations: .iOS,
product: .framework,
bundleId: "com.example.authentication",
sources: ["Sources/**"],
metadata: .metadata(tags: ["feature:auth", "team:identity"])
),
.target(
name: "Payment",
destinations: .iOS,
product: .framework,
bundleId: "com.example.payment",
sources: ["Sources/**"],
metadata: .metadata(tags: ["feature:payment", "team:commerce"])
),
.target(
name: "App",
destinations: .iOS,
product: .app,
bundleId: "com.example.app",
sources: ["Sources/**"],
dependencies: [
.target(name: "Authentication"),
.target(name: "Payment")
]
)
]
)Фокусировка на отмеченных целях
После маркировки целей можно использовать команду tuist generate для создания сфокусированного проекта, включающего только определенные цели:
Фокусировка по тегам
Используйте префикс tag:, чтобы создать проект со всеми целями, соответствующими определенному тегу:
bash
# Generate project with all authentication-related targets
tuist generate tag:feature:auth
# Generate project with all targets owned by the identity team
tuist generate tag:team:identityФокус по имени
Вы также можете сосредоточиться на конкретных целях по имени:
bash
# Generate project with the Authentication target
tuist generate AuthenticationКак работает фокус
Когда вы сосредотачиваетесь на цели:
- Включенные цели - Цели, соответствующие вашему запросу, включены в сгенерированный проект.
- Зависимости - автоматически включаются все зависимости от целей, на которые направлено внимание.
- Тестовые мишени - включены тестовые мишени для сфокусированных целей.
- Исключение - все остальные цели исключаются из рабочей области.
Это означает, что вы получаете более компактное и управляемое рабочее пространство, содержащее только то, что вам нужно для работы над вашей функцией.
Соглашения об именовании тегов
Хотя вы можете использовать любую строку в качестве тега, соблюдение последовательного соглашения об именовании помогает сохранить упорядоченность тегов:
swift
// Organize by feature
metadata: .metadata(tags: ["feature:authentication", "feature:payment"])
// Organize by team ownership
metadata: .metadata(tags: ["team:identity", "team:commerce"])
// Organize by architectural layer
metadata: .metadata(tags: ["layer:ui", "layer:business", "layer:data"])
// Organize by platform
metadata: .metadata(tags: ["platform:ios", "platform:macos"])
// Combine multiple dimensions
metadata: .metadata(tags: ["feature:auth", "team:identity", "layer:ui"])Использование таких префиксов, как feature:, team:, или layer:, облегчает понимание назначения каждого тега и позволяет избежать конфликтов при именовании.
Использование тегов с помощниками для описания проектов
Вы можете использовать
помощники описания проекта, чтобы стандартизировать применение тегов в вашемпроекте:
swift
// Tuist/ProjectDescriptionHelpers/Project+Templates.swift
import ProjectDescription
extension Target {
public static func feature(
name: String,
team: String,
dependencies: [TargetDependency] = []
) -> Target {
.target(
name: name,
destinations: .iOS,
product: .framework,
bundleId: "com.example.\(name.lowercased())",
sources: ["Sources/**"],
dependencies: dependencies,
metadata: .metadata(tags: [
"feature:\(name.lowercased())",
"team:\(team.lowercased())"
])
)
}
}Затем используйте его в своих манифестах:
swift
import ProjectDescription
import ProjectDescriptionHelpers
let project = Project(
name: "Features",
targets: [
.feature(name: "Authentication", team: "Identity"),
.feature(name: "Payment", team: "Commerce"),
]
)Преимущества использования тегов метаданных
Улучшенный опыт разработки
Сосредоточившись на конкретных частях проекта, вы сможете:
- Уменьшите размер проекта Xcode - работайте с небольшими проектами, которые быстрее открывать и перемещаться по ним.
- Ускорьте сборку - создавайте только то, что нужно для текущей работы.
- Улучшите концентрацию - не отвлекайтесь на несвязанный код.
- Оптимизация индексации - Xcode индексирует меньше кода, что ускоряет автозаполнение.
Лучшая организация проекта
Теги обеспечивают гибкий способ организации кодовой базы:
- Множество измерений - отмечайте цели по функциям, командам, слоям, платформам или любым другим измерениям.
- Без структурных изменений - Добавьте организационную структуру без изменения макета каталога
- Сквозные проблемы - Одна цель может относиться к нескольким логическим группам.
Интеграция с кэшированием
Теги метаданных легко сочетаются с функциями кэширования
Tuist:bash
# Cache all targets
tuist cache
# Focus on targets with a specific tag and use cached dependencies
tuist generate tag:feature:paymentЛучшие практики
- Начните с простого - начните с одного измерения маркировки (например, особенности) и расширяйте его по мере необходимости.
- Будьте последовательны - Используйте одинаковые соглашения об именовании во всех ваших манифестах.
- Документируйте свои теги - Сохраняйте список доступных тегов и их значения в документации вашего проекта.
- Используйте помощники - Используйте помощники для описания проекта, чтобы стандартизировать применение тегов.
- Периодически просматривайте - По мере развития проекта пересматривайте и обновляйте стратегию маркировки.
Сопутствующие функции
- Совместное использование кода - Используйте помощники для описанияпроектов, чтобы стандартизировать использование тегов
- Кэш - Объединитетеги с кэшированием для оптимальной производительности сборки
- Выборочное тестирование - Выполняйте тесты только для измененных целей
