Привет, Хабр! На связи снова Максим из ATI.SU.
В первой части цикла мы разложили нативную автоматизацию iOS на винтики: разобрались, какое место UI-тесты занимают в пирамиде тестирования, познакомились с фреймворками, раннерами и артефактами сборки и собрали всё в единый алгоритм создания автотеста. Теперь пора переходить к практике.
Но прежде чем написать первую строчку теста, нужно подготовить рабочее место. Как в мастерской: прежде чем крутить винтики, стоит разложить инструменты по местам. В Xcode таким рабочим местом служит отдельный таргет для UI-тестов. Без него тесты просто не скомпилируются и не запустятся, сколько бы кода мы ни написали.
В этой статье разберём:
что такое таргет в Xcode и зачем он нужен;
какие настройки важно проверить перед началом работы;
как добавить UI Testing Bundle в новый и существующий проект;
на что обратить внимание при настройке подписи и сертификатов.
Что такое таргет и зачем он нужен
Таргет — это инструкция для сборки продукта: самого приложения, набора тестов, виджета или расширения. Если проект — это кухня, то таргет — рецепт конкретного блюда: из каких ингредиентов (файлов) его готовить и с какими настройками.
Каждый проект в Xcode состоит как минимум из одного таргета — таргета самого приложения, который создаётся автоматически вместе с проектом. Это основной таргет: он компилирует код приложения и собирает исполняемый файл .app.
Общие настройки таргета (General)
На вкладке General находятся основные параметры таргета.
Supported Destinations— определяет, на каких платформах и устройствах может запускаться приложение (напр., iPhone, iPad и т. д.).Minimum Deployments— задаёт минимальную версию iOS, которую поддерживает приложение.Identity— базовая информация о продукте: имя приложения, версия, номер сборки. Но больше всего здесь нас интересуетBundle Identifier— уникальный идентификатор приложения в экосистеме Apple. На одном устройстве не может быть двух приложений с одинаковымBundle Identifier.Deployment Info— настройки, связанные с развёртыванием приложения: поддерживаемые ориентации экрана, вид статус-бара и другие параметры запуска.

Как правило, настройки основного таргета уже сконфигурированы разработчиками, и трогать их не нужно. Исключение — Bundle Identifier: если такой идентификатор уже используется, Xcode сообщит об ошибке. Это может случиться как в основном, так и в тестовом таргете. Решение простое: измените идентификатор на уникальный, например, добавив суффикс с вашим именем (напр., Maxim-Makarov.TestProject).
Остальные вкладки, такие как Info и Build Settings, содержат более тонкие настройки, которые на начальном этапе можно оставить без изменений.
Добавление таргета для UI-тестов
С основным таргетом разобрались. Теперь добавим ему «напарника» — отдельный таргет для UI-тестов. Код теста можно написать и без него, но скомпилировать и запустить UI-тесты не получится. Как мы помним из первой части, UI-тесты живут в отдельном таргете типа UI Testing Bundle: он собирается рядом с приложением и запускает его как отдельный процесс.
Способ добавления зависит от того, создаёте вы проект с нуля или работаете с уже существующим.
Новый проект
Если проект создаётся с нуля, таргет для тестов можно добавить сразу при первичной настройке. В окне "Choose options for your new project" есть поле "Testing System" с двумя вариантами:
Swift Testing with XCTest UI Tests— unit-тесты создаются на Swift Testing, а UI-тесты на XCTest. Swift Testing Apple представила на WWDC24 вместе с Xcode 16, и UI-тесты он пока не поддерживает.XCTest for Unit and UI Tests— и unit-, и UI-тесты на классическом фреймворке XCTest.
Таргет для UI-тестов появится в обоих случаях, и в обоих случаях он будет на XCTest. Разница только в unit-тестах. Мы выберем XCTest for Unit and UI Tests, чтобы весь тестовый код был на одном фреймворке.

Существующий проект
В существующем проекте сначала проверяем, нет ли там уже нужного таргета. Для этого:
В навигаторе проекта слева выберите сам проект (самый верхний элемент).
В центральной части окна обратите внимание на раздел TARGETS.

Если там только один таргет с названием вашего проекта и нет таргета с припиской UITests, значит, его нужно создать.
Таргет с припиской
Tests(безUI) — это таргет для unit-тестов. Для UI-тестов он не подойдёт.
Процесс создания UI Testing Bundle
1. В центральной части окна в разделе TARGETS нажмите на кнопку +.

2. В открывшемся окне выберите нужную платформу (напр., iOS) и найдите шаблон UI Testing Bundle.

3. Нажмите Next.
4. Откроется окно "Choose options for your new target" с настройками нового таргета. Большинство полей можно оставить без изменений:
Product Name— по умолчанию Xcode предложит имя проекта с суффиксомUITests. Рекомендуется оставить это имя.Team— выберите вашу учётную запись (Apple ID).Organization Identifier— можно оставить по умолчанию или указать свой.Target to be Tested— убедитесь, что здесь выбран основной таргет вашего приложения.Language— Swift.

5. Нажмите Finish.
В разделе TARGETS появится новый таргет для компиляции и запуска UI-тестов.

Также в структуре проекта появится новая папка для UI-тестов (например, TestProjectUITests) и два файла внутри:
с припиской
UITests— основной файл с UI-тестами. Именно здесь мы будем писать сценарии тестов. Xcode сразу кладёт в него шаблонный тестtestExampleи тестtestLaunchPerformance, который замеряет время запуска приложения.с припиской
UITestsLaunchTests— файл с тестомtestLaunch: он запускает приложение и делает скриншот стартового экрана. Для наших задач он не понадобится, поэтому этот файл можно удалить.

Таргет создан, но радоваться пока рано: прежде чем что-то запускать, стоит убедиться, что Xcode не споткнётся о его настройки.
Проверка конфигурации нового таргета
После создания таргета обязательно проверьте его настройки:
Выберите новый таргет
...UITests.Перейдите во вкладку
Signing & Capabilities.Убедитесь, что в поле Team выбрана ваша учётная запись и активна опция Automatically manage signing. Если поле пустое или в нём висит ошибка — переходите к следующему разделу.
Проверьте, что Xcode не выдаёт ошибок, связанных с
Bundle Identifier. Если ошибка есть — измените идентификатор на уникальный.

Настройка подписи и сертификатов (Signing & Capabilities)
При попытке запустить приложение можно столкнуться с ошибкой, которая связана с отсутствием сертификата подписи. Это ключевой раздел, с которым часто возникают проблемы при первом запуске проекта. Чтобы это исправить, необходимо привязать вашу учётную запись разработчика Apple. Для этого:
Перейдите во вкладку
Signing & Capabilitiesв настройках таргета.В поле Team вы увидите ошибку. Нажмите на него и выберите
Add an Account....Введите логин и пароль от вашего Apple ID. После этого ваша учётная запись появится в Xcode.
Выберите добавленную учётную запись в поле Team.
Активируйте опцию Automatically manage signing. Это позволит Xcode автоматически управлять сертификатами и профилями, что избавляет от большинства ручных действий.
Эти шаги нужно выполнить как для таргета приложения, так и для таргета с тестами.
Что дальше
В этой части мы подготовили проект к написанию UI-тестов. Разобрались, что такое таргет и зачем он нужен, и какие настройки на вкладке General стоит проверить. Затем добавили UI Testing Bundle в новый и существующий проект и настроили подпись, чтобы Xcode не остановил нас ошибкой при первом же запуске.
Если вернуться к алгоритму создания UI-автотестов из первой части, то сейчас мы подготовили почву для самого первого шага: проект собирается, а тестовый таргет готов к работе.
Следующий шаг алгоритма — найти локаторы. Тест не сможет нажать на кнопку или проверить текст, пока не знает, где этот элемент находится на экране. Поэтому в следующей части разберём все способы найти accessibilityIdentifier, начиная с уже знакомого Accessibility Inspector.
Больше пишу про мобильное тестирование и не только в своём тг-канале.
Если есть вопросы или темы, которые хочется разобрать подробнее, — пишите в комментариях. Отвёртки не убираем, продолжение следует.