# 面向开发人员:收集崩溃和错误、调试文件及验证 文章:崩溃和错误 开发人员连接故障收集并上传文件以进行解码。这有助于获得问题的清晰描述并找到其原因。 #### 如何配置收集 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 文件,崩溃报告将显示有关未符号化崩溃的警告。 ![警告](https://yastatic.net/s3/doc-binary/src/dev/appmetrica/zh/images/common/dsym-warning.png) 要对其进行符号化,请上传缺失的 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**按钮。 ![插图](https://yastatic.net/s3/doc-binary/src/dev/appmetrica/zh/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/zh/images/common/itunes-connect.png) 您可以使用构建期间生成的 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)