MAUI 和 Xamarin SDK 故障排除

重要

Visual Studio App Center 计划于 2025 年 3 月 31 日停用。 虽然可以继续使用 Visual Studio App Center,直到它完全停用,但你可以考虑迁移到几个建议的替代方法。

详细了解支持时间线和替代方案。

收集详细日志

若要获取有关如何将日志级别调整为 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”的断言日志。 这会验证 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 分发。

Google Play 在添加 DistributPlay 后拒绝该应用程序

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

  • 确保在 Google Play Console 中所有发布组的所有版本中将 替换为 DistributeDistributePlay
  • 如果使用 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如果暴露,最大的风险是向应用发送错误数据,但不会影响数据的安全性。

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

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