Xcode 6编译的GM版本发布

28

我刚下载了Xcode 6的GM版本,但是它在编译时出现了以下错误:

Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1

有什么想法可以修复这个问题吗?


请查看这个链接。解决了我的问题 :) - Zidong
所有常见的答案都没有解决我的问题,我发现问题其实是非常不同的 - https://dev59.com/gV8e5IYBdhLWcg3wS465#27271734 - Kampai
21个回答

70

这个错误可能有很多原因,所以这只是一个调试提示。您可以尝试在命令行中使用xcodebuild。它将为您提供有关哪些文件是罪魁祸首的详细信息。

要执行此操作,请打开Terminal并转到您的项目文件夹。一旦到达那里,请键入

xcodebuild -project YourProject.xcodeproj -scheme YourScheme

或者如果您正在工作区

xcodebuild -workspace YourProject.xcworkspace -scheme YourScheme

你可能会看到很多消息弹出,但在输出的最后,你应该能看到导致崩溃的具体文件。回到XCode,进入这些文件并开始尝试一些Swift语法以查明问题所在。在我的情况下,这与setAttributeString函数有关,但我见过其他人遇到!和?的问题。

希望这能让你朝着正确的方向前进。


1
这帮助我找到了真正的问题。 - iTukker
只是一个补充说明:在我的情况下,这个错误弹出是因为我将 nil 发送给了一个可选的字符串参数。使用 "" 取而代之就可以消除这个错误。 - Joshua Kaden
1
我也发现这非常有帮助。应该被接受的答案! - Andy Poes
尝试项目/ContentOrganizer.swift:15:8: 错误:没有这个模块'Alamofire' import Alamofire ^ 这是我得到的。它在模拟器和我的手机上运行正常,但当我运行或进行命令行编译时出现问题。我尝试删除Alamofire然后它又被下一个导入的pod所干扰。有什么解决办法吗? - Esqarrouth
1
@Esq 我认为这是因为 Cocoapods 会在 xcodeproj 文件旁边做一些事情以成功编译,所以它找不到 Alamofire 模块。对我来说这个方法管用:xcodebuild -workspace MyProject.xcworkspace -scheme MyScheme。你需要告诉它编译你的工作区而不仅仅是项目。 - Chris
非常感谢,我本来以为要在我们庞大的项目中花费很长时间寻找错误原因! - Anton Tyutin

10

我必须将我的“优化级别”更改为无[-0none]。

目标 > 构建设置 > Swift编译器 > 优化级别。


2
我想提醒一下,有两个名为“优化级别(Optimization Level)”的设置,请确保更改的是 Swift 编译器部分下的那一个。我曾因此浪费了几个小时来解决我的问题。 - nalexn

7

我的情况有点不同,涉及到枚举和可选类型。为了简单起见,让我们定义

enum Animal {
    case Dog
    case Cat
}

func exampleAction(animal: Animal) {}

exampleAction(.Cat)

代码在没有参数的情况下可以正常运行。但是一旦我将参数设置为可选,错误就开始出现了。所以这段代码不起作用:

func exampleAction(animal: Animal?) {}

exampleAction(.Cat)

为了使其正常工作,我必须在方法调用中添加显式的枚举名称。因此,以下代码再次起作用:
exampleAction(Animal.Cat)

只是想补充一句,对于我来说,这是在一个普通类(而不是枚举)上的,像:myButton.setTitleColor(.grayColor(), forState: .Normal) 必须更改为使用 UIColor 类。 - Dam

3

我认为这种情况发生的原因有很多,我遇到的是这种情况,希望能对你有所帮助。

dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) ){ [weak self] in

        // ...
        dispatch_async(dispatch_get_main_queue()) { [weak self] in

            // ...
            return

        }
    }

在上面的代码中,只需删除调用捕获列表中的"[weak self]",就可以消除编译器错误。这对我很有效。
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) ){ [weak self] in

        // ...
        dispatch_async(dispatch_get_main_queue()) {

            // ...
            return

        }
    }

xCode版本是6.1.1。


2
很多人(包括我)都有这个问题,因为编译器进行了优化。 我不认为关闭优化是正确的解决方法 - 我希望我的代码经过优化后能够尽快运行。
手动重新运行xcodebuild没有任何好处,因为它也是没有进行优化的。
然而,错误屏幕给出了导致失败的swiftc命令。
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc -target arm64-apple-ios8.0 -incremental -module-name SpaceCats -O -sdk /Applic...

-O是优化标志。

我在项目目录中重新运行了整个命令(根据上面的xcodebuild建议),在所有细节中,我发现了下面的错误:

{
"kind": "finished",
"name": "compile",
"pid": 10682,
"output": "Bitcast requires both operands to be pointer or neither\n  %228 = bitcast i8* %227 to %VSs20UnsafeMutablePointer, !dbg !1322\nBitcast requires both operands to be pointer or neither\n  %324 = bitcast i8* %323 to %VSs20UnsafeMutablePointer, !dbg !1322\nBitcast requires both operands to be pointer or neither\n  %411 = bitcast i8* %410 to %VSs20UnsafeMutablePointer, !dbg !1322\nBitcast requires both operands to be pointer or neither\n  %498 = bitcast i8* %497 to %VSs20UnsafeMutablePointer, !dbg !1322\nLLVM ERROR: Broken function found, compilation aborted!\n",
"exit-status": 1
}

如果您想将其输出到文件而不是屏幕,请在末尾添加“ 2>filename”。

然后,我需要在文件中找到pid(10682),以查看它正在编译的内容。 我手动运行了该pid的命令,并为特定文件给出了错误。 然后就可以着手修复代码了。


好的答案,我们在尝试进行发布构建时遇到了这个问题。非发布构建运行良好(未经优化),然后切换到发布模式,swiftc失败,并出现错误。希望您也能在XCode中看到所有输出... - Kendall Helmstetter Gelner
我曾经被那个Swift编译器的错误困扰了好几天,但是我的朋友啊,这解救了我。如果有一天你需要住的地方,你可以无限期地在我的沙发上住下。谢谢。 - Julio_oa

2

我看到有很多原因。我的回答并不是一个通用的解决方案,只是提供了另一种导致该错误的情况。在我的情况下,是这样设置按钮标题的:

button!.setTitleColor(.whiteColor(), forState: UIControlState.Normal)

改为这样:

button!.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)

2

可能是相同的问题 XCode 6 GM中的Swift编译错误

我遇到了同样的问题,然后使用git checkout旧版本来查找导致问题的提交,并尝试找到关键问题代码。 我的关键问题代码类似于这个:

func afunc() {
    class AClass() {
    }
    let ac = AClass()
    //....
}

其他代码也可能会导致Swift优化出现同样的问题,但是Swift编译器并没有告诉你具体位置。这可能是苹果公司的一个bug。


1
实际上回溯并找出差异是解决问题的关键。在我的情况下,一个函数内部的结构体导致了程序崩溃。编译器很好,但仍然是一个晚期测试版 :-( - qwerty_so
@ThomasKilian 我也有同样的问题。这是我的代码:func base() -> Void { struct ColorStruct { var WHITE = "" init() { if let PP = delegate.PP { WHITE = PP.UI.Colors.WHITE } } } var COLOR = ColorStruct() } - Andrew
1
@AndrewAnthonyGerst Swift/XCode真的很糟糕。令人惊讶的是苹果用户有多么耐心。我每小时都在咒骂... - qwerty_so

2

在我的情况下,我更改了3个地方:

目标 > 构建设置 > Swift编译器 >

  • 优化级别。
    • 调试:无 [-Onone]
    • 发布:最快 [-O]
    • 发行版:最快 [-O]

当我只更改调试时,我会遇到“Source Kit崩溃”的错误...... 这些参数的组合对我来说非常好!


2

如果您正在使用早期版本的iOS系统中应该使用的某个API,那么您可能会遇到构建失败的问题。

例如:如果您使用UI_USER_INTERFACE_IDIOM()来识别设备类型而不是使用UIDevice.currentDevice().userInterfaceIdiom,那么您将在构建过程中遇到此错误,但没有任何提示。


如果你在命令行中使用xcodebuild,你可能会遇到这样的错误。 “全局变量初始化器类型与全局变量类型不匹配! %struct.class_t** @\01L_OBJC_CLASSLIST_REFERENCES$_" LLVM ERROR: 发现损坏的模块,编译被中止!” - evanchin

1
在我的情况下,这个错误是由于不正确的(UTF8).swift文件编码引起的;通过将文件内容复制粘贴到新文件中解决。

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