我需要能够在Today View Extension中使用Firebase,但我似乎无法导入Firebase模块。我想这是因为我需要在我的可可豆荚文件中有一个新目标,但我不确定如何做到这一点。
感谢。
答案 0 :(得分:12)
您必须将今天的扩展程序视为自己独立的应用程序(稍微)
在您的firebase项目信息中心中,您需要点击"添加另一个应用"按钮。
选择iOS,然后输入 TODAY EXTENSION
的 BUNDLE ID完成向导并下载生成的 GoogleService-Info.plist 文件
将plist文件添加到今日扩展程序的根文件夹
转到您的xcode项目,然后手动将 FirebaseCore.framework和FirebaseDatabase.framework 添加到今日推广
终于在今天今天的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 Scenarios或this reddit comment。 This Stackoverflow thread具体描述了这种情况。
<强>步骤强>:
GoogleService-Info.plist
复制到Xcode GoogleService-Info.plist
拖入Xcode进入您的共享扩展程序Podfile
pod install
)GoogleService-Info.plist
复制到Xcode中的扩展程序GoogleService-Info.plist
拖入Xcode进入您的共享扩展程序对我们来说,主要(即包含应用)是Access News
,共享扩展名为Access-News-Uploader
。
Podfile
# ...
target 'name-of-your-extension' do
use_frameworks!
pod 'Firebase/Core'
pod 'Firebase/Auth'
# etc.
end
pod install
)/* 1. Import Firebase */
/**********************/
import Firebase
/**********************/
class WhereverInYourExtension: WhateverController {
// ...
override func viewDidLoad() {
super.viewDidLoad()
/* 2. Configure Firebase */
/*************************/
if FirebaseApp.app() == nil {
FirebaseApp.configure()
}
/*************************/
// ...
}
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)如何在现有应用中实现此功能而不会搞砸?
删除Podfile
,Podfile.lock
和YourProject.xcworkspace
问题pod init
,它会逐一列出您现有的目标。
通过Podfile
下的分组或使用abstract_target
inherit!
问题pod install
将生成一个新的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.
这对我有用:
通过从Github克隆我们的项目回购来清除一切,
删除
在控制台上发出pod init
重新创建Podfile
(基本上是复制粘贴)
在控制台上发出pod update
(下次可能不会工作。)
答案 2 :(得分:-1)
据我所知,小部件不允许使用某些api,例如firebase。窗口小部件应该显示主应用程序通过 UserDefaults 提供的数据,例如
TodayViewExtensions(或小部件)可能只是代码非常轻。