升级的Firebase - 现在获得Swift编译错误

时间:2016-05-20 12:55:20

标签: ios xcode swift firebase

我昨天升级了Firebase,现在遇到了一个非常不寻常的问题。当我运行模拟器时,我得到一个快速的编译错误“Segmentation fault:11”这几行代码描述了错误,但它们绝对没有帮助。从错误中,我看到的唯一可能是提供线索的是底部。它说:

  1. While loading members for 'ProfileTableViewController' at <invalid loc>
  2. While deserializing decl #101 (PATTERN_BINDING_DECL)
  3. While deserializing decl #2 (VAR_DECL)

奇怪的是,我上面输入的错误并不一致。提到的视图控制器在我使用Firebase的三个视图控制器之间旋转。

为了尝试解决这个问题,我注释掉了ProfileTableViewController类中的所有代码,但是我仍然在引用该视图控制器时出错。视图控制器中运行的唯一代码是:

  import UIKit
  import Firebase
  import FirebaseDatabase

(我也在其他视图控制器中使用FirebaseAuth。)

解决问题的方法是点击“清理”,重新启动xcode,在启动时再次清理,然后运行程序。除非我对程序中的代码进行任何更改,否则一切都会正常工作。即使我所做的只是添加注释,错误也会重新出现。

我不想每次写几行代码时关闭xcode并重新启动,我担心上传到app store时会遇到问题。

我正在使用XCode 7.3.1,我的部署目标是9.3

非常感谢您给予的任何见解!谢谢!

8 个答案:

答案 0 :(得分:20)

我能够弄明白!我的可可豆荚不是最新的。我一回去并在终端中安装了最新的Cocoa Pod,然后更新了这个应用程序的podfile,这个错误就消失了。

过程:

打开终端

  sudo gem install cocoapods

(Cocoapods update)在终端导航到app文件夹,然后:

  open -a xcode podfile

如果需要,请在podfile中进行更改。我不需要做任何改变。保存并退出。

在终端

  pod update

打开.xcworkspace文件并打开!

答案 1 :(得分:4)

我也在这个问题上拔了一段时间。 我试过Eric Duffett的答案,但没有运气。

我发现这是 FirebaseAuth 的问题。我做的是这个:

  1. 从Podfile中删除 FirebaseAuth
  2. 使用 pod update
  3. 更新广告连播
  4. their site(位于底部)
  5. 下载Firebase框架
  6. 按照自述文件在项目中导入FirebaseAuth 手动(需要导入FirebaseAuth.framework和GoogleNetworkingUtilities.framework)
  7. 清洁 - 构建和不再分段错误11错误
  8. 希望这会对某人有所帮助。

答案 2 :(得分:3)

这真的让我疯狂。

此代码导致上述崩溃:

func ref() -> FIRStorageReference {
    return FIRStorage.storage().reference()
}

如果我只是在一个函数中使用它,一切正常:

FIRStorage.storage().reference().dataWithMaxSize(...

花了好几个小时来解决这个问题。错误消息指向其他位置。这可能是我整个职业生涯中最令人沮丧的调试经历。

答案 3 :(得分:3)

在您的podfile中,您可以尝试取消注释use_frameworks!

use_frameworks!
pod 'Firebase'
pod 'Firebase/Database'
pod 'Firebase/Auth'

然后运行“pod update&#39;在终端。重启你的Xcode项目。

在使用Segmentation fault 11进行了两天的挣扎之后,这对我来说是这样的。

答案 4 :(得分:1)

删除DerivedDataModuleCache,然后Clean>Build为我工作。

答案 5 :(得分:1)

我也遇到过Firebase这个问题。

Xcode会抱怨特定的课程。就像你的&#34; ProfileTableViewController&#34; 我做的是解决这个问题: 评论该类中所有与Firebase相关的导入 - &gt;清洁 - &gt;构建(显然有一些错误) - &gt;取消注释 - &gt;清洁 - &gt;建立成功

答案 6 :(得分:0)

我想出了一个适合我的不同解决方案。我有一些自定义函数可以将像FIRUser这样的Firebase特定变量返回到顶部没有import Firebaseimport FirebaseAuth的文件。我喜欢将我的数据服务方法保存在一个单独的文件中,所以我只是更改了函数,以便它们返回Strings,例如FIRUser.uid。这最终摆脱了编译器警告/崩溃的好处。

答案 7 :(得分:0)

当我明确设置setValue的完成块参数类型时,我遇到了问题。

FIRDatabase.database().reference(withPath: "test").childByAutoId().setValue("test1") { (error: Error?, ref: FIRDatabaseReference) in }

删除errorref的类型后,一切正常。