如何将Firebase添加到Today Extension iOS

Eli*_*Eli 9 ios cocoapods firebase swift today-extension

我需要能够在Today View Extension中使用Firebase,但我似乎无法导入Firebase模块.我想这是因为我需要在我的可可豆荚文件中有一个新目标,但我不知道如何做到这一点.

谢谢.

Cha*_*ris 12

你必须将今天的扩展视为自己独立的应用程序(有点)

在您的firebase项目仪表板中,您需要点击"添加另一个应用程序"按钮.

在此输入图像描述

选择iOS,然后输入您今日扩展BUNDLE ID

在此输入图像描述

完成向导并下载生成的GoogleService-Info.plist文件

将plist文件添加到Today Extension的根文件夹中

转到您的xcode项目,并手动将FirebaseCore.framework和FirebaseDatabase.framework添加到Today Extension

第1步:获取您的bundle id第2步:添加框架

终于在今天今天的viewcontroller调用FirebaseApp.configure()

import FirebaseDatabase 
import FirebaseCore


override func viewDidLoad() {
    super.viewDidLoad()
    FirebaseApp.configure() 
}
Run Code Online (Sandbox Code Playgroud)

  • 好的只是为了清除一些内容... 1)在您的Firebase控制台(https://console.firebase.google.com/)2)选择您现有的Firebase项目.3)然后,您正在为现有的Firebase项目添加"应用程序".4)现有Firebase项目中的所有"应用"都可以访问您的Firebase数据库(适用于您的现有Firebase项目).5)如果此解决方案适合您,请选择我的答案:-) (2认同)
  • 似乎需要检查 [FIRApp defaultApp] 是否已经不为空,以免发生应用程序已配置的崩溃 (2认同)

tor*_*tte 5

或无需在Firebase控制台上添加额外的应用程序,只需GoogleService-Info.plist稍作修改即可重用您的主项目(请参见下文)。启动时,必须在两个应用程序中以任何一种方式配置Firebase应用程序单例。

要同步扩展程序和包含的应用程序,请参阅《App Extension编程指南:处理常见场景》此reddit注释该Stackoverflow线程专门描述了这种情况。

步骤

  1. 将包含的应用程序复制GoogleService-Info.plist到Xcode的扩展程序中
  2. 将复制的GoogleService-Info.plistXcode拖到您的共享扩展名中,然后
  3. 将BUNDLE_ID更改为共享扩展目标的名称
  4. 将新目标添加到您的 Podfile
  5. 安装依赖项(pod install
  6. 在扩展程序中配置Firebase应用程序对象

步骤1.将包含应用程序的应用程序复制GoogleService-Info.plist到Xcode的扩展程序中

步骤2.将复制的GoogleService-Info.plistXcode拖到您的共享扩展名中,然后

步骤3.将BUNDLE_ID更改为共享扩展目标的名称

对我们而言,主要(即包含应用程序)是Access News,扩展名是Access-News-Uploader

在此处输入图片说明

在此处输入图片说明

步骤4.将新目标添加到您的 Podfile

# ...

target 'name-of-your-extension' do

  use_frameworks!

  pod 'Firebase/Core'
  pod 'Firebase/Auth'
  # etc.
end
Run Code Online (Sandbox Code Playgroud)

Podfile我们整个项目

步骤5.安装依赖项(pod install

步骤6.在扩展中配置Firebase应用程序对象

/* 1. Import Firebase */
/**********************/
import Firebase
/**********************/

class WhereverInYourExtension: WhateverController {

    // ...

    override func viewDidLoad() {
        super.viewDidLoad()

        /* 2. Configure Firebase */
        /*************************/
        if FirebaseApp.app() == nil {
            FirebaseApp.configure()
        }
        /*************************/

        // ...
    }
Run Code Online (Sandbox Code Playgroud)

播客问题修复

1)仍然无法导入Firebase!

确保为项目中的所有目标安装了Pod。为此inherit!abstract_target在您的Podfile中使用。

用最简单的例子abstract_target,从官方文档

abstract_target 'Networking' do
  pod 'AlamoFire'

  target 'Networking App 1'
  target 'Networking App 2'
end
Run Code Online (Sandbox Code Playgroud)

对于inherit!,请参阅此SO问答

2)如何在现有应用程序上做到这一点而又不搞乱呢?

  1. 删除PodfilePodfile.lock然后YourProject.xcworkspace

  2. 发行pod init,它将一一列出您现有的目标。

  3. Podfile通过分组abstract_target或使用来编辑inherit!

  4. 问题 pod install

YourProject.xcworkspace将生成一个新文件,如果使用此文件打开您的项目,则在General> 下Linked Frameworks and Libraries将显示已添加Firebase,并且可以从项目文件中将其导入。

(有关需要使用此清理方法的具体示例,请参见此SO线程。)

3) firebase 'sharedApplication' is unavailable: not available on iOS (App Extension) - Use view controller based solutions where appropriate instead.

这对我有用:

  1. 通过克隆来自Github的项目存储库,清除了所有内容,

  2. 已删除

    • 〜/库/开发人员/ Xcode / DerivedData
    • ./荚/
    • 播客文件
    • Podfile.lock
  3. 问题pod init在控制台上

  4. 重新创建Podfile(基本上是复制粘贴)

  5. 问题pod update在控制台上

(可能下次无法使用。)