webentwicklung-frage-antwort-db.com.de

swift ist beim Kompilieren in Xcode mit Exitcode 1 fehlgeschlagen - möglicherweise im Zusammenhang mit Bridging-Headern

Ich habe ein Obj-C-Projekt, das ich zu Swift migrieren möchte. Ich habe mit verschiedenen Kursen Erfolg gehabt, aber kürzlich bin ich auf ein Thema gestoßen, das ich scheinbar nicht verstehen kann. Wenn ich versuche, meine aktuelle Codebasis zu kompilieren, erhalte ich Folgendes (SUPER UNHELPFUL FEHLERMELDUNG)

Der Befehl /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc ist mit dem Beendigungscode 1 fehlgeschlagen

enter image description here

Meine einzige Annahme ist, dass es irgendwie mit meinen Überbrückungsheatern zusammenhängt, aber Xcode gibt mir nicht genügend Informationen, um herauszufinden, ob dies tatsächlich der Fall ist. 

Ich verwende Cocoapods, um die CorePlot meinem Projekt hinzuzufügen. Ich versuche folgende Klasse nach Swift zu migrieren:

Obj-C-Klasse (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-Klasse (ScatterPlotContainer.m)

#import <CorePlot/CPTScatterPlot.h>
#import "ScatterPlotContainer.h"


@implementation ScatterPlotContainer {

}
@end

Schnelle Konvertierung

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;
}

Meine Überbrückungskopfdatei

#import <CorePlot/CPTScatterPlot.h>

Was ich bisher ausprobiert habe

Wenn ich #import <CorePlot/CPTScatterPlot.h> aus der Bridging-Header-Datei auskommentiere, wird in Swift ein Fehler angezeigt, da er nicht weiß, was CPTScatterPlot ist

Ich habe auch #import <CPTScatterPlot.h> ausprobiert, was auch nicht funktioniert hat. 

Gedanken

Das Einzige, was mir einfällt, ist vielleicht, weil ich eine Kakaoschote verwende. Es gibt eine Art Modulnamen, den ich hinzufügen muss. Die Fehlermeldung ist nicht wirklich nützlich. Hat jemand einen Vorschlag für einen Fehler, den ich gemacht habe, oder wie Sie eine aussagekräftigere Fehlermeldung erhalten, um herauszufinden, was los ist?

45
Jeef

Ich habe alle die gleiche Antwort gesagt, aber mein Problem wurde nicht gelöst. Ich habe herausgefunden, dass dieses Problem mit einem defekten Funktionsaufruf zusammenhängt.

Eine Funktionssyntax war nicht falsch, aber der Aufrufmechanismus war falsch.

Um den genauen Fehler für dieses Problem zu überprüfen, überprüfen Sie Folgendes:

Wählen Sie einen Ausgabenavigator aus.> Klicken Sie auf Fehler, um die Fehlerprotokolle anzuzeigen.  

Dadurch werden alle Detailprotokolle für diesen Fehler angezeigt.

enter image description here

Scrollen Sie nach unten und Sie haben Protokolle wie in meinem Fall

enter image description here

Wenn ich das hier lese, finde ich heraus, dass etwas mit Funktionsaufrufen nicht stimmt. Ich browse meinen Code und löste ihn auf. Below war korrekt und falscher Code.

Falsche Weg:

var region = MKCoordinateRegionMake(self.mapView.userLocation.coordinate, span)
// It will not shown error here but when you build project compiler shows error.

Richtiger Weg:

let region = MKCoordinateRegion(center: self.mapView.userLocation.coordinate, span: span)
43
Kampai

Ich bin gestern Abend auf dieses Thema gestoßen und nichts hat mein Problem gelöst ... Ich wollte gerade etwas sehr Schlimmes an meinem Laptop tun, als ich durch reines Glück sah, dass eine (1) -Datei eine Textverschlüsselung auf UTF hatte -16?!?! WTF ?? 

enter image description here

Dies war die letzte Datei, an der ich gearbeitet habe, und wahrscheinlich hat ein schlechter Schnitt/Einfügen einen fremden Charakter in die Arena "importiert". Ich habe den Code in dieser Datei in einen Texteditor eingefügt. Ich habe die Datei gelöscht, neu erstellt und meinen Code wieder eingefügt ... und voilà! es funktioniert. 

So tun Sie das oben, aber überprüfen Sie auch Ihre Dateikodierung! :-) 

7
Steve S.

Ich hatte die gleiche Fehlermeldung .. Was geholfen hat, war, die Optimierungsstufe in den Swift-Compilereinstellungen auf "Keine" zu setzen. Dies ist keine wirkliche Lösung für mich, und ich denke, das ist einer der vielen Fehler in der Swift Compiler.

4
heiko

Eine andere Lösung für dieses Problem besteht darin, zu überprüfen, dass Sie nicht über zwei oder mehr Dateien mit demselben Dateinamen verfügen. Es hat das Problem für mich gelöst.

2
Fawkes

Vielen Dank an @Kampai für die Ratschläge zum Durchgehen der Fehlermeldung. Ich las es durch, und einige Dateien fehlten: 

<unknown>:0: error: no such file or directory:  

Irgendwie wurden einige Dateien während eines Pull von GitHub entfernt. Die Dateien befinden sich im Verzeichnis, jedoch nicht im Xcode-Projekt. 

Klicken Sie mit der rechten Maustaste auf einen Ordner und klicken Sie auf "Dateien hinzufügen ...", um fehlende Dateien manuell zu Xcode hinzuzufügen. Das hat das Problem für mich behoben. 

Das ist mir schon mehrmals passiert, aber jetzt weiß ich, wie ich es reparieren kann. 

2
AVog

Das einfache Löschen abgeleiteter Daten und das Reinigen halfen mir

1

hatte mehr als 3 Stunden lang mit diesem Fehler eine schreckliche Zeit verbracht, indem er akribisch von Datei zu Datei ging und die Änderungen rückgängig machte und herausfand, ob diese Datei das Problem enthielt. Ich versuchte die erste Antwort, gab aber keine Antworten. Fand das Problem und es lag daran, dass ich eine nicht berechnete Eigenschaft hatte, die wie eine berechnete Eigenschaft einer Unterklasse bezeichnet wurde. Ich hoffe wirklich, dass der Debugger robuster wird, wenn diese Art von Fällen in zukünftigen Updates behandelt wird :( 

1
ImpactZero

Ich habe dieselbe Fehlermeldung erhalten, weil ich diesen Code in einen didSet-Block eingefügt habe:

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)
  }
}

Es dauerte eine Menge von Versuch/Irrtum, um dies zu jagen. Durch das Entfernen von super. konnte der Build fortgesetzt werden.

1
macu

Leider wird dieser Fehler oft durch einen Fehler im Swift-Compiler verursacht. Es ist nicht immer leicht, den Grund zu finden. Wenn die Bereinigung nicht funktioniert, empfehle ich Ihnen, den zuletzt geschriebenen Code zu kommentieren (ggf. sogar die gesamte Datei). Wenn Sie den zuletzt eingegebenen Code kommentieren, wird die Kompilierung normalerweise wiederhergestellt, und Sie erhalten aussagekräftigere Fehler. Von da an müssen Sie versuchen, den Code Stück für Stück zu kommentieren, bis Sie zu der Anweisung gelangen, die diesen Fehler verursacht hat. Der Swift-Compiler ist noch ziemlich jung und meldet gelegentlich seltsame Fehler. Diese Art von Fehlern ist völlig nutzlos, da sie den Entwicklern nicht nur helfen, sondern sie noch mehr verwirren. Ich würde Apple empfehlen, den Compiler zu ändern, um detailliertere Informationen zu erhalten und zu vermeiden, dass dieser nervige Fehler mehr erscheint.

0
Sergiob
NSString const *kGreenColor = @"#00C34E"; 

Ich hatte über Zeile in meiner Constant.h-Datei. das war nur für Präprozessoren gedacht. Das Entfernen dieser Zeile funktionierte für mich. 

0
user3693546

Ich hatte gerade diesen gleichen Fehler, das Problem war, dass ich eine Methode mit einem nicht optionalen Parameter überschrieben und den Parameter in der Überschreibung optional gemacht hatte. (der method-Parameter unten)

func logNetworkCallDurationForMethod(method:String, path:String, milliseconds: UInt) {

}

override func logNetworkCallDurationForMethod(method:String?, path:String, milliseconds: UInt) {

}
0
BTSmith

1) Identifizieren Sie die Datei dort, wo das Problem liegt. Sie können die Kompilierungsanweisung in die Konsole kopieren und einfügen. Der letzte Bildschirm enthält die Fehlerbeschreibung. Notieren Sie die PID-Nummer dort, wo das Problem erkannt wurde. Scrollen Sie dann nach oben und suchen Sie nach der PID und den zugehörigen Anweisungen. Pro PID wird eine Datei angezeigt.

2) Durchsuchen Sie die Datei und prüfen Sie alle Ihre letzten Änderungen. Wenn Sie git initialisiert haben, können Sie verwenden

git diff <file name>
0

In meinem Fall war es eine falsche Methode. Basisklasse:

open func send(_ onSuccess: @escaping ((SomeType) -> Void)) -> SomeType { }

Unterklasse: 

open override func send(_ onSuccess: ((SomeType) -> Void)) -> SomeType { }

Wie Sie sehen, fehlt @escaping. Der Swift3-Konverter in XCode8 berücksichtigt keine Vererbungsbeziehungen. Außerdem werden Typfehler nicht als Fehler markiert. 

0
Leo

Dies ist mir passiert und nachdem ich den Log in Issue Navigator gelesen hatte, stellte ich fest, dass ich zwei Swift-Dateien mit demselben Namen habe. Dadurch wurde das Problem erstellt, und der Build schlug fehl.

0
Umair Afzal

Ich hatte versehentlich symbolische Links (Aliase) in die Quelldateien in das Projekt anstatt in die eigentlichen Dateien gezogen.

0
AlexD

Ich habe diesen Fehler aufgrund einer fehlenden Datei in meinem Projekt erhalten. Diese Datei wieder hinzugefügt und voila alles hat funktioniert.

0
sandy

Ich bin heute in diese Ausgabe geraten. War das Ergebnis eines kürzlichen Pulls von git in einem Projekt, in dem eine Datei gelöscht wurde, aber in meinem lokalen Projekt nicht aktualisiert wurde.

 Path to missing file

Wenn Sie auf den Fehler klicken, wurde der Speicherort der "fehlenden" Datei angezeigt, die Referenz wurde im Projektnavigator gelöscht. Fehler behoben, bereinigt und erfolgreich kompiliert. 

0

In meinem Fall hatte ich eine Datei umbenannt. Nach dem Feststellen habe ich festgestellt, dass sich der Dateiname im Xcode-Projekt noch nicht geändert hat (nicht sicher, warum), die Datei wurde ausgegraut. Den Namen zu ändern und erneut zu begehen, war der Trick.

Daher müssen wir nach diesem Fehler Ausschau halten, wenn Sie mit Source Control Änderungen an Dateien vornehmen.

0
Vaibhav Singh

Dies ist mir passiert, als ich versuchte, auf eine Methode aus einem unabänderlichen Protokollargument zu verweisen (irrtümlicherweise dachte ich, dass das Mitglied eine Eigenschaft ist):

Eine Schnittstelle wie folgt haben:

public protocol NSValidatedUserInterfaceItem {
  func tag() -> Int
}

Zusammenbruch der Zusammenstellung

func validateUserInterfaceItem(anItem: NSValidatedUserInterfaceItem) -> Bool {
    print(anItem.tag) // oopsie, tag is a function
    return false
}

Zusammenstellungserfolg

func validateUserInterfaceItem(anItem: NSValidatedUserInterfaceItem) -> Bool {
  print(anItem.tag()) // this is cool for Swift
  return false
}
0
bithavoc

Ich hatte zweimal CoreData-Dateien generiert (und selbst hinzugefügt). Überprüfen Sie, ob die Dateien nicht doppelt vorhanden sind.

0
JSBach

Da alle anderen ihre gezeigt haben, zeige ich meine:

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
        }}
}

Unglaublicherweise wird dies nicht in Playground angezeigt, schlägt jedoch fehl, wenn es in einem Framework in Code eingefügt wird. Obwohl es sich um eine legale Syntax handelt (verwendet wurde, funktioniert immer noch auf Spielplätzen), scheint der Swift-Compiler pathPosition mit self. zu qualifizieren. Beachten Sie, dass es sich um (relativ) alten Code handelt, der zum Kompilieren verwendet wird. Möglicherweise ist in 6.1 ein Fehler aufgetreten.

Bearbeiten:

Ich fühle mich wie verrückt, aber es scheint, als ob hier ein komplexeres Problem vorliegt, bei dem der umgebende Code dieses Problem beeinflussen kann. Ich habe gesehen, wie die Dinge letzte Nacht kompiliert wurden, heute einige Änderungen an Code und Einstellungen vorgenommen haben und bei mir erneut fehlgeschlagen sind. Heute musste ich eine Menge wirklich dummes Programm hacken, damit es funktioniert:

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)
}}

Die eigentliche Fehlermeldung, die ich laut obigen hilfreichen Anweisungen erhielt, lautete:

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!

Ich habe Angst um morgen.

0
Chris Conover

In My Case war es ein Simulator-Fehler. Deinstalliere einfach die App vom Simulator und bereinige das Projekt und führe das Projekt aus.

0
MRizwan33

verschieben der Bridge-Datei auf Projektebene behebt mein Problem.

0
Nouman Ch

Was @Kampal angeht, muss ich immer noch herausfinden, wie viel in einem Funktionsaufruf angegeben werden muss. Zum Beispiel erfordert das Erstellen eines UIColor-Objekts manchmal die Angabe von UIColor und manchmal auch nicht. 

Diese beiden arbeiten:

playButton.backgroundColor = .darkGrayColor()
playButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)

Dies ergibt den exit code 1-Fehler beim Kompilieren ohne Debugger-Warnung. # Zeitsaugender Debug-Vortex

playButton.setTitleColor(.whiteColor(), forState: UIControlState.Normal)  

Ich habe also eine neue Regel: Wenn Sie eine Funktion verwenden, die mehr als einen Parameter benötigt, seien Sie explizit. 

Jetzt zurück zum Swift: AVOID THE VORTEX

0
Suz