Перейти к содержимому

Проект Xcode

plaintext
Help me get started with Tuist. Follow the setup at:
https://tuist.dev/en/docs/guides/get-started/existing-xcode-project

Выбирайте этот путь, если хотите оставить .xcodeproj или .xcworkspace без изменений и подключить возможности Tuist, не переходя на генерацию проекта. В каждом разделе ниже сначала описано, чего сейчас не хватает, а затем показано, какая функция закрывает этот пробел.

Предварительные требования#

Подключение проекта#

Выполните tuist init в корне репозитория. Когда Tuist обнаружит ваше рабочее пространство, выберите Интегрировать <YourApp>, затем пройдите аутентификацию в браузере и выберите аккаунт, которому должен принадлежать проект. Tuist создаст в корне файл Tuist.swift, который закрепляет идентификатор проекта, чтобы ваши коллеги и CI использовали одно и то же подключение. Зафиксируйте его в репозитории.

Если вы запускаете процесс из агента для написания кода или скрипта, сначала выполните tuist auth login (браузерный поток ждет, пока вы нажмете Enter), затем используйте неинтерактивную форму:

bash
tuist init --build-system xcode --name <project-handle> --account <account>

Все пункты ниже необязательны и независимы друг от друга.

Кэш компиляции Xcode#

Xcode 26 поставляется с пофайловым кэшем компиляции, но его хранилище находится внутри DerivedData машины. Чистая сборка заполняет его локально; коллеги и раннеры CI пересобирают всё с нуля, потому что не видят это хранилище.

tuist setup cache направляет кэш компиляции Xcode в общую сеть кэша Tuist. Попадание в кэш на любой машине разработчика или в любом запуске CI затем ускоряет сборку той же ревизии на всех остальных машинах.

bash
tuist setup cache

Команда выводит настройки сборки, необходимые Xcode для использования общего кэша. Она не редактирует ваш проект, поэтому добавьте их в настройки сборки проекта или в файл .xcconfig, как описано в разделе Настройка параметров сборки Xcode.

Соберите проект в Xcode, затем соберите ту же ревизию на второй машине или на раннере CI. Вторая сборка завершится за долю времени, а отчет о сборке Xcode покажет попадания в кэш компиляции.

Инсайты сборок#

Xcode записывает длительность сборки для каждой цели в лог и в отчет о сборке. Эти данные не агрегируются по запускам или по машинам. Регрессия времени сборки, попавшая в один PR, обычно проявляется лишь как общее замедление CI, без явного сигнала о том, какая цель стала причиной и когда.

Инсайты сборок записывают длительность каждой сборки и время выполнения этапов, чтобы тренд был виден на панели управления. Это одна строка в пост-действии вашей схемы:

  1. В Xcode: Product → Scheme → Edit Scheme…

  2. Разверните Build → Post-actions, нажмите +, выберите New Run Script Action.

  3. В разделе Provide build settings from выберите цель вашего приложения.

  4. Вставьте строку, соответствующую способу установки Tuist: ::: code-group

    bash
    $HOME/.local/bin/mise x -C $SRCROOT -- tuist inspect build
    bash
    tuist inspect build

    :::

    Скрипты схем Xcode не наследуют PATH вашей оболочки, поэтому shim mise не находится автоматически. Строка для Mise выше вызывает mise по абсолютному пути и просит загрузить конфигурацию из $SRCROOT, чтобы использовать версию, закрепленную в вашем проекте.

  5. Выполните сборку один раз. Сборка появится на вкладке Builds панели управления в течение нескольких секунд.

Инсайты тестов#

Лог тестов Xcode перечисляет результаты по каждому тесту для одного запуска. Он не агрегирует межзапусковые сигналы, которые вам действительно нужны: как часто падает тест, насколько он замедлился за последнюю неделю, падает ли он только на определенных симуляторах. Тест, который за десять запусков CI дрейфует от надежного к нестабильному, выглядит так же, как единичный неудачный запуск.

Инсайты тестов записывают результат и длительность каждого теста и сопоставляют результаты между запусками. Медленные тесты, сбои и нестабильные тесты отображаются на вкладке Tests панели управления.

  1. Product → Scheme → Edit Scheme…
  2. Test → Post-actions → + → New Run Script Action.
  3. Provide build settings from цели вашего приложения.
  4. Вставьте: ::: code-group
    bash
    $HOME/.local/bin/mise x -C $SRCROOT -- tuist inspect test
    bash
    tuist inspect test
    :::
  5. Запустите действие тестирования один раз. Результаты появятся на вкладке Tests панели управления.

Инсайты бандлов#

Размер установки и загрузки IPA меняется с каждым добавленным ассетом и каждым подключенным символом. Xcode сообщает размеры по запросу в разделе Product → Show Archive, а не в виде серии. PR, добавляющий большой ассет, неотличим от любого другого PR в очереди на слияние.

Инсайты бандлов записывают размеры установки и загрузки для каждой проанализированной сборки и могут отклонять проверку PR, если превышен порог для ветки. Добавьте эту команду в ваш CI сразу после шага сборки:

bash
tuist inspect bundle App.ipa

Откройте Bundle insights на панели управления, чтобы увидеть тренд и настроить пороги.

Превью#

TestFlight добавляет цикл сборки и проверки при каждом обмене. Отправка подписанного .ipa напрямую требует UDID получателя в профиле обеспечения. Ни то, ни другое неудобно для дизайнера или QA, которым просто нужно попробовать текущую ветку.

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

bash
tuist xcodebuild build -scheme App -workspace App.xcworkspace -configuration Debug -sdk iphonesimulator
tuist share App

Отправьте ссылку. Получатели запускают её с помощью tuist run <url> или приложения Tuist для macOS.

Подключите команду#

Кэш и инсайты работают тем эффективнее, чем больше людей подключено к проекту. Пригласите коллег в организацию через настройки аккаунта на панели управления и настройте Single Sign-On (Google, Okta, Microsoft), чтобы подключение занимало один клик вместо индивидуального tuist auth login.

Что дальше#

Если вы перерастёте этот подход, следующим большим шагом станут проекты, генерируемые Tuist. Это серьёзное изменение (таргеты описываются в Swift-манифестах вместо .xcodeproj), но именно оно открывает доступ к кэшу модулей и выборочному тестированию. Всё подробно описано в руководстве Generated Xcode project.