GM发布的Xcode 6编译
我刚刚下载了Xcode 6的GM版本,它不会编译这个错误:
Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1
有想法该怎么解决这个吗?
这个错误可能会有很多原因,所以这是一个debugging提示。 你可能想尝试在命令行中使用xcodebuild
。 它会给你详细的什么文件是罪魁祸首。
为此,打开terminal并转到您的项目文件夹。 一旦那里,input
xcodebuild -project YourProject.xcodeproj -scheme YourScheme
或者如果你在一个工作区工作
xcodebuild -workspace YourProject.xcworkspace -scheme YourScheme
您可能会看到很多消息popup,但在输出的最后,您应该看到导致崩溃的特定文件。 回到XCode,进入这些文件,并开始使用一些Swift语法来看看发生了什么。 在我的情况下,它必须与setAttributeString函数,但我见过其他人有问题! 和?
希望这会让你朝着正确的方向前进。
我不得不将我的“优化级别”更改为无[-0none]
目标>构build设置> Swift编译器>优化级别。
我的情况有点不同,它涉及枚举和选项。 为了简单让我们定义
enum Animal { case Dog case Cat } func exampleAction(animal: Animal) {} exampleAction(.Cat)
它会运行OK。 但是,只要我使参数可选,错误开始出现。 所以这段代码将不起作用:
func exampleAction(animal: Animal?) {} exampleAction(.Cat)
为了使它工作,我不得不在方法调用中添加显式的枚举名称。 所以下面的代码再次工作:
exampleAction(Animal.Cat)
我认为这是出于很多原因,我遇到的是这种情况,希望它可以帮助你。
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
可能是同样的问题在XCode 6 GM的Swift编译错误
我有同样的问题,然后我使用git checkout旧版本来查找哪个提交导致问题,并尝试find关键的问题代码。 我的关键问题代码是这样的
func afunc() { class AClass() { } let ac = AClass() //.... }
其他代码可能会出现同样的问题,发生在Swift优化中,而swift编译器不会告诉你确切的位置。 这肯定是Apple的一个bug。
在我的情况下,我改变了3个地方:
目标>构build设置> Swift编译器>
- 优化级别。
- debugging:无[-Onone]
- 分布:最快[-O]
- 发布:最快[-O]
当我改变只是debugging,我有错误,如“源工具包崩溃….”这个参数的组合,对我来说非常好!
如果您正在使用某些应在早期iOS版本中使用的API,则可能会造成构build失败。 例如:如果您使用的是UI_USER_INTERFACE_IDIOM()而不是UIDevice.currentDevice()。userInterfaceIdiom来识别设备types,那么您将得到此构build错误而不提示。
由于编译器的优化,很多人都有这个问题(包括我在内)。 我不考虑closures优化一个正确的决议 – 我希望我的代码优化运行尽可能快。
手动重新运行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
有优化标志。
我在项目目录中重新运行了这个命令(按照上面的xcodebuildbuild议),并在所有的细节中find了下面的错误:
{ "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>文件名”的结尾。
然后我不得不在文件中findpid(10682)来查看它正在编译的内容。 我手动运行了该命令的pid,它给了我特定文件的错误。 然后是修复代码。
我看到很多原因。 我的答案是不是一个通用的解决scheme,但只是增加了另一个案件,提供了这个错误。 在我的情况下,它是这样设置button的标题:
button!.setTitleColor(.whiteColor(), forState: UIControlState.Normal)
而不是这个:
button!.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
在我的情况下,这个错误是由不正确的(UTF8).swift文件编码引起的; 通过将文件内容复制粘贴到一个新文件来解决。
转到文件夹:用户/用户/图书馆/开发/ Xcode / DerivedData
并清除所有文件,
然后再清理和分析,
这对我有用。
我有以下代码显示版本中的生成错误。
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)。 在debugging中构build好。 提交给Apple Bug Reporter的票。
只要把它放在那里:每当我把[unowned self]
放在一个块内的一个块里,我就会得到这个错误,就像这样:
lazy var someVar: SomeType = { self.successBlock = {[unowned self] in // ... } }()
解决的办法是把[unowned self]
只放在最顶层的块。 似乎对self的无主引用是自动处理块内的块。
当然,我只能通过@ Maxwell的回答find这个麻烦的文件才能find这个错误: https : //stackoverflow.com/a/26848000/855680
在这里添加我的案例。 当我用[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.") })
按照@ maxvel的build议,我知道max()和min()函数在发布模式下编译失败。 我用下面的自己的函数replace它。
//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 } }
更改
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!
至
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
并像这样对其他人做同样的事情
麦克斯韦的解决scheme为您提供最接近的提示。
在Xcode 6.4中编译这个Swift 2.0语法时遇到这个错误:
print(string, appendNewline: true);
回到Xcode 7,错误消失了。
在我的情况下,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 { }
祝你好运 !
我也得到这个错误。 我按照@Maxwell的build议运行terminal命令,发现错误在我的GameViewController.swift文件中。 有点挖,发现它不喜欢一些自动生成的代码或代码与Xcode中的某个设置冲突
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { if UIDevice.currentDevice().userInterfaceIdiom == .Phone { return .AllButUpsideDown } else { return .All } }
只要我删除这个块,错误就消失了。
我认为真正的问题是错误太多,所以编译告诉你只有一个困惑的错误代码。
但是你可以随时打开每个源代码文件,在那里你可以find详细的错误信息和正确的build议。
祝你好运!