Swift macOS Firebase

Posted

技术标签:

【中文标题】Swift 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 应用程序一起使用?

【问题讨论】:

【参考方案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()

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

【讨论】:

以上是关于Swift macOS Firebase的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift (macOS) 中控制背景音乐

如何在 macOS 应用程序中使用 swift 播放视频?

Swift macOS Firebase

Swift 5 MacOS Image Resize 内存问题

如何使用 Swift 代码 (macOS) 发送电子邮件背景

查看MacOS中的Swift版本和SDK版本