GM 发布 Xcode 6 编译

Posted

技术标签:

【中文标题】GM 发布 Xcode 6 编译【英文标题】:GM release of Xcode 6 compile 【发布时间】:2014-09-10 23:01:40 【问题描述】:

我刚刚下载了 Xcode 6 的 GM 版本,它无法编译并出现此错误:

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

关于如何解决这个问题的任何想法?

【问题讨论】:

***.com/questions/10373016/… 请看这个。解决了我的问题:) 所有常见的答案都没有解决我的问题,我发现问题完全不同 -***.com/questions/25889723/… 【参考方案1】:

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

为此,请打开终端并转到您的项目文件夹。在那里,输入

xcodebuild -project YourProject.xcodeproj -scheme YourScheme

或者如果你在工作区工作

xcodebuild -workspace YourProject.xcworkspace -scheme YourScheme

您可能会看到很多消息弹出,但在输出的最后您应该会看到导致崩溃的特定文件。回到 XCode,进入这些文件并开始使用一些 Swift 语法,看看发生了什么。就我而言,它与 setAttributeString 函数有关,但我看到其他人对 !和 ?。

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

【讨论】:

这帮助我找到了真正的问题 只是一个附录:在我的例子中,这个错误正在弹出,因为我为一个可选的字符串参数发送 nil。使用“”代替了错误。 还发现这非常有用。应该是公认的答案! TryProjects/ContentOrganizer.swift:15:8: 错误:没有这样的模块 'Alamofire' 导入 Alamofire ^ 这就是我得到的。它确实在模拟器和我的手机中工作,但是当我运行或执行命令行编译时,这是我的问题。我尝试删除 alamofire,然后它被我导入的下一个 pod 所困扰。任何想法如何解决这个问题? @Esq 我认为这是因为 cocoapods 在 xcodeproj 文件旁边做了一些东西以成功编译,这就是它找不到 Alamofire 模块的原因。这对我有用:xcodebuild -workspace MyProject.xcworkspace -scheme MyScheme 你需要告诉它编译你的工作空间,而不仅仅是项目【参考方案2】:

我不得不将“优化级别”更改为无[-0none]

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

【讨论】:

我会警告说有两个名为“优化级别”的设置,请确保您正在更改 Swift 编译器部分下的那个。我浪费了几个小时来解决我的案子。【参考方案3】:

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

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) 必须更改为 myButton .setTitleColor(UIColor.grayColor(), forState: .Normal) 与 UIColor 类。【参考方案4】:

我觉得有很多原因,我遇到的就是这种情况,希望对你有帮助。

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

【讨论】:

【参考方案5】:

可能是同一个问题 Swift compile error in XCode 6 GM

我遇到了同样的问题,然后我用 git checkout old versions 查找是哪个commit导致了问题,并尝试找到关键问题代码。我的关键问题代码是这样的

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

其他代码可能会出现同样的问题,出现在 Swift 优化中,并且 swift 编译器不会告诉您确切的位置。这一定是苹果的一个错误。

【讨论】:

实际上回过头来发现不同之处。在我的情况下,它是一个 func 的本地结构,导致它崩溃。编译器很好,但它仍然是一个较晚的测试版:-( @ThomasKilian 我遇到了同样的问题。这是我的代码:func base() -> Void struct ColorStruct var WHITE = "" init() if let PP = delegate.PP WHITE = PP.UI.Colors.WHITE var COLOR = ColorStruct() @AndrewAnthonyGerst Swift/XCode 真的很烂。令人惊讶的是苹果用户的耐心。我坐在这里,每小时都在咒骂……【参考方案6】:

就我而言,我改变了 3 个地方:

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

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

当我只更改调试时,出现“源工具包崩溃......”之类的错误 这种参数组合,对我来说效果很好!

【讨论】:

【参考方案7】:

如果您正在使用一些应该在早期 ios 版本中使用的 API,您可能会遇到构建失败。 例如:如果你使用 UI_USER_INTERFACE_IDIOM() 而不是 UIDevice.currentDevice().userInterfaceIdiom 来识别设备类型,你会得到这个没有提示的构建错误。

【讨论】:

你在命令行中xcodebuild,你可能会得到这样的错误。 "全局变量初始化器类型与全局变量类型不匹配!%struct._class_t** @"\01L_OBJC_CLASSLIST_REFERENCES_$_" LLVM 错误:发现损坏的模块,编译中止!"【参考方案8】:

由于编译器的优化,很多人(包括我在内)都有这个问题。我不认为关闭优化是一个正确的解决方案 - 我希望我的代码经过优化以尽可能快地运行。

手动重新运行 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>文件名”。

然后我必须在文件中找到 pid (10682) 以查看它正在编译什么。我手动运行了该 pid 的命令,它给了我特定文件的错误。然后归结为修复代码。

【讨论】:

很好的答案,我们在尝试发布版本时遇到了这个问题。非发布版本工作得很好(未优化)然后切换到发布版本,swiftc 根据错误失败。希望你也能在 XCode 中看到所有这些输出...... 我被 swiftc 编译器错误困扰了好几天,我的朋友,这让我重新活了过来。如果有一天你需要一个地方住,你可以在我的沙发上随心所欲地迷恋。谢谢。【参考方案9】:

我看到了很多原因。我的回答不是一个通用的解决方案,而只是添加了另一个提供该错误的案例。就我而言,它正在设置一个按钮的标题,如下所示:

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

而不是这个:

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

【讨论】:

【参考方案10】:

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

【讨论】:

【参考方案11】:

进入文件夹:Users/user/Library/Developer/Xcode/DerivedData

并清除所有文件,

然后清理并分析,

这对我有用。

【讨论】:

【参考方案12】:

我有以下代码在 Release 中显示构建错误。

if myValue > 5  myValue = 5.0 
if myValue < 0  myValue = 0 

在 if 语句之间添加 else 可以解决问题:

if myValue > 5  myValue = 5.0 
else
if myValue < 0  myValue = 0 

演示:https://github.com/exchangegroup/build-error-demo

Xcode 版本 6.1 (6A1052d)。在调试中构建正常。已向 Apple Bug Reporter 提交工单。

【讨论】:

【参考方案13】:

只是把它放在那里:每当我将[unowned self] 放在一个块中的一个块中时,我都会收到此错误,如下所示:

lazy var someVar: SomeType = 
    self.successBlock = [unowned self] in
        // ...
    
()

解决方案是将[unowned self] 仅放在最顶层的块中。对于块内的块,似乎自动处理了对 self 的无主引用。

当然,我只能通过@Maxwell 的回答:https://***.com/a/26848000/855680首先找出麻烦的文件才能找到这个错误

【讨论】:

【参考方案14】:

在这里添加我的案例。每当我用 [unowned self] 标记闭包时,我都会收到描述的错误,但从不在闭包本身中引用 self。

例如:

        request.startWithSuccess( [unowned self] (req: CBRequest!, object: AnyObject!) -> Void in

            if let result = object["result"] as? [NSObject: AnyObject]
            
                popup.type = result["email"] == nil ? AuthPopupType.Signup : AuthPopupType.Login
            
            else
            
                println("WARNING: Malformed response for kCBCheckUniquenesPath request.")
            

            , failure:  (req: CBRequest!, err: NSError!) -> Void in

                println("ERROR: Failure response for kCBCheckUniquenesPath request.")
        )

【讨论】:

【参考方案15】:

按照@maxvel 的建议,我知道了 max() 和 min() 函数在发布模式下编译失败。我用我自己的函数替换了它,如下所示。

//Swift compiler seems to failing to compile default min and max functions in release 
//mode hence writing my own
//
func maximum<T: Comparable> (one: T, other: T) -> T 
    if one > other 
        return one
    
    else 
        return other
    


func minimum<T: Comparable> (one: T, other: T) -> T 
    if one < other 
        return one
    
    else 
        return other
    

【讨论】:

【参考方案16】:

改变

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!  

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

对其他人也这样做

【讨论】:

其他类似的函数是什么意思? 许多具有可选值的 Foundation 函数已更改。找出并更新它们 我已经从函数定义和我的同事中删除了所有强制解包选项(所有感叹号),但我仍然收到此错误。还有其他想法吗?【参考方案17】:

麦克斯韦的解决方案给你最接近的提示。

【讨论】:

【参考方案18】:

在 Xcode 6.4 中编译此 Swift 2.0 语法时遇到此错误:

print(string, appendNewline: true);

回到 Xcode 7,错误就消失了。

【讨论】:

【参考方案19】:

在我的例子中,Xcode 给出了错误,因为下面这行:

if UI_USER_INTERFACE_IDIOM() ==  UIUserInterfaceIdiom.Phone 


else 


为了解决我定义的错误:

enum UIUserInterfaceIdiom : Int 
    case Unspecified
    case Phone // iPhone and iPod touch style UI
    case Pad // iPad style UI

然后我像这样使用它:

 if UIDevice.currentDevice().userInterfaceIdiom == .Phone 


祝你好运!

【讨论】:

【参考方案20】:

我也遇到了这个错误。我按照@Maxwell 的建议在终端中运行了命令,发现错误在我的 GameViewController.swift 文件中。稍微挖掘了一下,发现它不喜欢某些自动生成的代码或代码与 Xcode 中某处的设置冲突

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask 

    if UIDevice.currentDevice().userInterfaceIdiom == .Phone 
        return .AllButUpsideDown
     else 
        return .All
    

一旦我删除了这个块,错误就消失了。

【讨论】:

【参考方案21】:

我认为真正的问题是错误太多,所以编译只告诉你一个混乱的错误代码。

但是你总是可以打开每个源代码文件,在那里你可以找到详细的错误信息和正确的建议。

祝你好运!

【讨论】:

以上是关于GM 发布 Xcode 6 编译的主要内容,如果未能解决你的问题,请参考以下文章

苹果向开发者发布 Xcode 6.3.2 GM 版,修复 Bug

XCode 6 GM 占用磁盘空间和内存

ScrollView 行为怪异(Xcode 11 GM 种子 - SwiftUI)

XCODE 6 GM 的符号崩溃

Xcode build - 停留在编译 Swift 源文件

Xcode 6 GM - CLLocationManager