iOS SDK 疑难解答
安装过程中的问题
- 在控制台中,查找消息-"App Center SDK 已成功配置" 的断言日志。 此消息表示已成功配置 SDK。
- 如果你正在使用 Cocoapods 在 iOS 应用中集成 App Center,并使用消息遇到错误
CocoaPods - Unable to find a specification for AppCenter,请运行pod repo update更新本地 Cocoapods 存储库,然后pod install再次运行。 - 如果你正在使用 CocoaPods 在 iOS 应用中集成 App Center,而项目编译使用消息时遇到错误,则
framework not found AppCenter.xcframework需要通过运行 (将) CocoaPods 重新安装到 lates 版本[sudo] gem install cocoapods。 - 如果要手动集成 SDK 二进制文件,请确保为项目启用了模块。
分析数据不会显示在门户中
请确保已正确集成 SDK 模块。
请确保与方法调用一起提供了正确的应用程序机密
start:withServices:。 您可以start:withServices:通过在门户中打开应用程序并导航到 入门 "页" 来复制这些代码。若要查看发送到后端的日志,请在应用程序中将日志级别更改为 " 详细 "。 然后,SDK 会在 控制台 中打印日志。 在 SDK 开始之前插入以下调用:
[MSACAppCenter setLogLevel:MSACLogLevelVerbose]AppCenter.logLevel = .verbose请确保 "App Center SDK 配置成功" 显示在 "日志 (中的" 信息 "日志级别) ,然后查看是否看到 HTTPS 请求日志。
确保你的设备处于联机状态。
有时,可能需要几分钟的时间才能在门户中显示日志。 如果出现这种情况,请等待一段时间。
若要检查 App Center 后端是否收到你的数据,请参阅 Analytics 服务中的 "日志流" 部分。 发送事件后应显示事件。
故障不显示在门户中
请确保已正确集成 SDK 模块。
请确保与方法调用一起提供了正确的应用程序机密
start:withServices:。 您可以start:withServices:通过在门户中打开应用程序并导航到 入门 "页" 来复制确切的代码。App Center 崩溃 将仅在应用重新启动后转发崩溃日志。 此外,如果附加到调试器,SDK 不会转发任何崩溃日志。 请确保在应用程序崩溃时未附加调试器。
若要查看发送到后端的日志,请在应用程序中将日志级别更改为 " 详细 "。 然后,SDK 会在 控制台 中打印日志。 在 SDK 开始之前插入以下调用:
[MSACAppCenter setLogLevel:MSACLogLevelVerbose]AppCenter.logLevel = .verbose请确保 "App Center SDK 配置成功" 显示在 "日志 (中的" 信息 "日志级别) ,然后查看是否看到 HTTPS 请求日志。
不要使用任何其他提供故障报告功能的库。 你的应用中只能集成一个崩溃报告 SDK。
确保你的设备处于联机状态。
有时,可能需要几分钟的时间才能在门户中显示日志。 如果出现这种情况,请等待一段时间。
检查 SDK 是否检测到下一个应用启动时出现故障。 可以调用 API 来检查应用程序在上一个会话中是否崩溃并显示警报。 或者,你可以扩展故障
didSucceedSendingErrorReport回调以查看是否已成功将其发送到服务器。若要检查 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中所述。
但是,App Center 将作为静态链接的共享库分发,该共享库包装在 "fat" 假框架中。 这意味着,SDK 在 编译时 (而不是在启动时)链接以获得更好的性能。 加载多个动态链接的共享库将耗费时间。
Apple 建议优化应用启动,使其在 WWDC 会话中不超过 400 ms。 它们专门建议通过动态共享库来实现此目标。 将适用于 iOS 的 App Center SDK 分发为静态链接的共享库遵循 Apple 的建议,以提供最佳性能和对包含 SDK 的应用的最小影响。
若要了解有关静态链接的共享库与动态链接的共享库的详细信息,请参阅本主题的 Apple 一般文档。 若要详细了解动态链接的共享库的性能影响,请阅读 Eric Horacek 的 博客文章。
为什么 SDK 二进制文件如此大? 我关心应用的大小
AppCenter 二进制文件作为 "fat" 框架分发,其中包含所有 iPhone 体系结构和 iPhone 模拟器的切片。 这就是示例 AppCenter 的原因是下载 10.5 MB。
SDK 二进制文件的编译大小将比 .framework 你在 Xcode 中添加到应用的更小。 另外,请记住,发布版本也将比调试版本更小。
为了说明这一点,我们使用 Xcode 9.2 创建了一个空的目标-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 数据的安全性。
若要检索任何敏感数据,需要提供在客户端生成的应用/用户令牌 。 无法使客户端上的数据完全安全。
可以通过使用环境变量将应用机密注入代码来提高应用的安全性。 这样,机密在代码中不可见。