Xcode 7编译错误: "由于信号错误导致命令失败:分段错误:11"

24

昨天我安装了官方的Xcode 7,当我尝试打开我的一个Swift项目时,出现了一个警告,说新的Xcode版本想要更新我的Swift代码(或类似的内容)。好的,我接受了,然后出现了"Command failed due to signal: Segmentation fault: 11"的编译错误(如果您想要关于此的详细信息,我可以写下整个错误文本)。有人遇到过相同的问题吗?

谢谢。

编辑

我回退到了Xcode 6.4,一切都没问题,没有编译错误。


@MichaelWang 错误日志不可读(相信我)。那么,我应该创建一个新项目吗? - Chirila Vasile
我遇到了相同的问题,但目前还没有解决方案。 - rekt0x
@m1nd 目前还没有解决方案,很多人都抱怨这个问题。为了您的最佳体验,请安装Xcode 6.4并愉快地编码。 - Chirila Vasile
你能贴一些你的代码吗?你有没有使用Parse的loadData方法或findObjectsInBackgroundWithBlock? - Steven Schafer
@StevenSchafer 我已经开发了一个完整的项目,所以我不知道你想让我粘贴哪些代码 :). 另外,我没有在任何地方使用 Parse。 - Chirila Vasile
显示剩余7条评论
25个回答

11

天啊,Xcode有个可怕的bug。看看这篇文章吧。http://blog.bellebethcooper.com/xcode-bug.html 它让我开心了。

变化看起来微不足道,但是实际上是这样的(在我的API客户端类中,我从API获取JSON数据):

我将这段代码改成了:

`let json = try? NSJSONSerialization.JSONObjectWithData(data, options: [])`

变为这样:

`let json = try? NSJSONSerialization.JSONObjectWithData(data, options: []) as! [String: AnyObject]`

这是我曾经遇到的最令人沮丧的调试体验之一,但我希望这篇文章能帮助到其他遇到同样问题的人。如果你通过谷歌搜索遇到了一个困扰你的bug,并且这篇文章并没有帮助到你,我很抱歉。我知道你正在经历什么。不要放弃!


1
我曾经遇到过处理JSON的问题,但是问题出在我使用了大量多级字典引用来引用数据。同样的代码也导致了语法高亮崩溃(通常是有问题的标志)。我当时写的类似这样的代码:funcCall(data!["address"]!["street_address"] as String, data!["address"]!["locality"] as String, 等等等等)。后来我只需删除访问数据时的多级字典引用,两个问题就都解决了。 - RowanPD
一个调试的专业技巧:检查变量名和命令是否过长。 - Murat Yasar

7

这表示您的代码中缺少一些Required方法/函数。
在我的情况下,我正在使用ObjectMapper库,在我的类中忘记包括required init()方法,这导致出现"Command failed due to signal: Segmentation fault: 11"错误。

required init?(_ map: Map) {

}

1
我遇到了完全相同的问题。 - Jasdeep Singh
确切地说,我也遇到了同样的问题。我正在实现一个结构体,但是我没有找到其他选择,只能改为类并在init中添加required。谢谢你的分享! - Flavio Kruger

6

请看其他警告信息。

我的情况指向了iOS9和GoogleAds的问题。请参见此处:https://developers.google.com/admob/ios/ios9

简短的答案是禁用构建设置ENABLE_BITCODE。

我的错误:

ld: '/pp/src/shared_js/libs/GoogleMobileAdsSdkiOS-7.3.1/GoogleMobileAds.framework/GoogleMobileAds(GADGestureIdUtil.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture armv7
clang: error: unable to execute command: Segmentation fault: 11
clang: error: linker command failed due to signal (use -v to see invocation)

这对我来说是正确的方向,但我必须重复几次。不清理构建...清理构建。在我的情况下有效。 - Edison

4

我在将不同的项目转换成Swift3.0时,经常遇到这个问题。

由于这个问题看起来比较动态,每个人都有自己的解决方案而没有通用答案。但是在这个问题中,主要问题是要确定需要处理的位置。

因此,我遵循以下步骤:

  • 确定导致错误的方法

    点击错误消息

enter image description here

  • 在这里,您将确定导致编译时错误的类

    enter image description here

在我的情况下,AppDelegate 是导致错误的类。

  • 要查找错误行,请浏览长错误描述的结尾。您会发现类似于以下代码:

    1. While emitting IR SIL function @_TFC9MyProject11AppDelegate21getNotificationDetailfGSqGVs10DictionaryVs11AnyHashableP___T_ for 'getNotificationDetail' at /Users/ABC/Documents/BitBucket/iOS/2016/Projects/MyProject/AppDelegate/AppDelegate.swift:153:5

在这里,153 是位于 AppDelegate.swift 中的代码行。

func getNotificationDetail(_ launchOptions : [AnyHashable: Any]?) {
    if launchOptions != nil {
        let dictLaunch = launchOptions! as NSDictionary
        NotificationCenter.default.addObserver(self, selector: #selector(AppDelegate.openRespectiveNotificationScreen), name: NSNotification.Name(rawValue: WebServiceKey.APPMANAGER_SERVICE_CALL_FINISH), object: nil)

        inactiveUserInfo  = dictLaunch.object(forKey: UIApplicationLaunchOptionsKey.remoteNotification) as? NSDictionary
    }
}

首先,在方法内注释掉所有代码并重新构建。然后逐行取消注释,直到找到生成错误的代码行。

找到准确的代码行之后,您可以轻松地修复它。

在我的代码中,我发现该方法的最后一行生成了错误。

因此,我用下面的代码替换它,并成功构建。

inactiveUserInfo  = dictLaunch[UIApplicationLaunchOptionsKey.remoteNotification] as? NSDictionary

所以最重要的是谨慎调试。 尝试这种方式,你肯定可以轻松解决错误。


3

首先,我建议仔细查看构建日志以找到出现问题的文件。在我的情况下,for循环中使用的可选值导致了构建过程中的分段错误。

for i in 0..<hoge?.count {

我按照以下方式修复了我的代码:
for i in 0..<hoge!.count {

我现在没有错误。 \(^o^)/

Xcode 7.3无法编译此代码,出现分段错误的错误。之前的版本可以。我指出这个问题是基于代码的,并且可以通过检查构建日志找到原因。 - Mitsuaki Ishimoto

2

仔细阅读调试信息。

我遇到了这个错误是因为在if语句中,我不小心使用了单个'='而不是双重'='。

if aString.characters.count = 2 {...}

仔细阅读调试信息。- 没错!虽然错误信息只是“由于信号而导致命令失败:分段错误:11”,但原因隐藏在折叠的日志消息中。奇怪的是Xcode没有以正确的方式显示它。 - brigadir

1
我在Xcode版本7.3(7D175)的Swift项目中遇到了编译错误。以下是情况:
  1. 在Swift类中声明"@objc protocol"
  2. 在另一个实现该协议的类中,有一个非可选方法未被实现

实现该方法解决了我的问题。这可能是人们面临此问题的原因之一。希望这可以帮助到你。


1
我出现了同样的错误,原因是:
 let stringB: String? = stringA.characters.count = 0 ? nil : stringA

解决方案是将其更改为:


 let stringB: String? = stringA.characters.count > 0 ? stringA : nil

也许这能帮助某些人...

我发现这种错误的语法可能会导致最初的错误。谢谢你提到了这个问题! - Chirila Vasile
5
在条件语句中,应使用“==”而不是“=”。 - Oscar Yuandinata
哦,我的天啊,看不到森林只看到树木了...谢谢奥斯卡。 - Manuel
只是为了记录,最近的解决方案将是: let stringB: String? = stringA.characters.count == 0 ? nil : stringA - Manuel

1
我遇到了同样的问题。Xcode 7.2.1。选择错误并展开日志,我可以在冗长的路径中找到编译错误。
请参考附图中“1.”后面的行。它引用了一个文件和一行代码。通过查看它,我找到了错误所在。
在我的情况下,我有一个无效的枚举分配,我将一些逻辑从结构体移动到了枚举中,并注入了这个错误:
我原来写成:
return .Success(dict: dict)

我应该有:

return .Success(dict)

Log error after selecting it in the Issue Navigator


1
对我来说,问题(XCode 7.3.1)出在对字典项使用+=运算符。
例如:
func test() {
    var myDict:[String:String] = [:]
    myDict["key"] = "pig"
    myDict["key"] += "dog"

    var myArray:[String] = []
    myArray.append("pig")
    myArray[0] += "dog"
 }

这会导致分段错误。移除myDict上的+=,一切都正常。

我知道这是一个 bug(字典引用可为空),但编译器不应该像这样崩溃。


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