【问题标题】:Upgraded Firebase - Now Getting Swift Compile Error升级的 Firebase - 现在出现 Swift 编译错误
【发布时间】:2016-09-17 18:09:36
【问题描述】:

我昨天升级了 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重启,又担心上传到应用商店会遇到问题。

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

非常感谢您提供的任何见解!谢谢!

【问题讨论】:

  • 编译器产生“分段错误:11”?
  • 问题导航器显示我的应用程序名称,然后是一个显示“Swift 编译错误”的下拉菜单和一个显示“由于信号导致命令失败:分段错误:11”的下拉菜单。编译器似乎编译所有视图控制器,然后出现一个错误,开始于:MergeSwiftModule normal arm64
  • 我能够重新创建错误。每当我尝试在两个不同的视图控制器上引用数据库时都会创建错误。我在 ProfileTableView 控制器中使用“var ref:FIRDatabaseReference!”声明引用。然后在 viewWillAppear 方法中,我使用 ref = FIRDatabase.database().reference() 设置引用。当我在另一个视图控制器中执行相同操作时,将重新创建错误。一旦在程序中被提及两次,它就会出错。
  • 我也在我的测试目标中一致地得到了这个。即使我完全删除 FirebaseStorage pod,我也根本无法运行测试。请参阅我的回答,了解我为修复应用程序本身的错误所做的工作。

标签: ios xcode swift firebase


【解决方案1】:

我在使用 Firebase 时也遇到了这个问题。

Xcode 会抱怨特定的类。就像你的“ProfileTableViewController” 我为解决这个问题所做的是: 注释该类中所有与 Firebase 相关的导入 -> 清理 -> 构建(显然有一些错误) -> 取消注释 -> 清理 -> 构建成功

【讨论】:

    【解决方案2】:

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

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

    然后在终端中运行“pod update”。重新启动您的 Xcode 项目。

    在与分段错误 11 斗争了两天后,这为我做到了

    【讨论】:

      【解决方案3】:

      当我为setValue 显式设置完成块参数的类型时,出现了问题。

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          删除DerivedDataModuleCache,然后Clean&gt;Build 为我工作。

          【讨论】:

            【解决方案6】:

            我也因这个问题而苦恼了一段时间。 我尝试了 Eric Duffett 的答案,但没有运气。

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

            1. 从 Podfile 中移除 FirebaseAuth
            2. 使用 pod update 更新 pod
            3. their site(底部)下载 Firebase 框架
            4. 按照README文件在项目中手动导入FirebaseAuth(需要导入FirebaseAuth.framework和GoogleNetworkingUtilities.framework)
            5. 清理 - 构建并不再出现分段错误 11 错误

            希望这会对某人有所帮助。

            【讨论】:

            • 谢谢,这是我尝试更新 CocoaPods 和重构之后唯一对我有用的东西。
            【解决方案7】:

            这/真的让我发疯。

            此代码导致上述崩溃:

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

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

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

            花了好几个小时才弄明白。错误消息指向其他地方。这可能是我整个职业生涯中最令人沮丧的调试经历。

            【讨论】:

              【解决方案8】:

              我想通了!我的可可豆荚不是最新的。我一回去在终端安装了最新的 Cocoa Pods,然后更新了这个应用程序的 podfile,这个错误就消失了。

              流程:

              打开终端

                sudo gem install cocoapods
              

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

                open -a xcode podfile
              

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

              在终端

                pod update
              

              打开 .xcworkspace 文件,然后 ta da!

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-07-31
                相关资源
                最近更新 更多