Озарения
::: предупреждение РЕКВИЗИТЫ
:::
Работа над крупными проектами не должна казаться рутиной. На самом деле, она должна быть такой же приятной, как и работа над проектом, который вы начали всего две недели назад. Одна из причин, по которой это не так, заключается в том, что по мере роста проекта страдает опыт разработчиков. Время сборки увеличивается, а тесты становятся медленными и нестабильными. Зачастую на эти проблемы легко не обращать внимания, пока они не становятся невыносимыми - однако в этот момент их сложно решить. Tuist Insights предоставляет вам инструменты для мониторинга состояния проекта и поддержания продуктивной среды разработчиков по мере масштабирования проекта.
Другими словами, Tuist Insights поможет вам ответить на такие вопросы, как:
- Значительно ли увеличилось время сборки за последнюю неделю?
- Стали ли мои тесты работать медленнее? Какие именно?
Tuist Insights находится на ранней стадии разработки.
Сборки#
В то время как у вас, вероятно, есть некоторые показатели производительности рабочих процессов CI, вы можете не иметь такого же представления о локальной среде разработки. Однако время локальной сборки - один из важнейших факторов, влияющих на работу разработчиков.
Чтобы начать отслеживать время локальной сборки, вы можете воспользоваться
командой tuist inspect build, добавив ее в пост-акцию вашей схемы:

Мы рекомендуем установить параметр "Provide build settings from" на исполняемый файл или вашу основную цель сборки, чтобы Tuist мог отслеживать конфигурацию сборки.
Если вы не используете генерируемые проекты, действие post-scheme не выполняется в случае неудачи сборки.
Недокументированная функция в Xcode позволяет выполнить его даже в этом случае. Установите атрибут
runPostActionsOnFailureв значениеYESвBuildAction вашей схемыв соответствующемфайле project.pbxprojследующим образом:diff<BuildActionbuildImplicitDependencies="YES"parallelizeBuildables="YES"+ runPostActionsOnFailure="YES">
Если вы используете Mise, ваш сценарий должен будет
активировать tuist в пост-активном окружении:
# -C ensures that Mise loads the configuration from the Mise configuration
# file in the project's root directory.
$HOME/.local/bin/mise x -C $SRCROOT -- tuist inspect build
::: наконечник MISE & PROJECT PATHS
Переменная окружения PATH не наследуется пост-экшеном схемы, поэтому вам
придется использовать абсолютный путь Mise, который зависит от того, как вы
установили Mise. Кроме того, не забудьте унаследовать настройки сборки от цели в
вашем проекте, чтобы вы могли запускать Mise из каталога, на который указывает
$SRCROOT.
:::
Ваши локальные сборки теперь отслеживаются, пока вы входите в свою учетную запись Tuist. Теперь вы можете получить доступ к времени сборки на панели Tuist и посмотреть, как оно изменяется с течением времени:
Чтобы быстро получить доступ к приборной панели, выполните команду tuist project show --web из CLI.

Тесты#
Помимо отслеживания сборок, вы также можете контролировать свои тесты. Тестовые инсайты помогут вам выявить медленные тесты или быстро разобраться в неудачных прогонах CI.
Чтобы начать отслеживать свои тесты, вы можете воспользоваться командой tuist inspect test, добавив ее в пост-акцию тестирования вашей схемы:

Если вы используете Mise, ваш сценарий должен будет
активировать tuist в пост-активном окружении:
# -C ensures that Mise loads the configuration from the Mise configuration
# file in the project's root directory.
$HOME/.local/bin/mise x -C $SRCROOT -- tuist inspect test
::: наконечник MISE & PROJECT PATHS
Переменная окружения PATH не наследуется пост-экшеном схемы, поэтому вам
придется использовать абсолютный путь Mise, который зависит от того, как вы
установили Mise. Кроме того, не забудьте унаследовать настройки сборки от цели в
вашем проекте, чтобы вы могли запускать Mise из каталога, на который указывает
$SRCROOT.
:::
Проведение тестов теперь отслеживается до тех пор, пока вы входите в свою учетную запись Tuist. Вы можете получить доступ к результатам тестирования на приборной панели Tuist и увидеть, как они меняются со временем:

Помимо общих тенденций, вы также можете глубоко погрузиться в каждый отдельный тест, например, при отладке сбоев или медленных тестов на CI:

Сгенерированные проекты#
Автоматически сгенерированные схемы автоматически включают пост-действия tuist inspect build и tuist inspect test.
Если вам неинтересно отслеживать понимание в автогенерируемых схемах, отключите их с помощью опций генерации buildInsightsDisabled и testInsightsDisabled.
Если вы используете сгенерированные проекты с пользовательскими схемами, вы можете настроить пост-действия как для сборки, так и для тестирования:
let project = Project(
name: "MyProject",
targets: [
// Your targets
],
schemes: [
.scheme(
name: "MyApp",
shared: true,
buildAction: .buildAction(
targets: ["MyApp"],
postActions: [
// Build insights: Track build times and performance
.executionAction(
title: "Inspect Build",
scriptText: """
$HOME/.local/bin/mise x -C $SRCROOT -- tuist inspect build
""",
target: "MyApp"
)
],
// Run build post-actions even if the build fails
runPostActionsOnFailure: true
),
testAction: .testAction(
targets: ["MyAppTests"],
postActions: [
// Test insights: Track test duration and flakiness
.executionAction(
title: "Inspect Test",
scriptText: """
$HOME/.local/bin/mise x -C $SRCROOT -- tuist inspect test
""",
target: "MyAppTests"
)
]
),
runAction: .runAction(configuration: "Debug")
)
]
)
Если вы не используете Mise, ваши сценарии могут быть упрощены до:
buildAction: .buildAction(
targets: ["MyApp"],
postActions: [
.executionAction(
title: "Inspect Build",
scriptText: "tuist inspect build",
target: "MyApp"
)
],
runPostActionsOnFailure: true
),
testAction: .testAction(
targets: ["MyAppTests"],
postActions: [
.executionAction(
title: "Inspect Test",
scriptText: "tuist inspect test"
)
]
)
Непрерывная интеграция#
Чтобы отслеживать результаты сборки и тестирования на CI, вам нужно убедиться, что ваш CI аутентифицирован.
Кроме того, вам потребуется:
- Используйте команду
tuist xcodebuildпри вызове действийxcodebuild. - Добавьте
-resultBundlePathк вызовуxcodebuild.
Когда xcodebuild собирает или тестирует ваш проект без -resultBundlePath,
необходимые файлы журнала активности и пакета результатов не создаются.
Пост-операции tuist inspect build и tuist inspect test требуют эти файлы для
анализа ваших сборок и тестов.