# 面向开发人员:收集崩溃和错误、调试文件及验证
文章:崩溃和错误
开发人员连接故障收集并上传文件以进行解码。这有助于获得问题的清晰描述并找到其原因。
#### 如何配置收集
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/zh/mobile-reports/crashes-and-errors)报告中分析它们。另请参阅[各平台的错误发送说明](#audit-about-crashes-and-errors-links)。
为了减小应用大小,代码会在发布构建期间被[优化](https://developer.android.com/studio/build/shrink-code)。
如果在 Android 应用构建期间压缩和混淆了代码,则崩溃信息会以混淆形式传输。为了从此类崩溃日志中提取数据进行分析,AppMetrica 会在服务器端执行反混淆。
为此,请将 mapping 文件或 SO 文件调试符号上传到 AppMetrica:在应用构建期间自动上传,或通过 Web 界面手动上传。
要发送文件,请连接 [AppMetrica Gradle Plugin](https://appmetrica.yandex.ru/docs/zh/sdk/android/analytics/android-gradle-plugin)。
如果您使用 [ProGuard](https://www.guardsquare.com/en/products/proguard/manual) 或 [R8](https://r8.googlesource.com/r8/),请上传 mapping 文件。如果您不压缩或混淆代码,请不要连接插件。
###### 了解更多
- [崩溃和错误报告](https://appmetrica.yandex.ru/docs/zh/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. 安装 `appmetrica` fastlane 插件:
```
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
```
可以在 AppMetrica 的**设置**部分获取 Post API key。它用于标识您的应用。
使用带导出的 [gym](https://docs.fastlane.tools/actions/gym/#gym) 操作来构建应用。如果您使用 Xcode 构建应用,应用在上传到 App Store Connect 后会被重新编译。那么构建期间生成的 dSYM 文件将无法使用。
3. 在 Xcode 中使用 `helper` 工具添加 dSYM 文件上传步骤。`helper` 工具从 3.8.0 版本开始包含在 AppMetrica SDK 中。它位于 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
通过 Web 界面
使用 helper
1. 安装 `appmetrica` fastlane 插件:
```
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. 点击**选择文件**按钮,上传包含 `app.dSYM` 或 `app` 目录的 ZIP 存档。
要使用插件上传,您需要连接 AppMetrica SDK 3.8.0 或更高版本。
要将缺失的 dSYM 文件上传到 AppMetrica,请在终端中运行命令:
```
helper -k
```
`file_path` 是 dSYM 文件或包含它们的文件夹的列表。
[helper 工具参考](#dsym--helper)。
###### helper 工具参考
`helper` 工具从 3.8.0 版本开始包含在 AppMetrica SDK 中。它位于 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/zh/mobile-reports/crashes-and-errors)
- [Apple 文档](https://developer.apple.com/library/archive/technotes/tn2151/_index.html)
可以在 AppMetrica 的**设置**部分获取 Post API key。它用于标识您的应用。
#### 如何检查结果
1. 在测试环境中重现受控错误或故障。
2. 打开[崩溃和错误](https://appmetrica.yandex.ru/docs/zh/mobile-reports/crashes-and-errors)报告,找到测试应用版本的数据。
3. 检查消息、设备和调用堆栈——与故障相关的函数序列。
4. 如果堆栈不可读,请检查是否存在专门针对此构建的调试文件。
崩溃按调用堆栈分组;错误分组取决于发送方式。详情——见[崩溃和错误文档](#crashes-developer)。
#### 在不同平台上发送错误
- [Android](https://appmetrica.yandex.ru/docs/zh/sdk/android/analytics/android-operations#send-report-error)
- [iOS](https://appmetrica.yandex.ru/docs/zh/sdk/ios/analytics/ios-operations#send-report-error)
- [Flutter](https://appmetrica.yandex.ru/docs/zh/sdk/flutter/analytics/flutter-operations#send-report-error)
- [React Native](https://appmetrica.yandex.ru/docs/zh/sdk/react-native/analytics/react-native-operations#send-report-error)
- [Unity](https://appmetrica.yandex.ru/docs/zh/sdk/unity/analytics/unity-operations#send-report-error)