如何将 Firebase 添加到 Today Extension iOS

How to add Firebase to Today Extension iOS

我需要能够在我的 Today View Extension 中使用 Firebase,但是我似乎无法导入 Firebase 模块。我认为这是因为我的 cocoa pods 文件中需要一个新目标,但我不确定如何执行此操作。

谢谢。

据我所知,小部件不允许使用某些 api,例如 firebase。小部件应该显示主应用程序通过 UserDefaults 提供的数据,例如

TodayViewExtensions(或小部件)可能只是非常轻量级的代码。

您必须将今天的扩展程序视为一个单独的应用程序(某种程度上)

在您的 firebase 项目仪表板中,您需要点击 "Add another app" 按钮。

select iOS 然后输入 TODAY EXTENSION

BUNDLE ID

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

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

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

终于在你的今天里面 viewcontroller 打电话 FirebaseApp.configure()

import FirebaseDatabase 
import FirebaseCore


override func viewDidLoad() {
    super.viewDidLoad()
    FirebaseApp.configure() 
}

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

要同步扩展程序和包含的应用程序,请参阅App Extension Programming Guide: Handling Common Scenarios or this reddit comment. 具体描述了这种情况。

步骤:

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

第 1 步。将包含应用程序的 GoogleService-Info.plist 复制到 Xcode

中的扩展中

第 2 步。将复制的 GoogleService-Info.plist 拖到 Xcode 到您的共享扩展中,然后

第 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

Entire Podfile of our project.

步骤 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()
        }
        /*************************/

        // ...
    }

Pod 问题修复

1) Still unable to import Firebase!

确保为项目中的所有目标安装 pods。要实现此目的,请在 Podfile 中使用 inherit! or abstract_target

使用 the official documentation 中的 abstract_target 的最简单示例:

abstract_target 'Networking' do
  pod 'AlamoFire'

  target 'Networking App 1'
  target 'Networking App 2'
end

对于 inherit!,参见

2) How do I achieve this on my existing app without messing things up?

  1. 删除PodfilePodfile.lockYourProject.xcworkspace

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

  3. 通过在 abstract_target 下分组或使用 inherit!

  4. 编辑 Podfile
  5. 问题pod install

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

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

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

这对我有用:

  1. 通过从 Github、

  2. 克隆我们的项目 repo 来清除所有内容
  3. 已删除

    • ~/Library/Developer/Xcode/DerivedData
    • ./Pods/
    • 播客文件
    • Podfile.lock
  4. 在控制台上发布pod init

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

  6. 在控制台上发布pod update

(下次估计不行了)