Xcode 8“命令失败,因为信号:段错误:11”

8
我将我的Xcode升级到Xcode 8并接受了所有更新,但是我收到一个错误提示:"Command failed due to signal: Segmentation fault: 11"。请注意,我知道这个问题与此问题非常接近:

Xcode 7 compile error : "Command failed due to signal: Segmentation fault: 11"

另外,请注意我正在使用一个解析服务器,我怀疑它与此无关,但我想在这里提一下。但是这没有解决我的问题,有人遇到过这个问题/解决过吗?谢谢!

尝试使用 cmd+alt+k 清除构建缓存。 - Özgür Ersil
@ÖzgürErsil 我尝试了这个,但它返回了 - stephen D
2
这是由于您使用的第三方Pods引起的问题,请在清除构建缓存后尝试“pod update”。 - Özgür Ersil
当我的项目遇到大量错误并且无法处理时,这种情况经常发生。如其他地方所述,迁移助手不会为您完成所有工作,您可能需要修复新语法的代码中的许多问题。除了@Ozgur Ersil的建议外,您还可以在Swift编译器-自定义标志的其他标志部分中添加“-Xfrontend -debug-time-function-bodies”,它会告诉您每个代码部分编译所需的时间。除了字典和数组周围广为人知的问题之外,还要注意闭包周围的瓶颈。 - Marcus
5个回答

3

1
这似乎不是问题所在,我检查了我的代码,它看起来很好,甚至没有在特定行上出现错误,而是在尝试编译时出现错误。 - stephen D
只有在编译代码时我们才会遇到这个错误。但是,如果您在此之前解包了所有可选项,那么似乎不是这种情况。但是,您的项目中是否有Objective-C代码?随着新版Xcode的发布,一些Objective-C函数现在返回可选项,您在Xcode中看不到它们。 - mbachm
我在我的项目中只使用Swift,所以这不是问题。 - stephen D
不完全是我的问题,但也涉及到可选项。 - toiavalle

3

这是一个Xcode动态问题,但可以通过某种方式修改自己的代码来解决。我在将代码从Swift2.3迁移到Swift3.1时遇到了这个问题。

在我的情况下,错误出现在方法定义上,并且该方法作为@IBAction附加到UIButton上。

@IBAction func changeButtonTapped(_ sender: AnyObject) {
    // some code
}

将上述代码更改为以下代码,解决了我的段错误问题。
@IBAction func changeButtonTapped(_ sender: Any) {
    // some code
}

编辑1: 又出现了一种分段错误的情况。

这次是由于在更高的作用域中重新声明变量并在同一个if语句中使用导致的。 示例代码:

// 'var1' is defined in higher scope
func someFunction() {
    if let var2 = var1,
       let var1 = someValue {
        // some code
    }
}

Xcode搞混了要用哪个名叫'var1'的变量来定义var2。 把名称改成其他名称即可解决段错误。


0

最可能的原因是编码错误,XCode没有检测到,因为它内置的分析已经崩溃/跟不上。只需重新启动 XCode,就会显示您代码中的错误位置。


0
在我的情况下,错误发生在类似于以下代码的情况下:
class AClass {
    var url: String?

    func aMethod() {
        guard let urlString = url, let url = URL(string: urlString) else {
            // Use `url`
        }
    }
}

原因:

url 是一个可选的实例变量,我将其解包成自身,这似乎会导致 Swift 编译器崩溃。

定位问题:

有趣的是,这可能会给你一个提示,指出有问题的代码位于哪里(至少在我的情况下),Xcode 编辑器也会崩溃,当你编写代码时:

enter image description here

解决方案: 在我的情况下,我只需要将可选实例var解包到另一个变量中,而不是它本身(这本来就很愚蠢...)。例如:
class AClass {
    var url: String?

    func aMethod() {
        guard let urlString = url, let actualUrl = URL(string: urlString) else {
            // Use `actualUrl`
        }
    }
}

-1

有此错误的代码

let fileManager = FileManager.default
let fileAttributes = try! fileManager.attributesOfItem(atPath: OSWConfig.documentsPath.appendingPathComponent(folderName) as String) as NSDictionary

//below code cause the error

let createDate = fileAttributes.object(forKey: FileAttributeKey.creationDate)! as! NSDate

没有错误的正确代码

let keysList = fileAttributes.allKeys as! [FileAttributeKey]

let valuesList = fileAttributes.allValues

let indexCreateDate = keysList.index(of: FileAttributeKey.creationDate)! as Int

var createDate: NSDate!
if indexCreateDate >= 0 {
    createDate = valuesList[indexCreateDate] as! NSDate

}

这解决了我的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接