【问题标题】:Swift macOS FirebaseSwift macOS Firebase
【发布时间】:2020-01-18 21:58:57
【问题描述】:

我有一个启用 Firebase 的 IOS 应用。
现在我正在尝试向这个项目添加一个 macOS swift 应用程序,但我不知道该怎么做。
(我知道可以选择将 IOS 应用程序移植到 macOS,但我想要两个具有不同功能的独立应用程序,一个用于 IOS,一个用于 macOS)

Firebase Admin 中没有添加 macOS 应用程序的选项(据我所知),因此我在 Firebase Admin 中创建了一个新的 IOS 应用程序并尝试使用 macOS 应用程序项目进行设置。 (很可能这是我整个问题的问题)

当我运行 macOS 项目时,我的 AppDelegate 中出现这些错误:

尚未配置默认 Firebase 应用。将[FIRApp configure];(Swift 中的FirebaseApp.configure())添加到您的应用程序初始化中。

引发了未捕获的异常

未能获取 FirebaseApp 实例。请在使用 Firestore 之前调用 FirebaseApp.configure()

由于未捕获的异常“FIRIllegalStateException”而终止应用程序,原因:“无法获取 FirebaseApp 实例。请在使用 Firestore 之前调用 FirebaseApp.configure()'

尽管我在applicationDidFinishLaunching 中使用了FirebaseApp.configure()
我还导入了每个 pod,但没有任何帮助。

pod 'Firebase'
pod 'Firebase/Core'
pod 'Firebase/Analytics'
pod 'Firebase/Auth'
pod 'FirebaseDatabase'
pod 'Firebase/ABTesting'
pod 'Firebase/Database'
pod 'Firebase/Firestore'
pod 'FirebaseFirestore'
pod 'Firebase/Functions'
pod 'Firebase/Messaging'
pod 'Firebase/RemoteConfig'
pod 'Firebase/Storage'

我的问题是我可能做错了什么?
还是 Firebase 不支持 macOS 应用?
如果是,那么我如何将现有的 Firebase IOS 项目与新的 macOS Swift 应用程序一起使用?

【问题讨论】:

    标签: ios swift macos firebase firebase-realtime-database


    【解决方案1】:

    Sipos Péter 的回答很好,这里有一些额外的提示。

    另一个答案中的 podfile 是正确的。但是,macOS 应用程序的加载顺序不同,因此您需要在顺序中更早地使用 Firebase 代码以确保稳定性。

    因此,AppDelegate 中不需要 firebase 代码。将该代码移动到主 viewControllers viewDidLoad 函数并创建一个类 var 以引用 Firebase。像这样:

    var ref: DatabaseReference!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        FirebaseApp.configure() //set up Firebase
    
        //a class reference to your firebase, This is optional but saves typing
        self.ref = Database.database().reference() 
    
        let version = Database.sdkVersion() //print out the sdk if needed
        print("Firebase Version \(version)") //just prints the current Firebase version
    
        self.authToFirebase() //your function to handle auth'ing this user
    
        //continue app setup
        self.myTableView.dataSource = self
        self.myTableView.delegate = self
    }
    

    【讨论】:

      【解决方案2】:

      有人在GitHub 中遇到了同样的问题。 我还被告知我的很多 pod 实际上都是 ios pod,所以我将我的 Podfile 更改为:

      pod 'FirebaseCore'
      pod 'FirebaseAuth'
      pod 'FirebaseDatabase'
      pod 'FirebaseStorage'
      

      我还将我的 AppDelegate 文件更改为:

      override init() {
          FirebaseApp.configure()
          Database.database().isPersistenceEnabled = true
      }
      
      func applicationDidFinishLaunching(_ aNotification: Notification) {
          Database.database().reference()
      }
      

      这似乎解决了我的问题(目前,我希望这是最终解决方案)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-26
        • 2018-01-26
        • 1970-01-01
        • 1970-01-01
        • 2021-04-04
        • 2017-07-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多