如何解决中止陷阱:6 错误 - xcode 12

问题描述

我们在 Xcode 12 中遇到了“abort trap 6”的问题。由于这个原因,应用程序没有使用 Xcode 12 运行。我们正在使用 swift 5 版本和 jsqmessageviewcontroller 目标 c 库。 在 Xcode 12 中出现以下错误

<unkNown>:0: error: Fatal error encountered while reading from module 'wwww'; please file a bug report with your project and the crash log
<unkNown>:0: note: module 'wwww' full misc version is '5.3.2(5.3.2)/Apple Swift version 5.3.2 (swiftlang-1200.0.45 clang-1200.0.32.28)'
top-level value not found
Cross-reference to module 'JSQMessagesViewController'
... JSQMessageMediaData
error: Abort trap: 6 (in target 'zapwww' from project 'zapwww')

如果有人有解决方案,请帮助我们。

解决方法

我在 Xcode 12.5.1 中遇到了同样的错误,这似乎是下一个测试版中已修复的错误。但是,似乎有几个问题可能会导致此错误。所以我的解决方案可能不起作用。

对我来说,这个问题非常具体,只发生在以下场景中:

  1. 调用返回可选 RealmObject(可能与您的情况不同)的方法。
  2. 返回的 RealmObject 已分配一个变量。
  3. 尝试使用 guard let 或如果 let 对新的安全解包变量使用相同名称来解包变量。

最简单的解决方法是使用不同的变量名或 直接安全地解包返回的对象,无需为其分配变量。

在我的情况下导致错误的示例:

class MyClass {

    func returnObject() -> Object? {
        return nil
    }

    func anyMethod() {

        let myObject = returnObject()

        guard let myObject = myObject else { return } // <-- works anywhere else but here.

    }
}

在我的情况下修复错误的相同示例:

class MyClass {

    func returnObject() -> Object? {
        return nil
    }

    func anyMethod() {

        let myObject = returnObject()

        guard let myNewObject = myObject else { return } // <-- Changed name of new variable here

    }
}

我已经看到人们对其他类型有这个问题,所以它不仅限于 RealmObject 类型。但是检查所有的守卫 let 或 if let 具有相同的变量名是一个好的开始。

我还看到其他人通过清理构建文件夹或删除包并重新安装来修复它。不过这对我没有帮助。