Что такое символизация логов крашей (Crash Log Symbolication) в iOS?

«Что такое символизация логов крашей (Crash Log Symbolication) в iOS?» — вопрос из категории DevOps, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Символизация — это процесс преобразования сырых адресов памяти из лога аварийного завершения (Crash Log) в читаемые имена символов (названия функций, классов, строк кода). Без нее лог содержит только шестнадцатеричные числа, что делает анализ невозможным.

Для символизации необходимы:

  1. Сам лог краша (стек вызовов с адресами).
  2. dSYM-файл (Debug Symbols File), уникальный для каждой сборки. Он является ключом для сопоставления адресов и символов.

Как выполнить символизацию вручную с помощью atos:

# Формат команды:
# atos -o <Путь_к_исполняемому_файлу_в_dSYM> -arch <Архитектура> <Адрес_в_логе>

atos -o MyApp.app.dSYM/Contents/Resources/DWARF/MyApp 
     -arch arm64 
     0x00000001000abcde
# Вывод: -[ViewController viewDidLoad] (in MyApp) (ViewController.swift:25)

Где найти dSYM-файлы?

  • В архиве Xcode: Window → Organizer → Archives.
  • Убедитесь, что в настройках сборки включено: Build Settings → Debug Information Format = DWARF with dSYM File.

Автоматическая символизация:

  • Xcode Organizer: Загружает краши с устройств пользователей, если доступны dSYM.
  • Сервисы (Crashlytics, Sentry): Автоматически символизируют краши при загрузке dSYM.

Важно: dSYM-файлы критически важны и должны храниться для каждой сборки, опубликованной в App Store или TestFlight. Без них символизация крашей от пользователей будет невозможна.