MAUI 和 Xamarin SDK 故障排除

重要

Visual Studio App Center 于 2025 年 3 月 31 日停用,但分析和诊断功能除外,这些功能将继续受支持,直到 2026 年 6 月 30 日。 了解详细信息

收集详细日志

若要获取有关如何调整日志级别的 VERBOSE说明,请参阅 “其他 API” 部分。
可以在 “调试>Windows>输出 ”窗口中找到详细日志。

安装过程中的问题

  1. 对于 Xamarin.Forms 应用,请确保包安装在引用任何库的所有项目中。 否则你将会看到错误。
  2. 如果在为 Xamarin.iOS 生成时看到此错误: MTOUCH: Error MT3001: Could not AOT the assembly 'obj/**/Build/Microsoft.AppCenter.**.iOS.Bindings.dll' (MT3001) 需要将 Xamarin.iOS 组件更新到 版本 10.4.0.128 或更高版本。
  3. 如果在构建 Xamarin.iOS 时看到此错误:MTOUCH: Error MT5210: Native linking failed, undefined symbol: _OBJC_METACLASS_$_MS{SomeSdkClassName}. Please verify that all the necessary frameworks have been referenced and native libraries are properly linked in. (MT5210) 或类似错误(MT5211 代码含有类似消息提到 App Center),请务必在使用某个特定服务的 API 前调用 AppCenter.Start。 如果要调用 Start 但存在此问题,则需要将 Xamarin.iOS 组件更新到 版本 10.4.0.128 或更高版本。
  4. 在控制台中,查找包含消息“App Center SDK 已成功配置”的 Assert 日志。 这会验证是否已成功配置 SDK。

分析数据不会显示在门户中

  1. 请确保已正确集成 SDK 模块。

  2. 请确保在Start()方法调用中包含正确的应用机密。 可以通过在门户中打开应用并导航到“入门”页来复制确切 Start() 的代码。

  3. 若要查看发送到后端的日志,请在您的应用程序中将日志级别更改为 详细,然后 SDK 将在控制台中打印日志。 在启动 SDK 之前调用以下 API。

    AppCenter.LogLevel = LogLevel.Verbose;
    

    检查日志显示“App Center SDK 已成功配置”(在信息日志级别),然后检查是否看到 HTTPS 请求日志。

  4. 确保设备处于联机状态。

  5. 有时,日志可能需要几分钟才能显示在门户中。 如果情况如此,请等待一段时间。

  6. 若要检查 App Center 后端是否已收到数据,请转到 Analytics 服务中的“日志流”部分。 你的事件在发送后应显示。

崩溃不会显示在门户中

  1. 请确保已正确集成 SDK 模块。

  2. 请确保在Start()方法调用中包含正确的应用机密。 可以通过在门户中打开应用并导航到“入门”页来复制确切 Start() 的代码。

  3. 崩溃后重启应用。 App Center 崩溃会在重启后才转发崩溃日志。 此外,在 Xamarin.iOS 和 Xamarin.Mac 上,如果附加了调试器,SDK 将不会保存任何故障日志。 请确保在 iOS 应用崩溃时未附加调试器。 在 Xamarin.Android 上,可以在附加调试器时崩溃,但在遇到未处理的异常后需要继续执行。

  4. 若要查看发送到后端的日志,请在您的应用程序中将日志级别更改为 详细,然后 SDK 将在控制台中打印日志。 在启动 SDK 之前调用以下 API。

    AppCenter.LogLevel = LogLevel.Verbose;
    

    检查日志显示“App Center SDK 已成功配置”(在信息日志级别),然后检查是否看到 HTTPS 请求日志。

  5. 请勿使用提供崩溃报告功能的任何其他库,例如 Xamarin Insights 或 HockeyApp。 只能集成一个崩溃报告 SDK。

  6. 确保设备处于联机状态。

  7. 有时,日志可能需要几分钟才能显示在门户中。 如果情况如此,请等待一段时间。

  8. 如果要检查 SDK 是否在下一个应用启动时检测到崩溃,可以调用 API 来检查应用是否在上一个会话中崩溃并显示警报。 或者,可以扩展故障回调,以查看它是否已成功发送到服务器。

  9. 若要检查 App Center 后端是否收到崩溃,请转到 Analytics 服务中的“日志流”部分。 你的崩溃报告发送后应该会在那里显示。

分发和应用内更新会阻止我的自动化 UI 测试

如果运行的是自动化 UI 测试,启用的应用内更新将阻止自动化 UI 测试,因为它们将尝试针对 App Center 后端进行身份验证。 建议不要为 UI 测试启用 App Center Distribute。

添加 DistributePlay 后,Google Play 拒绝应用程序

Google Play 拒绝使用该 Distribute 模块的应用,因为它包含应用内更新实现。 为了避免这种情况,App Center SDK 包含 DistributePlay 主模块的存根模块。 它用模拟 Distribute API 的存根程序集替换了主程序集。 客户端应用程序中不需要进行其他更改。 DistributePlay 没有任何与应用内更新相关的代码。 如果将 Distribute 模块替换为 DistributePlay 后,您的应用仍然被拒绝,请按照以下步骤验证 Distribute 模块是否已正确替换:

  • 请确保在 Google Play Console 的所有发布组中将 Distribute 替换为 DistributePlay
  • 如果使用 Xamarin.Forms ,请确保将 DistributePlay 模块添加到共享和 Xamarin.Android 项目。
  • 验证输出文件是否不包含程序集 Microsoft.AppCenter.Distribute.Android.Bindings.dll 。 可以使用 APK 分析器 检查它。

控制台中关于无法在 iOS 上打开数据库的消息

App Center 使用 SQLite 在日志发送到后端之前保留日志。 如果要将应用程序与自己的 SQLite 库捆绑在一起,而不是使用 OS 提供的库,则可能在控制台 [AppCenter] ERROR: -[MSACDBStorage executeSelectionQuery:]/147 Failed to open database 中看到如下所示的错误,并且不会在后端看到任何分析或崩溃信息。 将 SDK 更新到版本 0.16.0 或更高版本。

保护 App Center 机密值

这是 app_secret 应用的标识符,需要知道流量应用于哪些应用,并且不能用于检索或编辑现有数据。 如果暴露了 app_secret 数据,最大的风险是向应用发送不良数据,但它不会对数据的安全性产生影响。

若要检索任何敏感数据,需要提供在客户端生成的应用/用户 令牌。 无法使客户端上的数据完全安全。

可以通过使用环境变量将应用机密注入代码来提高应用的安全性。 这样,密码在代码中不可见。