由于信号:段错误:11编译错误,命令执行失败。

6
我花了很多时间尝试自己解决这个问题,并已经仔细检查了SO上提供的相同错误的答案。因此,以下是我已经排除的可能原因列表:
  1. 并没有像这里所指示的框架问题。我创建了另一个应用程序,并设置了相同的框架,一切正常。
  2. SwiftyJSON也没有问题,在测试项目中也能够正常工作。
  3. 代码中没有任何编译问题。
  4. 我使用比较工具分别查看了两个不同的project.pbxproj文件(来自我的原始项目和新的测试项目),以查找项目设置中的差异,但结果都相同。
  5. 我还比较了两个项目的构建命令选项,结果也相同。

当我转到报告导航器并查找每个未成功编译的文件时,我发现了一些奇怪的相关性:任何使用NSString API的文件都无法编译通过。为了证明这个假设,我找到了一些成功编译的文件,并添加了以下代码行:

let abc = NSString(string: "abc")

然后这个文件也停止编译了。
因此,对于某些文件,它会说将 String 类对象强制转换为 as NSString 是无效的,在某些地方 NSAttributedString/NSString 创建失败,在其他一些地方调用 comparerangeOfString 函数是不正确的。但是,当我复制粘贴所有导致 Segmentation fault 错误的代码片段到我的新项目中时,它们成功编译了。
当然,那个项目在一天前使用 Xcode 6 编译正常。
我不知道该怎么解决这些问题,任何帮助都非常有用。
更新:
我将无法编译的项目上传到了 GitHub 上。

1
如果已经导入“Foundation”,则 let abc = NSString(string: "abc") 可以单独编译。你能提供一个最小的展现这个问题的代码示例吗?- 无论如何,编译器分段错误都是一个 bug,应该向苹果公司报告。 - Martin R
@MartinR,正如我之前提到的,如果我创建新项目,任何列出的问题都会消失,所有编译都成功。这只发生在我的项目上,该项目最初是在Xcode 6中创建的。 - Azat
@MartinR 我清理了我的原始项目并上传到 GitHub,请检查。 - Azat
对我来说,这是一个包含测试数据数组的冗长函数。 - Chris Gunawardena
2个回答

1
在您的项目中的“MYHelpers.h/.m”文件(可能来自https://github.com/AlexandrGraschenkov/MYHelpers)中定义了一个带有一些实用方法的NSString类别。
#pragma mark - NSString+Utils

@interface NSString (Utils)
- (NSString *)trim; // trim whitespace characters with new line
- (NSString *):(NSString *)appendString;
- (NSURL *)toURL;
- (NSString *)URLEncodedString;
- (NSString *)URLDecodedString;
- (NSString *)lightURLEncodeString;
+ (BOOL)emailValidate:(NSString *)email;
- (CGSize)sizeForStringWithFont:(UIFont *)font constrainedToSize:(CGSize)size;
- (id)JSON;
@end

第二种方法。
- (NSString *):(NSString *)appendString;

有一个空选择器名称。在Objective-C中是允许的,你可以使用以下方法调用:

NSString *foobar = [@"foo" :@"bar"];

(我不知道这个方法是否故意使用空选择器名称定义-我不建议这样做。)
但它会导致Swift编译器崩溃。只有在Swift代码中的某个地方引用NSString时才会发生这种情况。 (编译器不应该崩溃,无论输入有多么错误,因此我建议在Apple报告错误)。
您可以将该方法重命名为
- (NSString *)appendString:(NSString *)appendString;

(如果您的项目不需要它)或者直接将其删除,这应该可以解决问题。

1
@Azat:是的,在我结束今天的工作之前,需要进行一些侦探工作 :) - Martin R

0

我在我的项目中也遇到了同样的问题。 请看我的截图 我的情况: 以下是我发现这个错误的场景。 1. 我在我的 Swift 项目中使用了我的 Objective-C 代码。 2. 基本上,我在我的代码中使用了 UIImage类别类。

此错误的原因: 就我所能判断的而言,编译器对某些位代码感到困惑,无法显示确切的原因。因此,它会抛出以下消息:

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

我的解决方案: 我只需在我的类别类头文件中导入#import <UIKit/UIKit.h>,我的错误立即得到解决。

很高兴能帮助你!


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