# Для разработчика: сбор крэшей и ошибок, отладочные файлы и проверка Статья: Крэши и ошибки Разработчик подключает сбор сбоев и загружает файлы для их расшифровки. Это помогает получить понятное описание проблемы и найти ее причину. #### Как настроить сбор Сбор крэшей предусмотрен в AppMetrica SDK. Проверьте интеграцию для вашей платформы и настройки передачи. Для собственных сообщений об ошибках разработчик добавляет вызов соответствующего метода SDK. Например, если приложение обработало неудачную операцию и показало пользователю сообщение, разработчик может передать ошибку для последующего анализа. Какие ситуации отправлять, определяет команда приложения. Ссылки на методы Android, iOS, Flutter, React Native и Unity приведены в [инструкции по отправке ошибок](#audit-about-crashes-and-errors-links). #### Файлы для расшифровки сбоев на Android и iOS Используйте файлы, соответствующие сборке приложения, в которой произошел сбой. Ниже приведены требования и способы загрузки для каждой платформы. ##### Android: mapping-файлы и отладочные символы AppMetrica позволяет собирать информацию о нативных и java-крэшах. Их можно анализировать в отчете [Крэши и ошибки](https://appmetrica.yandex.ru/docs/ru/mobile-reports/crashes-and-errors). См. также [инструкции по отправке ошибок для платформ](#audit-about-crashes-and-errors-links). Чтобы уменьшить размер приложения, код [оптимизируют](https://developer.android.com/studio/build/shrink-code) во время релизной сборки. Если во время сборки Android-приложения сжимали и обфусцировали код, то информация о крэшах передается в обфусцированном виде. Чтобы извлечь данные для анализа из таких крэш-логов, AppMetrica выполняет деобфускацию на стороне сервера. Для этого загрузите mapping-файлы или отладочные символы SO-файлов в AppMetrica: автоматически при сборке приложения или вручную через веб-интерфейс. Чтобы отправлять файлы, подключите [AppMetrica Gradle Plugin](https://appmetrica.yandex.ru/docs/ru/sdk/android/analytics/android-gradle-plugin). Загружайте mapping-файлы, если вы используете [ProGuard](https://www.guardsquare.com/en/products/proguard/manual) или [R8](https://r8.googlesource.com/r8/). Если вы не сжимаете и не обфусцируете код, не подключайте плагин. ###### Узнать больше - [Отчет Крэши и ошибки](https://appmetrica.yandex.ru/docs/ru/mobile-reports/crashes-and-errors) - [Документация Android](https://developer.android.com/topic/performance/vitals/crash) ##### iOS: dSYM-файлы Информация о крэшах на iOS отправляется в [десимволизированном](https://developer.apple.com/library/archive/technotes/tn2151/_index.html) виде. Из таких крэш‑логов сложно извлечь данные для анализа. Чтобы крэш-логи можно было анализировать, загрузите dSYM-файлы в AppMetrica. Для загрузки dSYM-файлов в AppMetrica SDK включен инструмент командной строки [helper](#dsym--helper). Для сборки с помощью [fastlane](https://docs.fastlane.tools) поддержан [плагин загрузки](https://github.com/yandexmobile/metrica-plugin-fastlane). С их помощью можно настроить автоматическую загрузку dSYM-файлов при сборке приложения. Пожалуйста, отправляйте dSYM файлы только для тех приложений, которые вы хотите опубликовать. ###### Автоматическая загрузка при сборке Используйте [fastlane](https://docs.fastlane.tools) для сборки приложения: 1. Установите fastlane-плагин `appmetrica`: ``` fastlane add_plugin appmetrica ``` Подробнее о добавлении плагина в [документации fastlane](https://docs.fastlane.tools/plugins/using-plugins/#add-a-plugin-to-your-project). 2. Добавьте в файл `fastlane/Fastfile` следующее: ``` lane :release do # Your actions before. gym( workspace: "MyApp.xcworkspace", configuration: "Release", scheme: "MyApp", export_method: "app-store" # Pass the correct export_method. ) upload_symbols_to_appmetrica(post_api_key: "Post API key") # Your actions after. end ``` Post API key можно получить в разделе **Настройки** в AppMetrica. Он используется для идентификации вашего приложения. Для сборки приложения используется action [gym](https://docs.fastlane.tools/actions/gym/#gym) с экспортом. Если вы собираете приложение с помощью Xcode, приложение будет перекомпилировано после загрузки в App Store Connect. Тогда сгенерированые при сборке dSYM-файлы нельзя будет использовать. 3. Добавьте этап загрузки dSYM-файлов с помощью инструмента `helper` в Xcode. Инструмент `helper` включен в AppMetrica SDK, начиная с версии 3.8.0. Он находится в архиве SDK. [Справочник инструмента helper](#dsym--helper). 1. Откройте проект в Xcode. 2. В навигаторе по проекту выберите файл проекта. 3. В блоке **Targets** выберите ваше приложение. 4. Откройте вкладку **Build Phases**. 5. Нажмите кнопку **+** → **New Run Script Phase**. 6. В текстовое поле **Type a script** добавьте: ``` if [ -d "${PODS_ROOT}/AppMetricaCrashes" ]; then HELPER_PATH=`find "${PODS_ROOT}/AppMetricaCrashes" -name "helper"` if [ -x "${HELPER_PATH}" ]; then "${HELPER_PATH}" auto --post-api-key="Post API key"& else echo "AppMetricaСrash helper was not found" fi fi ``` Режим `auto` использует переменную окружения `CONFIGURATION`. Если сборка собирается с конфигурацией `Debug`, dSYM-файлы не загружаются. ###### Загрузка отсутствующего dSYM-файла Если при сборке приложения dSYM-файл не был загружен, в отчетах по крэшам будет отображаться предупреждение о несимволизированных крэшах. ![предупреждение](https://yastatic.net/s3/doc-binary/src/dev/appmetrica/ru/images/common/dsym-warning.png) Чтобы их символизировать, загрузите отсутствующие dSYM-файлы. Список отсутствующих файлов можно посмотреть на странице **Настройки** → **Крэши** вашего приложения в AppMetrica. Отсутствующие dSYM-файлы можно загрузить: С помощью fastlane Через веб-интерфейс С помощью helper 1. Установите fastlane-плагин `appmetrica`: ``` fastlane add_plugin appmetrica ``` Подробнее о добавлении плагина в [документации fastlane](https://docs.fastlane.tools/plugins/using-plugins/#add-a-plugin-to-your-project). 2. Добавьте в файл `fastlane/Fastfile` следующее: ``` lane :refresh_dsyms do download_dsyms upload_symbols_to_appmetrica(post_api_key: "Post API key") clean_build_artifacts end ``` В действии `download_dsyms` можно указать необходимую версию приложения и номер сборки: ``` ... download_dsyms(version: "1.0.0", build_number: "345") ... ``` Подробнее о действии `download_dsyms` в документации [fastlane](https://docs.fastlane.tools/actions/download_dsyms/). 1. Найдите необходимый архив с dSYM-файлом: 1. В интерфейсе Xcode нажмите **Window** → **Organizer**. 2. Во вкладке **Archives** выберите нужную версию приложения. 3. Нажмите кнопку **Download dSYM**. ![Иллюстрация](https://yastatic.net/s3/doc-binary/src/dev/appmetrica/ru/images/common/xcode-archives_organizer.png) 1. В интерфейсе iTunes Connect откройте страницу **Activity**. 2. Во вкладке **All Builds** выберите нужный номер сборки. 3. Нажмите **Download dSYM**. ![Иллюстрация](https://yastatic.net/s3/doc-binary/src/dev/appmetrica/ru/images/common/itunes-connect.png) Можно использовать dSYM-файл, который был сгенерирован при сборке. 2. В интерфейсе AppMetrica перейдите в настройки приложения из меню слева. 3. Откройте вкладку **Крэши** → **iOS**. 4. Нажмите кнопку **Выберите файл** и загрузите ZIP-архив, содержащий директории `app.dSYM` или `app`. Для загрузки с помощью плагина необходимо подключить AppMetrica SDK не нижее версии 3.8.0. Чтобы загрузить в AppMetrica отсутствующие dSYM-файлы, в терминале выполните команду: ``` helper -k ``` `file_path` — список dSYM-файлов или папок, в которых они лежат. [Справочник инструмента helper](#dsym--helper). ###### Справочник инструмента helper Инструмент `helper` включен в AppMetrica SDK, начиная с версии 3.8.0. Он находится в архиве SDK. Helper — инструмент командной строки, который позволяет загружать dSYM-файлы в AppMetrica. ``` $ helper [auto] [-o | --package-output-path=] [-v | --verbose] [--version] -k | --post-api-key= [file ...] ``` **Параметры** | Параметр | Описание | | --- | --- | | `auto` | Автоматический режим загрузки. В нем `helper` использует следующие переменные: - `CONFIGURATION` — используется для определения конфигурации. Если сборка собирается с конфигурацией `Debug`, dSYM-файлы не загружаются. - `DWARF_DSYM_FOLDER_PATH` — используется для нахождения dSYM-файлов. Она обычно зависит от переменной `BUILT_PRODUCTS_DIR`. - `AMA_POST_API_KEY` — *Post API key*. Если указан, в автоматическом режиме можно использовать короткую команду `helper auto&`. | | `-k` | Post API key. Его можно получить в разделе **Настройки** в AppMetrica. Он используется для идентификации вашего приложения. | | `-o` | Путь к папке, в которой хранятся временные файлы. По умолчанию используется системная папка. | | `-v` | Включает отображение дополнительной информации. | | `--version` | Выводит версию. | | `file` | Список dSYM-файлов или папок, в которых они лежат. По умолчанию используется локальная рабочая папка. | `&` позволяет запускать `helper` параллельно, не блокируя сборку всего проекта. Пример команды: ``` helper auto --post-api-key="Post API key"& ``` ###### Узнать больше - [Отчет Крэши и ошибки](https://appmetrica.yandex.ru/docs/ru/mobile-reports/crashes-and-errors) - [Документация Apple](https://developer.apple.com/library/archive/technotes/tn2151/_index.html) Post API key можно получить в разделе **Настройки** в AppMetrica. Он используется для идентификации вашего приложения. #### Как проверить результат 1. В тестовом окружении воспроизведите контролируемую ошибку или сбой. 2. Откройте [отчет «Крэши и ошибки»](https://appmetrica.yandex.ru/docs/ru/mobile-reports/crashes-and-errors) и найдите данные тестовой версии приложения. 3. Проверьте сообщение, устройство и стек вызовов — последовательность функций, связанных со сбоем. 4. Если стек не читается, проверьте наличие отладочных файлов именно для этой сборки. Крэши объединяются в группы по стеку вызовов; группировка ошибок зависит от метода отправки. Подробности — в [документации по крэшам и ошибкам](#crashes-developer). #### Отправка ошибок на разных платформах - [Android](https://appmetrica.yandex.ru/docs/ru/sdk/android/analytics/android-operations#send-report-error) - [iOS](https://appmetrica.yandex.ru/docs/ru/sdk/ios/analytics/ios-operations#send-report-error) - [Flutter](https://appmetrica.yandex.ru/docs/ru/sdk/flutter/analytics/flutter-operations#send-report-error) - [React Native](https://appmetrica.yandex.ru/docs/ru/sdk/react-native/analytics/react-native-operations#send-report-error) - [Unity](https://appmetrica.yandex.ru/docs/ru/sdk/unity/analytics/unity-operations#send-report-error)