【问题标题】:Unable to import Firebase into Swift Playground无法将 Firebase 导入 Swift Playground
【发布时间】:2020-04-11 08:31:52
【问题描述】:

希望这会找到你。

在过去几个痛苦的时间里,我一直在尝试找到一种方法将 Firebase 模块导入我的 Swift Playground,在我的工作区 FooWorkspace 内。在随后将 Firebase 导入我的 Playground 之前,我尝试了以下操作:

  1. 在我的项目 FooProjectPod 之外的 FooWorkspace 中离开 Playground,如图所示 here
  2. 创建一个框架 FooFramework 并在我的 Podfile 中指示将 Firebase pod 分配到 FooFramework,然后在我的 Playground 中导入 FooFramework,例如在this
  3. 将 Playground 留在我的 FooProject 中。

但是,所有这些都不起作用。我目前正在使用 cocoapods-1.8.4 和 XCode 版本 11.1 (11A1027)。

还有几点我也不确定。

  1. 我能够导入 FirebaseCore,但 Playground 中的自动完成功能无法正常工作,并且我无法像在我的项目中那样正常编码。
  2. 当我创建一个框架时,给出的选项不是 Cocoa-touch 框架,而只是框架。

我确实是 iOS 开发的新手,在现实生活中没有人讨论这个问题,所以我觉得过去一天我一直在兜圈子。非常感谢任何帮助!

编辑: 在@ryanwils 提供一些有用的建议后,我完全重新启动了我的 XCode,然后能够导入 FirebaseCore/FirebaseFirestore。但是,从 Firebase 调用任何函数都会产生错误。例如,当我调用Firestore.firestore() 时,它给了我一个错误

Couldn't lookup symbols: _OBJC_CLASS_$_FIRApp

谁能指出我正确的方向?我用谷歌搜索了一下,一些线程提到它无法看到我的 Pod/类,但如果我真的能够将 Firebase 导入我的游乐场,它不应该已经能够看到我的 Pod 了吗?谢谢!

【问题讨论】:

  • 您想要/需要游乐场是否有具体原因?否则我只会创建 iOS 应用程序以避免连接到 Playgrounds 的麻烦..
  • 我主要想测试一下我对 FireStore 查询的理解,而不是总是运行模拟(如果你是这么说的话)
  • 你是说模拟器?好吧,如果你有 iOS 游乐场,我敢打赌幕后会有模拟器。
  • 我按照上面的类似说明进行操作,并且能够正常工作。起初,自动完成对我也不起作用,但在 Playgrounds 中这种情况一直发生在我身上,甚至 UIKit API 也不会自动完成。我重新启动了 Xcode,突然它又回来了。你可以试一试吗?还值得注意的是,您可能需要拥有 import PlaygroundSupportPlaygroundPage.current.setNeedsIndefiniteExecution = true 以确保网络回调有足够的时间从 Firestore 返回。
  • 感谢@ryanwils 的建议!完全重新启动我的 XCode 后,我已经能够毫无问题地导入 FirebaseCore/FirebaseFirestore。但是,在尝试调用 Firestore.firestore() 之类的东西后,它给了我一个错误:error:Couldn't lookup symbols: _OBJC_CLASS_$_FIRApp。我已经编辑了我的问题以反映这一点。谢谢!

标签: ios swift xcode firebase


【解决方案1】:

(从评论跳到答案)

我能够通过两种方式解决这个问题。第一件事可能就足够了,但如果不是第二件事,就应该这样做。

  1. 编译工作区。尽管 Pod 在项目中,但框架尚未完全存在。编译可能足以触发事情。

如果这不起作用......

  1. 正如您最初在问题中提到的,创建一个新框架并添加 Firebase/Firestore 作为依赖项。我的 Podfile 最终看起来像:
target 'FirebasePlaygroundDemo' do
  use_frameworks!
  pod 'Firebase/Firestore'
end

target 'FirebaseDummy' do
  use_frameworks!
  pod 'Firebase/Firestore'
end

FirebaseDummy 是我新创建的框架的名称。然后,在操场上,我不得不import FirebaseDummy 以及 FirebaseCoreFirebaseFirestore

希望有帮助,如果没有,可以进一步提供帮助!

【讨论】:

  • 再次感谢!很抱歉,但相对于构建项目,我不完全了解您所说的构建工作区是什么意思(除非您是这个意思)。我用谷歌搜索,只能找到构建项目本身的说明,
  • 我尝试了添加框架的方法。但是,它导致了error: Execution was interrupted, reason: signal SIGABRT. The process has been left at the point where it was interrupted, use "thread return -x" to return to the state before expression evaluation. 的新错误。我现在有 0 条线索,因为游乐场没有调试区域。需要注意的一点是,当我添加框架时,我没有按照我看到的文章的建议嵌入到应用程序中。非常感谢!
  • 抱歉延迟 - 实际上可能是 Firebase 抛出异常。您是使用手动FirebaseOptions 实例并调用FirebaseApp.configure(with: customOptions) 还是尝试FirebaseApp.configure()?如果是后者,它可能会尝试查找 plist 但找不到,因此会引发异常。通常你会看到异常,但它没有在预期的情况下运行。
  • 在您的帮助下,我终于解决了我的项目中的问题,并发布在下面。非常感谢,新年快乐!
【解决方案2】:

非常感谢@ryanwils,我终于找到了如何在操场上成功运行 Firebase 代码。我们确实需要为此创建一个额外的框架。

这些是我在操场上成功运行代码所采取的步骤:

  1. 设置您的工作区,使 Playground 文件与您的 xcodeproj 文件处于同一级别。
  2. 按照@ryanwils 的说明,创建一个新框架并在您的 Podfile 中为新框架指定所需的 pod。我已将我的命名为 PlaygroundFramework,您将在下面的代码中看到。
  3. 在 Playground 文件的资源文件夹下,复制到您的 GoogleService-Info.plist,如下图所示:
  4. 在 Playground 中使用以下代码:
import UIKit
import PlaygroundSupport
import PlaygroundFramework // Your new framework name here
import FirebaseCore
import FirebaseFirestore
// ... other modules you need. Remember to build first!

let filePath = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist")!
let options = FirebaseOptions(contentsOfFile: filePath)
FirebaseApp.configure(options: options!)

// Your Firebase queries will work here now!

上述步骤还允许我从 podfile 中的各种 pod 运行代码。希望它适用于任何需要它的人,再次感谢@ryanwils!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 2014-11-29
    • 1970-01-01
    • 2016-03-31
    • 2019-08-24
    相关资源
    最近更新 更多