Логи: что, зачем и как
Логи — это текстовые сообщения, которые пишет само приложение во время своей работы. Они как внутренний дневник: приложение само рассказывает, что оно делало, какие данные отправляло, что получило в ответ, куда не смогло достучаться, какие условия сработали или не сработали.
Вот пример креш‑лога из .ips‑файла, который показывает критическую ошибку в некогда популярной игре Pokemon GO:
Incident Identifier: 4EB9D661-045D-4AA9-9483-6EC5A03417B1
Hardware Model: iPhone16,2
Process: PokmonGO [3085]
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x00622e7cbcfaba50
Date/Time: 2025-08-25 13:17:58.8625 +0300
Этот фрагмент из live‑логов утилиты Console говорит о потенциальных проблемах в производительности из‑за выполнения операций ввода‑вывода на главном потоке:
Hang Risk com.apple.runtime-issues
message: This method does I/O on the main thread underneath that can lead to UI responsiveness issues...
antipattern trigger: -[NSBundle bundleIdentifier]
...
libRPAC.dylib сбой 19:12:18.350727+0300 AtiClient
А эти логи, собранные с помощью log collect CLI, указывают на сетевую ошибку в клиенте, связанную с тайм‑аутом запроса к удалённому ресурсу:
2025-10-14 19:12:15.443811+0300 Error AtiClient: (CFNetwork)
Task <10355B97-785F-4857-BA66-D231F55D2431> finished with error [-1001]
Error Domain=NSURLErrorDomain Code=-1001 "Превышен лимит времени на запрос."
NSErrorFailingURLStringKey=https://ep2.facebook.com/v17.0
Тема этой статьи — как и где достать подобные логи. Если сейчас содержание логов кажется несвязным и бессмысленным набором данных, — это нормально. Наша задача, как тестировщиков и разработчиков, — в первую очередь понять, где и как доставать эти логи. Научиться их читать, анализировать и понимать, что и почему в приложении пошло не так — тема для отдельной статьи.
Зачем тестировщикам и разработчикам логи?
Что можно узнать из логов:
-
убедиться, что нужная функция действительно была вызвана
-
узнать, ушёл ли запрос к серверу и какие данные приложение передавало
-
понять, как приложение среагировало на ответ с сервера
-
понять, почему после тапа на кнопку ничего не произошло
-
поймать ошибку или предупреждение, которое не видно визуально
Как логи помогают в работе:
-
становятся первичным источником данных, если со стороны UI нет или мало информации
-
помогают быстрее локализовать баги (особенно нестабильные)
-
подсказывают разработчику, где и что может быть причиной проблемы
Все логи можно условно разделить на:
-
креш‑отчёты — логи, которые связаны с неожиданной остановкой приложения. Обычно информация о крешах на проде служит поводом для выпуска срочного хотфикса.
-
все остальные логи — это могут быть диагностические, аналитические и другие данные, которые могут помочь при дебаге приложения или локализации бага.
В этой статье сделаем упор на логи в общем и разберём 7 проверенных способов, как их собрать с iOS‑приложения. Как собрать данные конкретно по крешам, — разберем в следующей статье.
1. Файл .ips на устройстве (sysdiagnose)
Где применимо: реальное устройство
Предварительные действия:
Не требуются: файлы создаются автоматически.
Как найти:
-
Перейти на устройстве: Настройки → Конфиденциальность и безопасность → Аналитика и улучшения → Данные Аналитики
Что это и как использовать:
На экране «Данные» содержится список файлов с расширением .ips, которые создаются iOS автоматически при наступлении определённого события. Каждый файл — это системный отчёт, который связан со сбоями приложений, ресурсами, зависаниями, принудительной выгрузкой из памяти, сбоями загрузки и так далее.
При этом именование файлов происходит по определенному принципу:
тип_события_дата_время.ips
Пример: AtiClient-2024-08-14-152242.ips
Данные файлы формируются благодаря инструменту системной диагностики sysdiagnose от Apple. Этот инструмент собирает детальную информацию о работе системы и является одним из наиболее полных источников диагностических данных. Каждый файл — это отчёт определённого типа, среди которых можно выделить:
-
CrashReport. Аварийное завершение приложение (Exception/Signal) или по‑простому — креш. Появляется, когда приложение «падает», при запуске или во время работы.
Креши удобно искать по
bundle idприложения, который обычно похож на название приложения (например,VKClient).
-
JetsamEvent. Выгрузка приложения из системной памяти при нехватке RAM (Out‑of‑Memory). Часто намекает на утечку памяти или слишком тяжёлые экраны. Появляется, когда работа в приложении забивает RAM под лимит, приложение начинает тормозить или неожиданно завершает свою работу.
-
Watchdog. Принудительное завершение приложения системой при долгом запуске или зависании. Появляется, если приложение долго не отвечает или не реагирует на действия пользователя.
-
SpinReport. Приложение активно использует процессор (CPU), но не отвечает пользователю. Может быть следствием дедлоков или бесконечных циклов в коде. Возможные признаки: устройство сильно греется или подвисает интерфейс.
-
NotificationServiceExtension. Сбой расширения UNNotificationServiceExtension, которое обрабатывает push‑уведомления. Появляется, когда расширение уведомлений завершает работу аварийно: креш, ошибка обработки, завершение по таймауту.
Можно вручную сгенерировать отчёт sysdiagnose, если одновременно нажать обе кнопки громкости и боковой кнопки в течение 1–1,5 секунд. На экране «Данные Аналитики» появится новый файл под названием stacks с датой и временем генерации файла.
Когда использовать:
-
если произошёл сбой в приложении в тот момент, когда устройство не было подключено к Xcode
-
для анализа производительности, проблем с памятью, сетями и пр. без необходимости подключения к Xcode
Любой .ips‑файл можно удобно экспортировать прямо с устройства (напр., через AirDrop), чтобы отправить разработчику или прикрепить к баг‑репорту.
iOS автоматически удаляет старые .ips‑файлы через некоторое время, поэтому лучше собирать логи сразу после инцидента.
2. log collect CLI
Где применимо: реальное устройство / симулятор
Предварительные действия:
-
установить Xcode Command Line Tools (или Xcode)
-
подключить устройство по проводу
-
запустить Terminal
-
получить UDID устройства (напр., как мы рассмотрим в способе 5 с помощью libimobiledevice)
Что это и как использовать:
log collect CLI — менее известный способ, который использует возможности командной строки и позволяет выгрузить большой архив логов для офлайн‑анализа. Отлично работает при отладке нестабильных ошибок, которые сложно поймать в live‑режиме.
Практика показывает значительные различия между данными, полученными через sysdiagnose (1-й способ), и log collect CLI. sysdiagnose собирает очень подробный срез состояния системы на момент генерации файла. Он включает в себя много различных данных: логи, конфиги, состояние процессов и так далее. Это глубокое покрытие, но с ограниченным временным диапазоном. В то же время log collect CLI собирает только логи. При этом можно выгрузить данные за длительный период — обычно до 10 дней, пока логи не будут вытеснены системой.
|
Параметр |
log collect |
sysdiagnose |
|
Временной охват |
До 10 дней на iOS |
Преимущественно день генерации |
|
Автоматизация |
Полная поддержка CLI |
Требует ручных действий |
|
Размер файлов |
Управляемый параметрами |
Фиксированный, обычно большой |
|
Скорость сбора |
Быстрая |
Медленная (10-15 минут) |
Команда log collect CLI
Работа с log collect CLI ведётся через базовую команду sudo log collect и её параметры. Для выполнения команды требуются права администратора. Например:
sudo log collect --device-udid <UDID> --last 10m --output iphone_logs.logarchive
Ключевые параметры команды
--output — определяет путь сохранения архива.
sudo log collect --output ~/Desktop/iphone_logs.logarchive # создаст архив с именем iphone_logs на рабочем столе
sudo log collect --output ~/Desktop/ # создаст архив с автоматически присвоенным именем system_logs на рабочем столе
Если не указать
--output, файл создается с временной меткой в текущей директории.
--last — ограничивает сбор логов за определённый период.
sudo log collect --last 30m # за последние 30 минут
sudo log collect --last 2h # за последние 2 часа
sudo log collect --last 1d # за последний день
--start / --end — также ограничивает сбор логов, но с / по определённую дату и время.
sudo log collect --start "2025-08-20" # с 20 августа 2025 г
sudo log collect --start "2025-08-20 14:00:00" --end "2025-08-20 14:30:00" # c 20 августа 2025 г 14:00 по 20 августа 2025 г 14:30
--size — ограничивает размер собираемых данных.
sudo log collect --size 100k # максимум 100 КБ
sudo log collect --size 50m # максимум 50 МБ
Многие параметры можно и нужно сочетать друг с другом. Например, для больших временных периодов лучше ограничивать размер, иначе архив может весить очень много:
sudo log collect --last 3d --size 100m
Параметры для работы с iOS‑устройствами
--device — автоматически выбирает первое найденное устройство.
sudo log collect --device --last 10m
Не рекомендуется использовать эту команду, поскольку целевое и найденное устройство могут не совпасть.
--device-name — указать устройство по имени.
sudo log collect --device-name "iPhone 16 Pro Max" --last 15m
--device-udid — указать устройство по UDID (рекомендуемый метод)
sudo log collect --device-udid A1B2C3D4R5F8G8H8I1J0 --last 20m
UDID — это ID устройства, который всегда является уникальным. В свою очередь имя устройства не гарантирует уникальность. При подключении нескольких устройствах
--deviceвыберет первое найденное. Именно поэтому предпочтительнее использовать UDID устройства вместо его имени.
Анализ собранных логов
После создания .logarchive-файла его можно проанализировать с помощью команды log show. Например:
log show --archive system_logs.logarchive # базовый просмотр архива
log show --archive system_logs.logarchive --predicate 'process == "AtiClient"' # фильтрация по конкретному приложению
log show --archive system_logs.logarchive --start "2025-08-20 14:00:00" --end "2025-08-20 14:30:00" # анализ определенного временного периода
log show --archive system_logs.logarchive --predicate 'process == "AtiClient" AND messageType == "error"' # фильтрация всех ошибок в приложении
Когда использовать:
-
баг проявляется раз в несколько дней, но предсказать момент, чтобы отловить его, невозможно.
-
пользователи жалуются на ухудшение производительности, но проблема накапливается постепенно. Архив за несколько дней покажет тренды использования памяти, CPU и сетевой активности.
-
приложение падает на проде и нужно проанализировать контекст до и после креша. Нужно получить полную картину системных событий вокруг момента падения приложения.
3. Open Recent Logs в Xcode
Где применимо: реальное устройство
Предварительные действия:
-
Установить Xcode.
-
Подключить устройство по проводу / Wi‑Fi.
Для подключения по Wi‑Fi устройство должно быть предварительно добавлено как доверенное, а также должна быть активирована опция «Connect via Network when wired connection is not available» на карточке устройства.
Как найти:
-
В Xcode открыть меню Window → Devices and Simulators (⇧⌘2).
-
На панели слева во вкладке «Devices» найти в списке нужное устройство.
-
Нажать на кнопку «Open Recent Logs».
4. Откроется окно Finder со списком .ips‑файлов.
Что это и как использовать:
На самом деле это те же самые .ips‑файлы, которые хранятся на самом устройстве (способ 1). По сути, Xcode просто предоставляет удобный интерфейс к аналитическим файлам устройства. Эти логи автоматически скачиваются с устройства на Mac при каждом подключении устройства.
Логи устройства не будут отображаться в Xcode до тех пор, пока устройство не будет хотя бы раз подключено к Mac. При этом логи сохраняются, даже если потом отключить устройство: их можно открыть повторно без переподключения устройства.
Когда использовать:
Все те же самые кейсы, что и в 1-м способе (sysdiagnose), но с преимуществами интерфейса Xcode:
-
при тестировании на множестве устройств и необходимости быстро переключаться между их логами. Все логи будут собраны в одном месте в Xcode, не нужно копаться в настройках каждого устройства.
-
когда нужны логи без доступа к устройству (например, тестировали на устройстве клиента, скопировали .ips‑файлы себе для последующего анализа).
-
при активной разработке в Xcode и желании быстро переключаться к анализу крешей. Не нужно выходить из Xcode — все в одном месте с привычным интерфейсом.
Любой .ips‑файл, как и в способе 1, можно удобно экспортировать прямо с устройства (напр., через AirDrop), чтобы отправить разработчику или прикрепить к баг‑репорту.
Альтернативные способы достать .ips файлы на Mac
Основная директория Xcode
~/Library/Developer/Xcode/DeviceLogs/[Имя_устройства]
-
архивы логов, доступные через интерфейс Xcode;
-
файлы сгруппированы по имени подключённого устройства;
-
содержат все типы .ips‑файлов (отчёты о крешах, фризах и завершениях процессов);
-
удобны для быстрого просмотра и экспорта логов прямо из Xcode.
Системная директория крешей
~/Library/Logs/CrashReporter/MobileDevice/
-
хранит сырые системные креш‑логи, которые создаются самим iOS и системными службами;
-
эти отчёты формируются через процесс launchd — системный менеджер, который запускает и контролирует все процессы в iOS (аналог systemd в Linux);
-
в отличие от логов Xcode, здесь можно найти более детальные технические данные:
-
полный стек вызовов;
-
информацию о загрузке памяти и процессора;
-
отчёты об ошибках системных служб.
-
4. Console (Утилита «Консоль»)
Где применимо: реальное устройство / симулятор
Предварительные действия:
-
Подключить устройство по проводу / Wi‑Fi.
-
Собрать приложение на реальном устройстве / симуляторе любым удобным способом (Xcode, .ipa‑файл, App Distribution, Test Flight и так далее).
iOS‑устройство должно быть доверенным, и Mac должен иметь доступ к логам (по проводу или Wi‑Fi с авторизацией).
Как найти:
-
В Finder перейти в Applications → Utilities и открыть утилиту Console.
-
Выбрать устройство или симулятор на панели слева в блоке Devices.
-
Нажать на Start streaming → начнётся поток логов.
Самый быстрый способ открыть Console (как и любые другие утилиты из этой статьи) — найти через Spotlight (⌘ + пробел).
Что это и как использовать:
Console — это встроенное приложение macOS, которое идет «из коробки» и не требует дополнительной установки. С его помощью можно смотреть живой поток системных логов, то есть всё, что приходит с устройства или симулятора в режиме реального времени. По своей сути, Console имеет схожее назначение с debug‑area в Xcode — отображение логов во время работы приложения. Но преимущество Console состоит в том, что оно не требует запуска или даже установки Xcode.
В Console есть 2 стандартные вкладки:
-
All Messages — отображаются все события подряд, то есть полный поток системной активности.
-
Errors and Faults — фильтрует и отображает только ошибки (в колонке Type отображаются с жёлтым кругом).
Console поддерживает гибкую и быструю фильтрацию по таким параметрам, как:
-
Subsystem — системный компонент;
-
Message type — тип сообщения;
-
Process — конкретный процесс;
-
Library — библиотека;
-
Category — категория события.
Помимо того, что в Console можно посмотреть события, которые приходят с устройства в режиме реального времени, здесь также можно найти отчёты о событиях, которые уже произошли. Для этого нужно перейти в блок Reports на панели слева, на котором можно найти:
-
Crash Reports — отчёты о крешах;
-
Spin Reports — отчёты о зависаниях;
-
Log Reports — архивы логов;
-
Diagnostic Reports — диагностические отчёты;
-
Mac Analytics Data — аналитические данные Mac;
-
system.log — системные логи.
Любое событие из Console можно удобно и быстро экспортировать через кнопку Share в правом верхнем углу, чтобы отправить разработчику или прикрепить к баг‑репорту.
Когда использовать:
-
приложение падает, но нужно понять, какие системные события предшествовали крешу. Live‑стриминг покажет полную картину системных вызовов, уведомлений и предупреждений перед падением.
-
при тестировании чужого приложения или работе с legacy‑кодом, к которому нет доступа. Console работает независимо от Xcode и показывает системную активность любых приложений.
-
приложение работает в фоне (background refresh, push‑уведомления), нужно отследить его активность. Console показывает все системные вызовы и ошибки, даже когда приложение не на переднем плане.
-
если есть проблемы с системными фреймворками, такими как HealthKit, CloudKit, Core Data и др. Системные логи покажут ошибки взаимодействия с iOS API, которые не всегда видны в логах самого приложения.
Альтернативные способы открыть Console
Через Xcode:
1. Открыть меню Window → Devices and Simulators (⇧⌘2).
2. На панели слева во вкладке «Devices» найти в списке нужное устройство или симулятор.
3. Нажать на кнопку «Open Console».
Через Simulator:
1. В Xcode запустить сборку проекта на симуляторе → запустится программа Simulator.
2. Открыть меню Debug → Open System Log... (⇧⌘2). При этом откроется файл system.log, в котором содержатся системные логи.
Логи ��о каждому конкретному симулятору также можно найти в Finder, если перейти в
~/Library/Logs/CoreSimulator/[Device_UDID]/
Руководство пользователя приложения «Консоль»
5. simctl
Где применимо: симулятор
Предварительные действия:
-
Установить Xcode (simctl поставляется в комплекте).
-
Настроить проект приложения.
Как найти:
-
Переключиться на нужную ветку проекта.
-
Запустить Xcode.
-
Выбрать необходимый симулятор или настроить новый (устройство + версия iOS) в меню Window → Devices and Simulators (⇧⌘2).
-
Собрать проект на симуляторе (⌘ + R).
-
Запустить Terminal.
Что это и как использовать:
simctl — это утилита командной строки для взаимодействия с симуляторами. По своим возможностям и принципу работы похожа на ADB для Android. simctl устанавливается вместе со средой разработки Xcode и используется вместе с Xcode‑runner командной строки — xcrun (proxy‑утилита, перенаправляющая вызовы к simctl).
Для просмотра логов с симулятора в командной строке необходимо выполнить базовую команду, которая по умолчанию показывает логи уровня default, error и fault.:
xcrun simctl spawn booted log stream
В iOS используются пять уровней логирования:
-
Default. Информация о потенциальных причинах сбоев.
-
Info. Полезная, но необязательная отладочная информация.
-
Debug. Детальная информация для разработки и диагностики.
-
Error. Информация об ошибках процесса.
-
Fault. Системные ошибки и мультипроцессные сбои.
Если нужно вывести логи с расширенными уровнями, то можно воспользоваться параметрами:
xcrun simctl spawn booted log stream --level=info # добавляет уровень info
xcrun simctl spawn booted log stream --level=debug # добавляет уровень info и debug
Также есть параметры, которые позволяют отфильтровать все логи по определённому признаку:
xcrun simctl spawn booted log stream --predicate 'processImagePath endswith "AtiClient"' # по конкретному приложению
xcrun simctl spawn booted log stream --predicate 'eventMessage contains "error" and messageType == info' # по типу событий и сообщений
Примеры полезных команд с параметрами для фильтрации:
xcrun simctl spawn booted log stream --predicate 'NOT (process == "kernel" OR subsystem beginswith "com.apple.system")' # исключить системный шум
xcrun simctl list devices # получить список доступных симуляторов
xcrun simctl spawn [DEVICE_ID] log stream --level=debug # получить логи конкретного симулятора
xcrun simctl spawn booted log stream --predicate 'process == "AtiClient" and category == "launch"' --level=debug # отследить запуск приложения
xcrun simctl spawn booted log stream --predicate 'eventMessage contains "memory" or eventMessage contains "malloc"' # мониторинг использования памяти
xcrun simctl spawn booted log stream --predicate 'eventMessage contains "network" and messageType in {error, fault}' # отслеживание ошибок сети
Чтобы выключить вывод логов, нужно нажать ⌃ + C в окне Terminal.
C помощью команды log collect можно сделать архив логов для дальнейшего анализа:
xcrun simctl spawn booted log collect # создает файл .logarchive в текущей директории
Команда diagnose позволяет сгенерировать подробный отчёт всего, что происходило во время сессии приложения «Simulator»:
xcrun simctl diagnose
Содержимое отчёта:
-
системные логи
-
логи симулятора
-
информацию об устройстве и окружении
-
настройки устройства
-
дополнительная диагностическая информация
В отчёте может содержаться конфиденциальная информация, поэтому нужно быть осторожным при передаче содержимого отчёта третьим лицам.
После генерации откроется окно Finder с расположением файла в формате .gz, который содержит полный диагностический отчёт.
Когда использовать:
-
автотесты периодически падают на CI, но локально воспроизвести не удаётся. simctl интегрируется в скрипты CI и может собирать детальные логи автоматически при падении тестов.
-
симулятор ведет себя нестабильно, зависает или не запускается.
diagnoseсоздаёт полный слепок состояния симулятора для анализа системных проблем. -
нужно быстро оценить производительность без запуска тяжёлых инструментов профилирования. Debug‑логи покажут временные метки и использование ресурсов в реальном времени.
-
отладка взаимодействия с системными сервисами (CoreData, CloudKit, HealthKit) без влияния реального устройства. Симулятор предоставляет чистую среду с детальным логированием системных вызовов.
6. idevicesyslog
Где применимо: реальное устройство
Предварительные действия:
-
Установить libimobiledevice (напрямую с сайта или если установлен brew — через
brew install libimobiledevice). -
Подключить устройство по проводу / Wi‑Fi.
-
Запустить Terminal.
-
Собрать приложение на реальном устройстве любым удобным способом (Xcode, .ipa‑файл, App Distribution, Test Flight и так далее).
iOS‑устройство должно быть доверенным, и Mac должен иметь доступ к логам (по проводу или Wi‑Fi с авторизацией).
Что это и как использовать:
libimobiledevice — это кроссплатформенная библиотека для взаимодействия с iOS‑устройствами. Включает в себя множество полезных утилит для iOS‑разработки, одна из которых — idevicesyslog. Это утилита, которая позволяет получать системные логи iOS‑устройства в реальном времени. Она работает напрямую с подключённым устройством и выводит поток логов, аналогичный тому, что можно увидеть в Console (способ 4).
В первую очередь необходимо получить UDID устройства через команду в Terminal:
idevice_id -l
Важно получить UDID устройства — так можно убедиться, что устройство подключено и его видит система. Если команда не срабатывает — попробуйте разблокировать устройство.
Запустить сбор логов с устройства можно через команду:
idevicesyslog
В окне Terminal начнётся поток логов, аналогичный Console:
idevicesyslog также, как и в другие способы, позволяет тонко фильтровать логи:
idevicesyslog | grep "AtiClient" # по конкретному процессу
idevicesyslog | grep -i "error|fault|crash" # поиск только ошибок
Также можно настроить работу с idevicesyslog по Wi‑Fi. Для этого сначала нужно подключить устройство по проводу, а затем ввести команды:
idevicepair pair # содзаёт пару с устройством
idevicepair wifi on # включает Wi-Fi
Дополнительные утилиты libimobiledevice
# информация по устростве
ideviceinfo # получить детальную информацию об устройстве
ideviceinfo -k DeviceName # получить имя устройства
ideviceinfo -k ProductVersion # получить версию устройства
ideviceinfo -k UniqueDeviceID # получить UDID устройства
# управление приложением
ideviceinstaller -l # получить список установленных приложений
ideviceinstaller -i AtiClient.ipa # установить .ipa файл
ideviceinstaller -U su.ati.client.ios.appbundle # удалить приложение
# диагностика устройства
idevicecrashreport -e ./crashes # посмотреть crash‑логи
idevicediagnostics diagnostics # проверить статус подключения
idevicediagnostics restart # перезагрузить устройство
Чтобы выключить вывод логов, нужно нажать ⌃ + C в окне Termnal.
Когда использовать:
-
при настройке автоматических тестов на CI‑серверах, где нет Xcode. Легковесная утилита командной строки, которая работает на любой Unix‑системе и легко интегрируется в скрипты.
-
нужно получить логи с устройства, подключённого к удаленному Mac. Работает через SSH‑сессию без графического интерфейса, в отличие от Xcode или Console.
-
работаете на старом Mac. Занимает минимум ресурсов и не требует установки тяжёлых IDE.
-
работаете на Linux‑машине и иногда нужно подключиться к iOS‑устройству. libimobiledevice работает на Linux, в отличие от нативных инструментов Apple.
7. Console в Apple Configurator
Где применимо: реальное устройство
Предварительные действия:
-
Установить Apple Configurator из App Store.
-
Подключить устройство по проводу.
-
Собрать приложение на реальном устройстве любым удобным способом (Xcode, .ipa‑файл, App Distribution, TestFlight и так далее).
Как найти:
-
Открыть Apple Configurator.
-
Дождаться, пока подключённое устройство появится на экране.
-
Открыть карточку устройства.
-
На панели слева перейти в Console → начнётся поток логов.
Что это и как использовать:
Apple Configurator — это приложение от Apple, которое изначально создано для массового управления iOS‑устройствами в корпоративной среде и предоставляет:
• профили конфигурации для настройки устройств (Wi‑Fi, VPN и пр.);
• массовую установку приложений;
• мониторинг состояния устройств;
• резервное копирование и восстановление.
Также Apple Configurator позволяет получить доступ к системным логам устройства без запуска Xcode или системной Console. Особенно полезен на корпоративных Mac, где могут отсутствовать инструменты разработчика.
Когда использовать:
-
при тестировании приложения на устройствах, но на рабочих Mac нет Xcode. Apple Configurator доступен в App Store и не требует AppleDeveloper-аккаунта или CLI.
-
когда QA‑команда тестирует приложение на десятках устройств одновременно. Можно открыть несколько окон Console для разных устройств и мониторить их параллельно.
-
при работе на чужом Mac, где нет настроенной среды разработки. Установка из App Store занимает минуты, в отличие от полной настройки Xcode.
Вместо выводов
Сравнительная таблица 7-ми способов для снятия логов на iOS:
|
Способ |
Применимость |
Сложность настройки |
Требуемые инструменты |
Тип данных |
Временной охват |
Основное преимущество |
|
Устройство |
Без настройки |
Нет |
Автоматические отчеты (.ips) |
На момент события |
Работает автоматически |
|
|
Устройство / Симулятор |
Средняя |
Xcode CLI Tools + Terminal |
Архив логов (.logarchive) |
До 10 дней назад |
Большой временной диапазон |
|
|
Устройство |
Простая |
Xcode |
Отчеты (.ips) через Xcode |
На момент события |
Интеграция с Xcode IDE |
|
|
Устройство / Симулятор |
Простая |
Встроенная утилита macOS |
Live‑поток системных логов |
Реальное время + история |
Встроено в macOS |
|
|
Симулятор |
Средняя |
Xcode + Terminal |
Live‑поток + архивы |
Реальное время + архивы |
Подходит для CI/автотестов |
|
|
Устройство |
Средняя |
libimobiledevice + Terminal |
Live‑поток системных логов |
Реальное время |
Не требует Xcode |
|
|
Устройство |
Простая |
Apple Configurator |
Live‑поток системных логов |
Реальное время |
Корпоративная среда |
Умение быстро получать и анализировать логи — это разница между часами мучительных поисков бага и его решением за минуты. В этой статье мы разобрали семь способов получения логов с iOS‑устройств, от экстренной отладки через .ips‑файлы до live‑мониторинга через idevicesyslog.
Теперь у вас есть полный арсенал инструментов для любой ситуации:
-
Экстренная отладка → .ips файлы на устройстве или через Xcode (способы 1 и 3)
-
Глубокий анализ → log collect CLI для постанализа нестабильных проблем за длительный период времени (способ 2)
-
Live‑отладка с Xcode → Console или simctl для сбора логов в режиме реального времени (способы 4 и 5)
-
Live‑отладка без Xcode → idevicesyslog через Terminal или Apple Configurator из App Store для сборка логов в режиме реального времени (способы 6 и 7)
Сохраните эту статью в закладки на случай, когда вы столкнётесь с неуловимым багом, который «воспроизводится у меня, но не воспроизводится у разработчика». Теперь вы точно будете знать, с чего начать поиск. Но помните: лог без контекста — просто текст, а лог с пониманием контекста — уже половина решения.
В следующей статье подробно разберем способы поиска не просто логов, а конкретно креш‑отчетов приложения.
Если интересно изучить более подробно тот или иной способ снятия логов — оставляю список годных статей по теме:
-
Логирование на Mac и команда log: руководство для администраторов Apple
-
Как снимать логи с устройств на Android и iOS: разбираемся с инструментами
P. S. Если статья оказалась полезной, поделитесь в комментариях своими кейсами, какие вы используете способы для сбора логов на iOS и в каких ситуациях.
Автор: Wizzzmo
