iOS SDK 故障排除

重要

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

安装过程中的问题

  1. 在控制台中,查找包含消息“App Center SDK 已成功配置”的 Assert 日志。 该消息表示 SDK 已成功配置。
  2. 如果使用 Cocoapods 在 iOS 应用中集成 App Center,并遇到错误消息 - CocoaPods - Unable to find a specification for AppCenter请运行 pod repo update 以更新本地 Cocoapods 存储库,然后再次运行 pod install
  3. 如果您使用 CocoaPods 在 iOS 应用中集成 App Center,并在项目编译时遇到错误消息 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”(在 INFO 日志级别),然后检查是否看到 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”(在 INFO 日志级别),然后检查是否看到 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 Distribute。

为什么 SDK 作为“静态库”进行分发

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

但是,App Center 以静态链接的共享库形式进行发布,并包装在一个“fat”伪框架中。 这意味着 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
应用中心分析 120 KB 377 KB
App Center 崩溃 239 KB 705 KB
App Center Distribut 163 KB 528 KB
所有 App Center 模块 314 KB 930 KB

保护 App Center 机密值

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

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

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