Xcode 7 命令因信号而失败:非法指令 4

Posted

技术标签:

【中文标题】Xcode 7 命令因信号而失败:非法指令 4【英文标题】:Xcode 7 command failed due to signal: illegal instruction 4 【发布时间】:2015-06-13 17:52:40 【问题描述】:

我刚刚使用 Xcode 7 的迁移工具将项目从 Swift 1.2 迁移到 2。在修复了遗漏的错误等之后,一切都很好,除了一个错误,它甚至阻止我构建:由于信号导致命令失败:非法指令4.

我已经尝试了这些文章(Xcode 7 and Swift 2.0 : Command failed due to signal: Abort trap: 6 和 Command failed due to signal: Abort trap: 6)中的帮助,这些文章与我的问题不同,但仍然无法解决问题。

我已经清理了构建并删除了派生数据文件夹。我有最新的 CocoaPods 安装,Xcode 工具是 7.0,我的 Swift 编译优化是无。还有什么我想念的吗?

谢谢!

【问题讨论】:

我遇到了同样的问题,在我的情况下,我有两个类和一个协议:class A: B, Pclass B 有一个由protocol P 强制执行的属性。出于某种原因,在真正具有该属性的类中不包括协议会导致此错误。我刚刚让class B 包含协议并且错误消失了! 谢谢@dcestari,是否出现了帮助您找到此问题的构建错误?还是只是偶然的机会? 是的@bj-miller,但他们并不清楚,我只看到了与ref myAttribute(假设myAttribute是物业名称)和ref B类似的东西。 我明白了。我确实在构建错误中看到它指的是一个特定文件,该文件是 5 个子类的超类,因为它有一些在所有子类之间共享的方法。所以现在我正在重新观看面向协议的编程,看看我是否可以重写它;-) 感谢@dcestari 的回复 请在bugreport.apple.com 提交一个错误并包含崩溃日志,如果可能的话,包括项目或导致崩溃的简化案例;那么请在此处发布错误编号。 【参考方案1】:

所以在同事的帮助下找到了答案。我们在构建错误中找到了有问题的文件,但没有提供任何行。通过排除过程,我们发现它是在从可选字典中获取 JSON 字典([String : AnyObject],类型别名为 JSONDictionary)的结果中声明一个新常量的行。这是一行:

let objectsDictionary = maybeJSON?[key] as? JSONDictionary

将其更改为两个保护语句:

guard let goodJSON = maybeJSON as? JSONDictionary else  return ... 
guard let objectsDictionary = goodJSON[key] as? JSONDictionary else  return ... 

这一行在 Xcode 6.3.2 中工作,因为它只是提供一个可选值,但由于某种原因,Xcode 7 中的一些更改不喜欢这样。我希望这可以帮助遇到此问题的其他人。

【讨论】:

【参考方案2】:

“非法指令”仅表示您的二进制文件包含对您尝试运行代码的架构类型无效的指令。开始查看项目构建设置中的最低版本。

【讨论】:

最低版本设置为 7.0,即使更改为 8.0 或 9.0 仍然会导致相同的错误。 在为模拟器或设备构建时是否遇到错误? 两者。 ios 模拟器 8.1 和 9.0,以及设备(iOS 9 beta 上的 iPhone 5s)。构建阶段本身失败,我什至无法运行它。 有些可疑。我会查看您包含的库并评估其中是否有一些 rogs。 好主意。我将删除所有 pod 和对它们的引用并尝试一下。感谢您的提示,我会在今晚稍后回复。

以上是关于Xcode 7 命令因信号而失败:非法指令 4的主要内容,如果未能解决你的问题,请参考以下文章

Swift 命令因信号而失败:分段错误

MKMapViewDelegate 命令因信号而失败:分段错误:11

Swift 编译器错误命令因信号而失败:分段错误:11

由于信号导致命令失败:分段错误:11 Xcode 8.0

由于信号 9 Xcode 11 beta,编译命令失败

由于信号,命令失败:分段错误:11