ios - Firebase Crash pod 破坏了 iOS 上的设备旋转

标签 ios swift firebase firebase-crash-reporting

按照最佳实践指南配置 Firebase,并使用“Firebase/Crash”pod,在 Xcode 8.1 中使用针对 iOS 10.1 的 Swift 3 创建的干净 iOS 项目中中断设备旋转。

重现步骤

  1. 创建一个新的 iOS 项目(例如,使用 iOS 模板“Tabbed Application”)。
  2. 将“Firebase/Core”和“Firebase/Crash”pod 添加到您的 pod 文件中,安装这些 pod,然后打开为您的项目新建的工作区文件。
  3. 将相应的 GoogleService-Info.plist 文件添加到您的项目。
  4. 重写应用委托(delegate)中的 init() 以配置 Firebase,如下所示。
  5. 请注意,您的应用目标的部署信息已在“设备方向”下的“纵向”、“向左横向”和“向右横向”复选框打勾。
  6. 在模拟器中运行应用,并向左或向右旋转。

配置 Firebase

Firebase 应该在 AppDelegate.swift 中配置如下:

override init() {
    super.init()
    FIRApp.configure() // This line breaks rotation if "Firebase/Crash" is installed.
}

Firebase 的“best practices”iOS 指南指出,如果未通过覆盖应用程序委托(delegate)中的 init() 配置 Firebase,事情“可能会出错”。言外之意是在application(_:didFinishLaunchingWithOptions:)中配置Firebase是一个编程错误。但是,如果采用后一种方法,设备旋转将按预期运行。

Other SO answers还建议遵循 Firebase 的最佳实践指南。

问题

  1. 为什么以这种方式配置 Firebase 会破坏设备旋转?
  2. 如果我想按照最佳实践指南中描述的方式同时使用“Firebase/Crash”和“Firebase/Database”并启用离线持久性,那么在不中断设备轮换的情况下配置 Firebase 的合适方法是什么?

看起来 at least one other user遇到了同样的问题。

最佳答案

Firebase 支持人员建议为 iOS 配置 Firebase 的适当方法是在 application:didFinishLaunchingWithOptions 中:“这是一种正确的方法,您应该不会遇到任何问题。”

current documentation指出 Firebase 是“通常”使用这种方法配置的。

他们还建议,iOS 的“best practices”指南将在内部进行讨论,以确定它是否“仍然相关或需要更新”。

关于ios - Firebase Crash pod 破坏了 iOS 上的设备旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40449259/

相关文章:

ios - 让 iOS 在特定时间唤醒我的应用程序

ios - AFNetworking:如何在请求中设置Content-Type HTTP header ?

ios - 从 NSLocale.preferredLanguages 数组中删除区域代码

firebase - 在2020年3月1日之前切换到Play Referrer API-Google Play

javascript - 什么可以防止滥用 Firebase 的 createUserWithEmailAndPassword?

ios - 解析查询结果未添加(附加)到 iOS Swift 中的本地数组

ios - 如何在绘制多个 UIImage 时优化 CGContext 内存消耗?

swift - 通过部分来处理 UITableViewCell 中的单击 UISwitch - Swift

ios - 导航 Controller 委托(delegate)方法没有得到调用

java - 如何从 firebase 实时数据库检索列表?