# Для разработчика: сбор крэшей и ошибок, отладочные файлы и проверка
Статья: Крэши и ошибки
Разработчик подключает сбор сбоев и загружает файлы для их расшифровки. Это помогает получить понятное описание проблемы и найти ее причину.
#### Как настроить сбор
Сбор крэшей предусмотрен в 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-файл не был загружен, в отчетах по крэшам будет отображаться предупреждение о несимволизированных крэшах.

Чтобы их символизировать, загрузите отсутствующие 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**.

1. В интерфейсе iTunes Connect откройте страницу **Activity**.
2. Во вкладке **All Builds** выберите нужный номер сборки.
3. Нажмите **Download dSYM**.

Можно использовать 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)