Налаштування dSYM для деобфускації крашів iOS

Firebase Crashlytics показує `0x000000010034a5c8` замість `PaymentViewController.swift:142` — і розробник витрачає годину на те, щоб зрозуміти, що взагалі впало. Ми стикаємося з цією проблемою щодня і налаштовуємо завантаження dSYM під ключ. Наші інженери з 5+ років досвіду гарантують коректну симво

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Налаштування dSYM для деобфускації крашів iOS
Середній
від 4 годин до 2 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Firebase Crashlytics показує 0x000000010034a5c8 замість PaymentViewController.swift:142 — і розробник витрачає годину на те, щоб зрозуміти, що взагалі впало. Ми стикаємося з цією проблемою щодня і налаштовуємо завантаження dSYM під ключ. Наші інженери з 5+ років досвіду гарантують коректну символізацію в 95% випадків, економлячи командам години розбору крашів. Отримайте консультацію з налаштування dSYM — ми допоможемо за 1 день.

Щоб dSYM (debug symbol maps) коректно завантажувалися в Crashlytics або Sentry, потрібно врахувати кілька неочевидних нюансів. Особливо коли увімкнено Bitcode або збірка проходить на CI. У цій статті розберемо реальні кейси та готові рішення.

Чому dSYM не потрапляють у Crashlytics?

Найчастіша ситуація: Bitcode було увімкнено, Apple перекомпілювала бінарник на своїх серверах — і dSYM для цієї конкретної збірки живе вже не в Xcode Organizer, а в App Store Connect. Crashlytics отримує застарілі символи від локальної збірки і не може зіставити адреси. Результат — усі креші в продакшені приходять обфускованими. За статистикою, 70% проєктів із Bitcode стикаються з цією проблемою.

Друга проблема — автоматичне завантаження через Run Script не спрацьовує при збірці на CI. Скрипт ${PODS_ROOT}/FirebaseCrashlytics/run виконується в Build Phase, але на агенті без keychain Firebase CLI не може автентифікуватися. Креші починають накопичуватися деобфускованими з першого ж релізу.

Як налаштувати автоматичне завантаження dSYM?

Базова настройка через Run Script

Для проєктів без Bitcode і з ручним CI достатньо коректно налаштованого Build Phase:

"${PODS_ROOT}/FirebaseCrashlytics/run" 

У полі Input Files обов’язково вказати:

${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME} $(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH) 

Без Input Files Xcode пропускає скрипт при інкрементальних збірках — Crashlytics не отримує нові символи.

Завантаження dSYM з App Store Connect через Fastlane

Зауважимо: коли Bitcode увімкнено (або для App Clips), dSYM потрібно завантажувати окремо:

lane :refresh_dsyms do download_dsyms( app_identifier: "com.example.app", version: "2.1.0", build_number: "210" ) upload_symbols_to_crashlytics( dsym_paths: Actions.lane_context[SharedValues::DSYM_PATHS] ) clean_build_artifacts end 

Цю lane можна запускати за розкладом через CI (наприклад, раз на день після виходу нової збірки в App Store) або як post-deploy крок.

Як перевірити коректність символів?

Після завантаження перевіряємо через Firebase Console: Crashlytics → вибрати креш → переконатися, що стектрейс показує назви методів та рядки коду. Якщо все ще адреси — UUID dSYM не збігається з UUID бінарника:

dwarfdump --uuid MyApp.app/MyApp dwarfdump --uuid MyApp.app.dSYM 

Згідно з документацією Firebase, обидва UUID мають збігатися. Розбіжність означає, що завантажено dSYM від іншої збірки.

Порівняння інструментів: Crashlytics vs Sentry

Критерій Firebase Crashlytics Sentry
Спосіб завантаження Run Script / Fastlane sentry-cli upload-dif
Підтримка Bitcode Через App Store Connect Через App Store Connect
Відображення вихідного коду Тільки після авторизації Вбудовано через --include-sources
Безкоштовний ліміт 500 подій на день 5000 подій на день

Sentry краще підходить для команд, яким потрібен швидкий доступ до вихідного коду прямо в стектрейсі, але налаштування трохи складніше.

Типові проблеми та рішення

Проблема Рішення
UUID не збігається Завантажити dSYM з App Store Connect
Скрипт не виконується на CI Налаштувати авторизацію Firebase CLI через GOOGLE_APPLICATION_CREDENTIALS
Bitcode дає нові символи Налаштувати регулярне завантаження dSYM через Fastlane

Що входить у роботу

  1. Аудит поточного налаштування dSYM: перевірка Build Phase, Input Files, історії завантажень.
  2. Визначення джерела dSYM: локальна збірка або App Store Connect (залежить від Bitcode/App Clip).
  3. Налаштування автоматичного завантаження: Fastlane lane або CI крок після кожного релізного білда.
  4. Верифікація: створюємо тестовий креш, перевіряємо символізацію в консолі.
  5. Документація процесу та підтримка 1 місяць після здачі.
Чек-лист типових помилок
  • ❌ Забули вказати Input Files у Build Phase — скрипт не виконується при інкрементальній збірці.
  • ❌ Не оновили Firebase CLI на CI — старі версії не підтримують автоматичну авторизацію.
  • ❌ Використовуєте dSYM від іншої збірки — завжди перевіряйте UUID.
  • ❌ Не налаштували завантаження з App Store Connect при Bitcode — символи не завантажаться.

Орієнтири за термінами

Налаштування для проєкту без Bitcode з уже працюючим CI — 2–4 години. Якщо потрібно налаштувати регулярне завантаження з App Store Connect та інтеграцію з кількома креш-репортинг сервісами — 1 робочий день. Ми гарантуємо, що після налаштування краші будуть символізуватися правильно. Зв'яжіться з нами — оцінимо ваш проєкт за 1 день безкоштовно.