如何将Firebase添加到Today Extension iOS

时间:2016-12-13 06:34:51

标签: ios swift firebase cocoapods today-extension

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

感谢。

3 个答案:

答案 0 :(得分:12)

您必须将今天的扩展程序视为自己独立的应用程序(稍微)

在您的firebase项目信息中心中,您需要点击"添加另一个应用"按钮。

enter image description here

选择iOS,然后输入 TODAY EXTENSION

BUNDLE ID

enter image description here

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

将plist文件添加到今日扩展程序的根文件夹

转到您的xcode项目,然后手动将 FirebaseCore.framework和FirebaseDatabase.framework 添加到今日推广

step 1 : get your bundle id step 2 : add frameworks

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

import FirebaseDatabase 
import FirebaseCore


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

答案 1 :(得分:3)

或者,如果没有在Firebase控制台上添加额外的应用,只需重新使用主项目的GoogleService-Info.plist并进行微小修改(请参阅下文)。 Firebase应用程序单例必须在启动时在两个应用程序中以任一方式配置。

要同步扩展程序和包含的应用,请参阅App Extension Programming Guide: Handling Common Scenariosthis reddit commentThis Stackoverflow thread具体描述了这种情况。

<强>步骤

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

    步骤2.将复制的GoogleService-Info.plist拖入Xcode进入您的共享扩展程序

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

    对我们来说,主要(即包含应用)是Access News,共享扩展名为Access-News-Uploader

    enter image description here

    enter image description here

    步骤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)仍然无法导入Firebase!

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

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

    abstract_target 'Networking' do
      pod 'AlamoFire'
    
      target 'Networking App 1'
      target 'Networking App 2'
    end
    

    对于inherit!,请参阅this SO question and answer

      

    2)如何在现有应用中实现此功能而不会搞砸?

    1. 删除PodfilePodfile.lockYourProject.xcworkspace

    2. 问题pod init,它会逐一列出您现有的目标。

    3. 通过Podfile下的分组或使用abstract_target

    4. 编辑inherit!
    5. 问题pod install

    6. 将生成一个新的YourProject.xcworkspace文件,如果您使用此项目打开您的项目,请在General&gt;下Linked Frameworks and Libraries它会显示已添加Firebase,可以从项目文件中导入。

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

        

      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
        • Podfile.lock
      3. 在控制台上发出pod init

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

      5. 在控制台上发出pod update

      6. (下次可能不会工作。)

答案 2 :(得分:-1)

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

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