iOS SDK 故障排除

重要

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

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

安装过程中的问题

  1. 在控制台中,查找包含消息“已成功配置 App Center SDK”的断言日志。 该消息表示 SDK 配置成功。
  2. 如果使用 Cocoapods 将 App Center 集成到 iOS 应用中,并遇到错误消息 - CocoaPods - Unable to find a specification for AppCenter,请运行 pod repo update 以更新本地 Cocoapods 存储库,然后再次运行 pod install
  3. 如果使用 CocoaPods 将 App Center 集成到 iOS 应用中,并且项目编译时遇到错误消息 , framework not found AppCenter.xcframework 则需要更新 (通过运行 [sudo] gem install cocoapods) Cocoapods 重新安装到后期版本。
  4. 如果要手动集成 SDK 二进制文件,请确保为项目启用了模块。

分析数据未显示在门户中

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

  2. 请确保将正确的应用机密与方法调用一起包含在内 start:withServices: 。 可以通过在门户中打开应用并导航到“入门”页来复制确切start:withServices:的代码。

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

    [MSACAppCenter setLogLevel:MSACLogLevelVerbose]
    
    AppCenter.logLevel = .verbose
    

    确保“成功配置 App Center SDK”显示在日志 (信息日志级别) ,如果看到 HTTPS 请求日志,则检查。

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

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

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

崩溃未显示在门户中

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

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

  3. 仅当应用重启后,App Center 崩溃才会转发故障日志。 此外,如果已附加到调试器,SDK 不会转发任何崩溃日志。 确保应用崩溃时未附加调试器。

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

    [MSACAppCenter setLogLevel:MSACLogLevelVerbose]
    
    AppCenter.logLevel = .verbose
    

    确保“成功配置 App Center SDK”显示在日志 (信息日志级别) ,如果看到 HTTPS 请求日志,则检查。

  5. 请勿使用提供故障报告功能的任何其他库。 你的应用中只能集成一个崩溃报告 SDK。

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

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

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

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

提示用户进行更新的警报不包含字符串,而只包含其密钥

这意味着 AppCenterDistributeResources.bundle 未将 添加到项目中。 确保已将文件拖放到 Xcode 项目中,并显示在应用目标的 Copy Bundle Resources 生成阶段。 如果通过拖放添加了文件,则它应该会显示在那里 - Xcode 会自动为你执行。 如果文件在生成阶段缺失,请将其添加,以便将其编译到应用的捆绑包中。

如果使用 Cocoapods,它会自动处理资源。 尝试重新安装 Pod。

控制台中会显示指示无法打开数据库的消息

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

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

如果启用了应用内更新,它们将阻止自动化 UI 测试。 更新过程将尝试对 App Center 后端进行身份验证。 建议不要为 UI 测试目标启用 App Center 分发。

SDK 为何作为“静态库”分发

App Center SDK 的主要设计目标是使用 App Center 将应用的影响降到最低,并具有模块化 SDK。 这将导致 SDK 作为多个动态链接的共享库分发。

从历史上看,iOS 不支持动态链接共享库,但在 iOS 8 中添加,如 Landon Fuller 的这篇博客文章中所述。

但是,App Center 作为静态链接的共享库分发,该库包装在“胖”虚假框架中。 这意味着 SDK 在 编译时 链接,而不是在启动时链接,以提高性能。 加载多个动态链接共享库需要一定的时间。

Apple 建议优化应用启动,在 WWDC 会话中花费的时间不超过 400 毫秒。 他们特别推荐静态共享库,而不要使用动态共享库来实现此目标。 将适用于 iOS 的 App Center SDK 作为静态链接的共享库分发遵循 Apple 的建议,即提供最佳性能,并将对包含 SDK 的应用的影响降到最低。

若要了解有关静态链接共享库与动态链接共享库的详细信息,建议使用 Apple 有关该主题的常规文档

为什么 SDK 二进制文件这么大? 我担心应用的大小

AppCenter 二进制文件作为“fat”框架分发,其中包含所有 iPhone 体系结构和 iPhone 模拟器的切片。 这就是 AppCenter.framework 需要下载 10.5 MB 的原因。

SDK 二进制文件的编译大小将比 .framework 在 Xcode 中添加到应用中的 要小得多。 另请注意,发布版本也小于调试版本。

为了说明这一点,我们创建了一个具有 Xcode 9.2 的空 Objective-C 应用程序,向应用添加了 App Center 二进制文件,并将分布式发布版本添加到运行 iOS 11.3 的 iPhone 7。

我们在 未启用 Bitcode 的情况下 运行测试,并且未使用 应用精简。 你可以使用这些技术来进一步缩小应用的二进制大小。

以下数字可能会有所不同,并取决于生成设置,因此请将其视为粗略指南。 也就是说,将 App Center SDK 添加到应用对应用程序二进制文件的大小影响最小。

使用的 App Center 模块 导出的 IPA 大小 安装大小
无 (空白应用) 24 KB 132 KB
App Center 分析 120 KB 377 KB
App Center 崩溃 239 KB 705 KB
App Center 分发 163 KB 528 KB
所有 App Center 模块 314 KB 930 KB

保护 App Center 机密值

app_secret是应用的标识符,需要知道流量应用于哪个应用,并且不能用于检索或编辑现有数据。 app_secret如果你被公开,最大的风险是将错误数据发送到你的应用,但它不会影响数据的安全性。

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

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