Привет, Хабр! На связи снова Максим из 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.
Больше пишу про мобильное тестирование и не только в своём тг-канале.
Если есть вопросы или темы, которые хочется разобрать подробнее, — пишите в комментариях. Отвёртки не убираем, продолжение следует.
ссылка на оригинал статьи https://habr.com/ru/articles/1094474/