swift在编译Xcode时退出代码1失败 – 可能与Bridging-Headers有关
我有一个Obj-C项目,我试图迁移到Swift。 我在各个class都成功了,但最近遇到了一个我似乎无法理解的问题。 当我尝试编译我当前的代码库时,我得到以下(超级不可靠的错误消息)
我唯一的假设是它与桥接头相关,但Xcode并没有给我足够的信息来确定这是否是真实的。
我正在使用Cocoapods
将Cocoapods
添加到我的项目中。 我正试图将下面的类迁移到swift:
Obj-c类(ScatterPlotContainer.h)
#import <Foundation/Foundation.h> @class CPTScatterPlot; @interface ScatterPlotContainer : NSObject @property (nonatomic, strong) CPTScatterPlot *ahrsAlt; @property (nonatomic, strong) CPTScatterPlot *calibration; @property (nonatomic, strong) CPTScatterPlot *coreAlt; @property (nonatomic, strong) CPTScatterPlot *pitch; @property (nonatomic, strong) CPTScatterPlot *roll; @property (nonatomic, strong) CPTScatterPlot *slip; @end
Obj-c类(ScatterPlotContainer.m)
#import <CorePlot/CPTScatterPlot.h> #import "ScatterPlotContainer.h" @implementation ScatterPlotContainer { } @end
Swift转换
import Foundation class ScatterPlotContainer : NSObject { public var ahrsAlt : CPTScatterPlot; public var calibration : CPTScatterPlot; public var coreAlt : CPTScatterPlot; public var pitch : CPTScatterPlot; public var roll : CPTScatterPlot; public var slip : CPTScatterPlot; }
我的桥接头文件
#import <CorePlot/CPTScatterPlot.h>
到目前为止,我已经尝试过了
当我注释掉桥接头文件中的#import <CorePlot/CPTScatterPlot.h>
– 我在swift中得到一个错误,因为它不知道什么CPTScatterPlot是
我也试过#import <CPTScatterPlot.h>
,它也没有工作。
思考
所以我唯一能想到的可能是因为我正在使用一个cocoa豆,有一些我需要添加的模块名称。 错误消息确实没有那么有用。 有没有人有一个关于我犯了一些错误的build议,或者如何得到一个更具描述性的错误信息来弄清楚发生了什么?
谢谢!
我做了同样的答案说,但我的问题没有解决。 我确实发现这个问题与function调用失败有关。
函数语法没有错,但是其调用机制是错误的。
要检查此问题的确切错误,请检查以下内容:
select问题导航器>点击错误将显示错误日志>在该select所有消息选项卡。
这将显示此错误的所有详细日志。
向下滚动,你的日志就像我的情况一样
所以,通过阅读这个我弄清楚函数调用有什么问题。 我浏览我的代码并解决它,下面是正确和错误的代码。
错误的方法:
var region = MKCoordinateRegionMake(self.mapView.userLocation.coordinate, span) // It will not shown error here but when you build project compiler shows error.
正确的方法:
let region = MKCoordinateRegion(center: self.mapView.userLocation.coordinate, span: span)
我昨天晚上遇到这个,上面没有解决我的问题。 当我看到所有纯粹的运气,一(1)个文件是文本编码设置为UTF-16时,我正准备在笔记本电脑上做一些非常糟糕的事情!!! WTF?
这是我正在处理的最后一个文件,可能是一个不好的剪切/粘贴将一个奇怪的angular色“导入”了舞台。 我在这个文件中将我的代码剪切/粘贴到一个裸骨文本编辑器中。 我删除了该文件,重新创build并粘贴了我的代码…和voilà! 这行得通。
所以做上面的,还要检查你的文件编码! 🙂
我有相同的错误信息。 什么帮助,是在swift编译器设置优化级别设置为无。 这对我来说并不是一个真正的解决scheme,我认为这是swift编译器中的许多错误之一。
谢谢@Kampai关于通过错误日志消息的build议。 我读完了,有些文件丢失了:
<unknown>:0: error: no such file or directory:
不知何故,从GitHub拉一些文件被删除。 这些文件在目录中,但不在Xcode项目中。
右键单击文件夹,然后单击“添加文件到…”手动添加缺less的文件到Xcode。 这为我解决了这个问题。
这发生在我身上几次,但现在我知道如何解决它\ o /
我在将这段代码包含在didSet块中时遇到了同样的错误:
didSet { // Test whether this view is currently visible to the user. if super.isViewLoaded() && (super.view.window != nil) { // (build fails even if this block is empty) } }
花了很多的尝试/错误来追捕这件事。 删除super.
允许构build继续。
在这个bug超过3个小时的过程中,经历了从文件到文件的仔细审查,并且恢复了这些修改,看看这个文件是否有问题。 我试了第一个答案,但没有给我任何答案。 发现问题,这是因为我有一个非计算属性命名为一个子类的计算属性相同。 我真的希望debugging器在将来的更新中处理这种情况变得更加健壮:(
此问题的另一个解决scheme是检查您没有2个或多个具有相同文件名的文件。 它解决了我的问题。
简单地删除派生的数据和清洁帮助了我
1)识别出现问题的文件。 您可以将编译指令复制并粘贴到控制台,最后一个屏幕将包含错误描述。 注意那个问题被识别出来的PID号码。 然后向上滚动,findPID和相关的指令 – 每个PID将有一个文件,所以你会发现你有问题的文件。
2)浏览一下文件,检查你所有的修改。 如果你有git初始化你可以使用
git diff <file name>
至于@Kampal,我还在努力弄清楚在函数调用中需要指定多less。 例如,创buildUIColor对象有时需要指定UIColor,有时不需要。
这两个工作:
playButton.backgroundColor = .darkGrayColor() playButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
这会在编译时产生exit code 1
错误,而不会产生任何debugging器警告。 #吸时间debugging漩涡
playButton.setTitleColor(.whiteColor(), forState: UIControlState.Normal)
所以我有一个新的规则:当使用一个函数接受多个参数时,应该是明确的。
现在回到swift: AVOID THE VORTEX
播放swift: AVOID THE VORTEX
由于其他人已经展示他们,我会告诉我的:
class Foo : UIView { var pathPosition:Double = 0.0 { didSet { pathPosition = min(max(0.0, pathPosition), 1.0) // crashes if this line is present self.pathPosition = min(max(0.0, pathPosition), 1.0) // but not here }} }
令人难以置信的是,这并没有出现在Playground中,但是当放在框架中的代码中却失败了。 虽然它是合法的语法(用于工作,仍然在工作场所),但Swift编译器似乎希望pathPosition能够self.
限定self.
。 请注意,这是(相对)旧的代码,并用于编译,也许在6.1中打破了。
编辑:
我觉得自己疯了,但是感觉这里有一个更复杂的问题,周围的代码会影响这个问题。 我昨天看到编译的东西,今天再次改变了一些代码和设置,并且再次失败了。 今天,我不得不破解一堆非常愚蠢的代码才能使它工作:
var pathPosition:Double = 0.0 { didSet { // bug: insane!! - have to clobber the value before resetting! let bugOldValue = pathPosition self.pathPosition = 1.0 // fails without this nonsensical line! self.pathPosition = min(max(0.0, bugOldValue), 1.0) }}
对于它的价值,我得到的实际的错误消息,根据上面的有用的说明是:
PHI node has multiple entries for the same basic block with different incoming values! %14 = phi double [ 1.000000e+00, %10 ], [ %11, %10 ], [ 1.000000e+00, %9 ], [ 0.000000e+00, %9 ], !dbg !4818 label %10 double 1.000000e+00 %11 = phi double [ %7, %entry ], !dbg !4815 LLVM ERROR: Broken function found, compilation aborted!
我害怕明天。
我只是有这个相同的错误,问题是,我已经重写了一个非可选参数的方法,并在覆盖使参数可选。 (下面的method
参数)
func logNetworkCallDurationForMethod(method:String, path:String, milliseconds: UInt) { } override func logNetworkCallDurationForMethod(method:String?, path:String, milliseconds: UInt) { }
实际上今天跑到这个问题上了。 是从一个项目删除一个文件的git最近拉的结果,但它并没有在我的本地项目更新。
点击错误提示“missing”文件的位置,在Project Navigator中删除它的引用。 修正了错误,干净了,编译成功了。
当我试图从一个无法修改的协议参数中引用一个方法时(这个错误,我认为这个成员是一个属性),这发生在我身上:
有一个界面如下:
public protocol NSValidatedUserInterfaceItem { func tag() -> Int }
编译崩溃
func validateUserInterfaceItem(anItem: NSValidatedUserInterfaceItem) -> Bool { print(anItem.tag) // oopsie, tag is a function return false }
编译成功
func validateUserInterfaceItem(anItem: NSValidatedUserInterfaceItem) -> Bool { print(anItem.tag()) // this is cool for swift return false }
这发生在我身上,阅读login问题导航器后,我发现我有两个同名的swift文件。 这是造成这个问题,我正在build设失败。
我得到了这个错误,因为我的项目中缺less一个文件。 再次添加这个文件,瞧一切工作。
在我的情况下,这是错误的方法覆盖。 基类:
open func send(_ onSuccess: @escaping ((SomeType) -> Void)) -> SomeType { }
子类:
open override func send(_ onSuccess: ((SomeType) -> Void)) -> SomeType { }
当你看到@escaping
丢失。 XCode8中的Swift3转换器不考虑inheritance关系,而且,这种types的错误不会被标记为错误。
在我的情况下,它是模拟器错误只是从模拟器卸载应用程序和干净的项目,然后运行项目。
我不小心将符号链接(别名)拖到项目源文件,而不是实际的文件。
我有两次CoreData生成的文件(并自己添加)。 检查文件不重复。
不幸的是,这个错误通常是由Swift编译器内部的一个小故障造成的。 find原因并不总是容易的。 如果清洁不起作用,我的build议是尝试评论你写的最后一个代码(如果需要,甚至整个文件)。 通常评论你input的最后一个代码将恢复编译,你会得到更有意义的错误。 从那里开始,你必须尝试逐个取消注释代码,直到遇到导致此错误的指令。 Swift编译器还很年轻,不时报告奇怪的错误。 这些错误是完全没用的,因为与其帮助开发者,他们只会更混淆。 我build议苹果改变编译器提供更详细的信息,避免出现这个恼人的错误再出现。
NSString const *kGreenColor = @"#00C34E";
我有我的Constant.h文件上面的行。 这只适用于预处理器。 删除该行为我工作。
将Bridge文件移动到项目级别解决了我的问题。
- “任何使用键控对象都应该被包装在React.addons.createFragment(object)中,然后再作为一个子对象传递”
- 最新的Dapper VS Entity Framework 6的性能考虑