# Проект Xcode {#existing-xcode-project}

::: code-group

```text [Agent prompt]
Help me get started with Tuist. Follow the setup at:
https://tuist.dev/en/docs/guides/get-started/existing-xcode-project
```

:::

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

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

- macOS с **Xcode 26 или новее** (кэш компиляции и современные инсайты зависят от него).
- <.localized_link href="/guides/install-tuist">Интерфейс командной строки Tuist</.localized_link>.

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

Выполните `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`, как описано в разделе <.localized_link href="/guides/features/cache/xcode-cache#configure-xcode-build-settings">Настройка параметров сборки Xcode</.localized_link>.

Соберите проект в 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 [Mise]
   $HOME/.local/bin/mise x -C $SRCROOT -- tuist inspect build
   ```
   ```bash [Homebrew]
   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 [Mise]
   $HOME/.local/bin/mise x -C $SRCROOT -- tuist inspect test
   ```
   ```bash [Homebrew]
   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.

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

Кэш и инсайты работают тем эффективнее, чем больше людей подключено к проекту. Пригласите коллег в организацию через настройки аккаунта на панели управления и настройте <.localized_link href="/guides/integrations/authentication/sso">Single Sign-On</.localized_link> (Google, Okta, Microsoft), чтобы подключение занимало один клик вместо индивидуального `tuist auth login`.

## Что дальше

Если вы перерастёте этот подход, следующим большим шагом станут проекты, генерируемые Tuist. Это серьёзное изменение (таргеты описываются в Swift-манифестах вместо `.xcodeproj`), но именно оно открывает доступ к кэшу модулей и выборочному тестированию. Всё подробно описано в руководстве <.localized_link href="/guides/get-started/generated-xcode-project">Generated Xcode project</.localized_link>.
