Разработка
Time Profiler в Xcode Instruments: повышение производительности с помощью ИИ
Time Profiler в Xcode Instruments может стать отличным способом оптимизации кода с помощью агентов искусственного интеллекта.
Искусственный интеллект с его агентами меняет подход к разработке, и вы можете подумать, что Xcode Instruments больше не нужны для итераций по оптимизации производительности. Когда я начинал разрабатывать приложения в 2009 году, мы постоянно использовали Time Profiler и другие инструменты Xcode Instruments для анализа и улучшения производительности наших приложений. Устройства были намного медленнее, поэтому, если этого не делать, приложения переставали работать из-за чрезмерного использования памяти.
Сегодня у нас невероятно быстрые устройства. Это кажется излишним, и это правда: потребность в профилировании снизилась. Однако я искренне верю, что мы можем значительно улучшить и повысить производительность наших приложений, если будем регулярно обращаться к Xcode Instruments. Хорошая новость в том, что вам больше не нужно проводить анализ самостоятельно: в этом могут помочь ИИ-агенты.
Пример: ускорение извлечения элементов доступности в 25 раз

Используя Time Profiler и ИИ агентов, мне удалось ускорить загрузку элементов доступности в RocketSim в 25 раз
ИИ агенты отлично справляются с итерациями повышения производительности. Вы можете попросить их установить базовый уровень и постоянно сравнивать новые результаты с ним. Они также достаточно умны, чтобы отменить изменения, если они не привели к ожидаемым результатам.
RocketSim CLI позволяет агентам загружать элементы доступности из Симулятора. Агенты используют их для автономной навигации по приложению в симуляторе. Когда я начал улучшать производительность, у меня было две проблемы:
- Отсутствовали элементы доступности (например, элементы таббара)
- Загрузка элементов была ужасно медленной
Как только я исправил первую проблему, загрузка стала еще медленнее. Извлечение данных на экране с более чем 70 элементами заняло примерно 12,18 секунд. Если агенту придётся перемещаться по симулятору, тратя по 12 секунд на каждый шаг, это будет пустой тратой времени.
Я не буду вдаваться в подробности изменений, внесённых для улучшения кода, поскольку это не будет применимо к вашему приложению. Могу лишь сказать, что я использовал Xcode Instruments, чтобы дать ИИ возможность глубоко проанализировать код и определить, где его нужно улучшить.
В целом, улучшение показателей по фазам выглядит следующим образом:
- Фаза 1: 12 с → 4 с (в 3 раза)
- Фаза 2: 4 с → 2,5 с (в 5 раз)
- Фаза 3: 2,5 с → 525 мс (в 23 раза)
- Фаза 4: 525 мс → 485 мс (в 25 раз)
Возникает соблазн остановиться на фазе 1, поскольку можно подумать, что ИИ уже сделал все возможное для ускорения. Однако крайне важно продолжать итерации, поскольку новые результаты показывают дополнительные улучшения производительности.
Добавление CLI в ваше приложение
Прежде чем мы перейдем к тому, как я использую Xcode Instruments и его Time Profiler для предоставления ИИ информации о производительности приложения, я сначала хочу порекомендовать добавить CLI в ваше приложение. Не для использования в производственной среде, а для того, чтобы ваши агенты могли легко проверять улучшения.
Я добавил RocketSim CLI для производственной среды, не понимая, что это также значительно улучшило мой рабочий процесс разработки. Я мог внезапно попросить своих агентов улучшить производительность функций RocketSim, сделав те же функции доступными в CLI. Агент применяет улучшения, запускает CLI и сравнивает результат.
Обратите внимание, что производительность вашего CLI не совпадает с производительностью внутри приложения, но она позволяет изолировать бенчмарки производительности для конкретных методов, используемых в вашем приложении.
Использование Xcode Instruments с агентами
Важно знать, что существует альтернатива CLI для Xcode Instruments:
avanderlee@AJs-MacBook-Pro ~ % xctrace help usage: xctrace <command> [options] global options: -q, --quiet commands: record Perform new recording using specified template import Import file of a supported format into .trace file export Export .trace file content to an external format remodel Remodel .trace using currently installed modelers symbolicate Symbolicate .trace file using specified dSYM list [devices|templates|instruments] List capabilities of the current running environment version Print version of the tool further help: xctrace help <command>
В настоящее время я работаю над эффективным способом избежать траты всех ваших токенов на чтение файлов xctrace. Но даже если это получится, ручное использование Xcode Instruments может показаться более удобным, если вы к этому привыкли.
Мой рабочий процесс выглядел следующим образом:
- Применить улучшения производительности к агентам
- Перезапустить приложение в Xcode Instruments с шаблоном Time Profiler и дополнительным инструментом signpost
Последний позволяет получать более детализированные инсайты по вашим агентам. Добавляя signpost’ы, вы делаете свой код видимым в инструменте signpost:

Попросите ваших агентов добавить signpost’ы в код, который вы оптимизируете, чтобы повысить его наблюдаемость
Разумеется, вы можете поручить добавление этих signpost’ов тому же самому агенту.
На изображении выше видно, что я выполнял запуск несколько раз. Эти прогоны соответствуют различным фазам, о которых я упоминал ранее. Четыре синих пика на графике signpost отражают четыре использования accessibility overlay в RocketSim для получения элементов.
После этого я собирал данные для агента:
- Переключился с List: Metadata на List: Intervals, выделил все строки и скопировал их в буфер обмена
- Затем выбрал инструмент Time Profiler за тот же временной диапазон и сделал deep copy корневого элемента
Последний выглядит следующим образом:

Сделайте deep copy результатов Time Profiler в Xcode Instruments, чтобы передать их вашим агентам
Обратите внимание, что я использовал фильтры Call Tree внизу окна, чтобы:
- разделить потоки
- скрыть системные библиотеки
Так вы сокращаете вывод и оставляете только действительно важное.
Создание промпта
Объединив оба вывода, можно составить результирующий промпт. Я использовал что-то в таком духе:
I tested the functionality 4 times. Here are the signpost intervals: <signpost_intervals> And here are the Time Profiler insights: <time_profiler_deep_copy> Analyze and create a new plan for further optimizations.
Этого будет достаточно, чтобы агент проанализировал результаты и предложил следующий этап улучшений.
Учитывайте использование токенов
Приведенный выше запрос далек от оптимизации использования токенов. Иногда я пропускаю вспомогательные указания и сначала предоставляю результаты глубокого копирования данных из профилировщика. Зачастую этого уже достаточно, чтобы найти способы повышения производительности.
В то же время, raw вывод deep copy можно значительно оптимизировать. Он выглядит примерно так:
Weight Self Weight Symbol Names 2.02 s 100,0% 0 s RocketSim (13637) 642.00 ms 31,9% 0 s RocketSim (0x2daf767) 635.00 ms 31,5% 0 s partial apply for closure #1 in AccessibilityElementsCoalescer.accessibilityElements(deviceUDID:) 635.00 ms 31,5% 0 s closure #1 in AccessibilityElementsCoalescer.accessibilityElements(deviceUDID:) 635.00 ms 31,5% 0 s protocol witness for AccessibilityElementsFetchProvider.fetch(deviceUDID:) in conformance SharedSimulatorAccessibilityFetchProvider
Хотя результат неплох, его определенно можно значительно оптимизировать. Именно поэтому я работаю над новой командой CLI для RocketSim, с помощью которой вы можете запустить трассировку производительности, выполнить воспроизведение проблемы в симуляторе вручную или автоматически, а затем остановить трассировку производительности, чтобы получить вышеуказанные результаты в оптимизированном формате. Если вы хотите быть в курсе этого прогресса, я настоятельно рекомендую подписаться на рассылку RocketSim, используя форму на rocketsim.app.
Итерация и улучшение
Вышеописанный цикл повторялся для каждой фазы оптимизации. В конце концов, производительность стала достаточно хорошей, чтобы прекратить рассмотрение следующей итерации. Агент, вероятно, тоже вам скажет: нет способа сделать ваш код быстрее, чем сейчас.
Заключение
Time Profiler в Xcode Instruments может стать отличным способом оптимизации кода с помощью агентов искусственного интеллекта. Создав план оптимизации производительности на основе запроса на глубокое копирование кода, ваш агент сможет связать код проекта с реальными данными о производительности и соответствующим образом улучшить его. Повторение этого процесса может привести к значительному повышению производительности.
-
Новости4 недели назадВидео и подкасты о мобильной разработке 2026.13
-
Разработка4 недели назад10 ошибок, которые Android-разработчики до сих пор допускают при работе с Jetpack Compose
-
Разработка4 недели назадЯ купил самый дешёвый MacBook от Apple и попробовал заняться настоящей разработкой
-
Видео и подкасты для разработчиков3 недели назадЗачем нужны Vim и NeoVim в 2026 — Своя среда разработки вместо готовой IDE
