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