Главная / Блог / Как исследовать
ENGINEERING_BLOG · 2026.10.27

Как исследовать проблемы параллелизма с помощью Swift Executors instrument? Руководство 2026

В примечаниях к Xcode 27 Apple описывает Swift Executors instrument как средство наблюдения за активностью исполнителей и пула потоков (примечания к выпуску Xcode 27). Используйте эту трассу, чтобы сузить область поиска, а не объявить причину найденной: инструмент показывает диагностические подсказки, но не заменяет анализ кода и повторную проверку. На этой неделе выберите один воспроизводимый симптом, запишите исходную трассу и зафиксируйте условия, чтобы сравнить её с результатом после изменения.

Эта инструкция подойдёт независимым разработчикам и небольшим командам, которые исследуют Swift Task, Main Actor или поведение исполнителей в приложениях для iOS и macOS.
Если у вас есть только общее ощущение «приложение тормозит», сначала превратите его в повторяемое действие: без этого сравнение трасс будет ненадёжным.

Последняя проверка — 27 октября 2026 года. Сведения о назначении инструмента сверены с примечаниями Apple к Xcode 27, а область применимости инструментов — с требованиями к системе Xcode. Интерфейс и доступность отображаемых данных проверяйте в своей установленной версии.

SECTION 01 Подготовительный этап: задайте вопрос, на который должна ответить трасса

Перед запуском Instruments определите, что именно вы хотите выяснить. «Есть проблема с параллелизмом» — слишком широкая формулировка: задержка интерфейса, долгое ожидание ответа и невыполненная фоновая задача могут выглядеть одинаково для пользователя, но требовать разных проверок.

Разложите наблюдение на три части:

  • Действие пользователя или теста. Например, открытие конкретного экрана, обновление списка или отправка формы.
  • Симптом, который можно заметить. Экран перестал отвечать, индикатор не исчезает, результат появляется позже ожидаемого или фоновая работа не завершается.
  • Вопрос к записи. Нужно ли понять, как ведёт себя задача, где проявляется активность Main Actor или какой участок активности исполнителя стоит сопоставить с кодом?

Не делайте вывод об исполнителе только по тому, что интерфейс отвечает медленно. Сначала установите, воспроизводится ли симптом при одинаковом действии и в какой момент он возникает. Если для его появления важны данные, состояние учётной записи или последовательность переходов, запишите и эти условия. Иначе первая запись и повторный запуск могут описывать разные ситуации.

Заранее выберите один критерий для сопоставления — например, участок трассы, связанный с действием, и наличие или отсутствие того же пользовательского симптома. Это не целевое число производительности, а способ не подменить вопрос впечатлением от диаграммы.

SECTION 02 Перед записью: проверьте среду, проект и символы

Сверьте установленную версию Xcode и требования целевого окружения с актуальными системными требованиями Apple. Возможности и отображение Swift Executors instrument могут зависеть от версии инструментов и контекста запуска; не переносите инструкции из другой версии без проверки. Для дополнительного знакомства с анализом трасс используйте демонстрацию Instruments на WWDC 26, сверяя действия с интерфейсом, который доступен у вас.

Затем убедитесь, что проект действительно запускается в выбранном окружении и Instruments может работать с нужным приложением. Успешная сборка ещё не означает, что среда анализа готова: проверьте выбранную схему, целевое приложение и доступность информации, необходимой для сопоставления записи с символами проекта. Если вы разрабатываете на Windows или Linux, отдельно проверьте, что удалённая среда предоставляет именно macOS и нужные инструменты; наличие исходников на другой машине этого не заменяет.

Для установки и проверки компонентов командной строки ориентируйтесь на справочник инструментов командной строки Xcode и инструкцию Apple по установке этих инструментов. Не устанавливайте дополнительные компоненты наугад: сначала определите, что уже доступно в целевой среде и какой именно инструмент нужен вашему проекту.

Если проект использует внешние пакеты, отделите их подготовку от диагностики трассы: установка зависимостей не должна незаметно менять условия воспроизведения. Для тех, кому это нужно, есть отдельное руководство по Homebrew и управлению пакетами на Mac.

SECTION 03 Первый этап записи: привяжите каждую трассу к конкретному сценарию

Выберите Swift Executors instrument в Instruments, укажите целевое приложение и подготовьте действие, которое вы определили на этапе анализа. Доступные элементы интерфейса и способы отображения уточняйте по документации и материалам Apple для своей версии, включая описание Instruments в WWDC 26. Если название, дорожка или параметр отличаются, не считайте это доказательством неисправности: сначала проверьте версию и контекст записи.

Перед началом записи сохраните короткую карточку условий:

  • версия Xcode и Instruments;
  • целевое окружение и способ запуска приложения;
  • схема и сборка проекта, которую вы анализируете;
  • точная последовательность действий;
  • данные и состояние приложения, необходимые для воспроизведения;
  • имя файла трассы и дата её получения.

Эти сведения не устанавливают причину проблемы, но позволяют понять, сравниваете ли вы действительно сопоставимые запуски. Храните заметку рядом с трассой: имя файла без описания сценария быстро теряет смысл, особенно если в проекте накопились записи разных сборок.

Запустите приложение в заранее подготовленном состоянии, выполните только выбранное действие и остановите запись после того, как зафиксирован интересующий эпизод. При следующем захвате повторите те же условия. Если вы одновременно меняете экран, данные и конфигурацию, различия на дорожках становятся неоднозначными: будет непонятно, связаны ли они с исправлением или с изменившимся сценарием.

SECTION 04 Чтение трассы: отделите задачи от активности исполнителей

Swift Executors instrument предназначен для исследования активности исполнителей и пула потоков, но разные понятия в трассе нельзя считать взаимозаменяемыми. Задача описывает работу в рамках модели Swift Concurrency; исполнитель относится к месту, где эта работа выполняется; активность пула потоков — отдельная часть картины. Main Actor тоже следует рассматривать как конкретный контекст выполнения, а не как автоматическое объяснение любого торможения интерфейса. Набор и названия отображаемых данных зависят от версии инструмента.

Начните с временного участка, соответствующего вашему сценарию. Сопоставьте его с наблюдаемым симптомом: что происходило в приложении до действия, во время него и после? Затем осмотрите видимые линии задач, Main Actor, пула потоков и пользовательских исполнителей, если такие данные отображаются в вашей версии. Смысл не в том, чтобы найти «плохую» дорожку по одному внешнему признаку, а в том, чтобы определить, где нужны дополнительные проверки.

В качестве второго источника можно использовать руководство Apple по анализу выполнения работы в фоновом потоке. Оно полезно для сопоставления поведения приложения с тем, где выполняется работа, но не следует переносить выводы из его сценария на любую задачу Swift без проверки.

Вариант анализа Что он помогает проверить Когда выбрать
Swift Executors instrument Трассу активности исполнителей и пула потоков в пределах данных, доступных вашей версии Instruments Когда вопрос касается выполнения Swift Concurrency и нужно сузить участок для проверки
Логи и тесты проекта Последовательность событий и воспроизводимость конкретного поведения Когда нужно подтвердить, какое действие предшествовало симптому или повторить сценарий
Другой инструмент Instruments Другой аспект работы приложения, который выбранная трасса не проясняет Когда вопрос относится не к видимой активности исполнителей либо текущих данных недостаточно

Таблица — это выбор следующей проверки, а не рейтинг точности: разные источники отвечают на разные вопросы. Если в трассе нет ожидаемого события, это может означать, что выбран не тот сценарий, не та конфигурация или не тот источник данных. Не заполняйте пробел предположением.

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

SECTION 05 Поиск причины: вернитесь от подсказки к коду и поведению

Выберите участок, который совпал по времени с воспроизводимым симптомом, и проверьте связанный с ним путь кода. Уточните, какая задача инициирует работу, какие значения и условия влияют на её выполнение и что видит пользователь в этот момент. Если вы подозреваете Main Actor, проверяйте конкретную последовательность действий и код, а не делайте вывод только из присутствия соответствующей активности в записи.

Полезно вести короткую цепочку доказательств:

  • Наблюдение: какой именно симптом повторяется и при каком действии.
  • Подсказка трассы: какой участок и какая отображаемая активность заслуживают внимания.
  • Проверка кода: какой путь может объяснить совпадение и как его подтвердить.
  • Результат теста: воспроизводится ли предположение отдельно и меняется ли поведение пользователя.

Если звенья не складываются, не усиливайте формулировку вывода. Пересмотрите сценарий или добавьте иной источник свидетельств — например, целевой тест либо журнал событий. Если задача в записи не совпадает с участком, где проявляется симптом, повторите захват с более точным воспроизведением. Не приписывайте единственную причину данным, которые лишь указывают направление расследования.

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

SECTION 06 Повторная проверка: подтвердите изменение сопоставимой записью

После изменения кода вернитесь к исходным условиям: используйте тот же проектный сценарий, целевое окружение и последовательность действий. Запишите новую трассу и сравните её с исходной по заранее выбранному признаку и по поведению приложения. Если вы заодно сменили версию инструмента или изменили данные, отметьте это отдельно: такие отличия ограничивают прямое сравнение.

Приёмка должна отвечать на вопрос пользователя, а не только на вопрос о диаграмме. Исчез ли исходный симптом? Повторяется ли сценарий? Сохранилось ли ожидаемое поведение при повторном запуске? Если визуальная картина изменилась, но продуктовый симптом остаётся, работа не завершена. Если симптом пропал, зафиксируйте, при каких условиях получен результат, чтобы не выдавать единичное совпадение за универсальную гарантию.

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

Выбирайте следующий шаг по результату: если трасса не связана с симптомом — уточните воспроизведение; если есть временная подсказка — проверьте код и тест; если изменение внесено — повторите тот же сценарий и сравните фактическое поведение. Так Swift Executors instrument остаётся способом сужать поиск, а не заменой инженерной проверки.

Частые вопросы

Какие сведения о параллельной работе приложения показывает Swift Executors instrument?

Инструмент помогает наблюдать трассу активности исполнителей и пула потоков, а в зависимости от версии и отображения — сопоставлять её с задачами и Main Actor. Это позволяет заметить интересующий временной участок и определить, какой код стоит проверить. Трасса сама по себе не объясняет пользовательский симптом и не устанавливает единственную причину задержки.

Как в Instruments отыскать работу, связанную с Main Actor?

Сначала запишите трассу во время воспроизводимого действия, затем найдите отображаемые в выбранной версии данные Main Actor и сопоставьте временной участок с задачами, другими активностями и наблюдаемым поведением приложения. Названия дорожек и доступные детали зависят от версии Xcode и среды. Если нужного признака нет, проверьте конфигурацию записи и дополните анализ логами или тестом.

Доказывает ли трасса Swift Executors instrument, что ошибка находится в конкретной строке кода?

Нет. Она может показать, где и когда стоит внимательнее исследовать выполнение задач или активность исполнителя, но не доказывает, что именно этот участок вызвал зависание или задержку. Для вывода сопоставьте запись с воспроизводимым действием, кодом, логами и результатами целевого теста; после изменения повторите запись в сопоставимых условиях.

Можно ли повторить анализ Xcode без Mac рядом с разработчиком?

Локальный Mac не обязателен, если у вас есть доступ к подходящей удалённой среде macOS, в которой доступны нужные версия Xcode, Instruments, проект и данные символов. До работы уточните совместимость целевого окружения и способ передавать проект и трассы. Не считайте удалённый доступ гарантией конкретной производительности или возможности подключить любое физическое устройство.

Если вы анализируете проект на собственном компьютере, локальный Mac избавляет от передачи проекта и зависимости от удалённого доступа, но его покупка ради редких записей может быть избыточной; кроме того, место на диске и обслуживание среды остаются на вашей стороне. Непостоянная CI-среда, в свою очередь, может не подходить для интерактивного исследования трассы и проверки проекта вручную. Когда вам нужно повторять анализ в полноценной macOS-среде, а покупать отдельный компьютер пока нецелесообразно, аренда удалённого Mac у VPSNIX может быть удобнее: сначала сравните доступные варианты на странице тарифов VPSNIX, а порядок подключения и работы уточните в справочном центре VPSNIX. Если же Instruments нужен постоянно для длительной нагрузки или требуется непосредственное подключение физического устройства, сначала проверьте, подходит ли вам удалённый сценарий; конкретные возможности и результаты анализа заранее не гарантируются.

SECTION 07 Часто задаваемые вопросы

Какие сведения о параллельной работе приложения показывает Swift Executors instrument?

Инструмент помогает наблюдать трассу активности исполнителей и пула потоков, а в зависимости от версии и отображения — сопоставлять её с задачами и Main Actor. Это позволяет заметить интересующий временной участок и определить, какой код стоит проверить. Трасса сама по себе не объясняет пользовательский симптом и не устанавливает единственную причину задержки.

Как в Instruments отыскать работу, связанную с Main Actor?

Сначала запишите трассу во время воспроизводимого действия, затем найдите отображаемые в выбранной версии данные Main Actor и сопоставьте временной участок с задачами, другими активностями и наблюдаемым поведением приложения. Названия дорожек и доступные детали зависят от версии Xcode и среды. Если нужного признака нет, проверьте конфигурацию записи и дополните анализ логами или тестом.

Доказывает ли трасса Swift Executors instrument, что ошибка находится в конкретной строке кода?

Нет. Она может показать, где и когда стоит внимательнее исследовать выполнение задач или активность исполнителя, но не доказывает, что именно этот участок вызвал зависание или задержку. Для вывода сопоставьте запись с воспроизводимым действием, кодом, логами и результатами целевого теста; после изменения повторите запись в сопоставимых условиях.

Можно ли повторить анализ Xcode без Mac рядом с разработчиком?

Локальный Mac не обязателен, если у вас есть доступ к подходящей удалённой среде macOS, в которой доступны нужные версия Xcode, Instruments, проект и данные символов. До работы уточните совместимость целевого окружения и способ передавать проект и трассы. Не считайте удалённый доступ гарантией конкретной производительности или возможности подключить любое физическое устройство.