web-dev-qa-db-fra.com

swift a échoué avec le code de sortie 1 lors de la compilation dans Xcode - éventuellement lié à Bridging-Headers

J'ai un projet Obj-C que j'essaie de migrer vers Swift. J'ai réussi avec divers cours, mais j'ai récemment rencontré un problème que je n'arrive pas à comprendre. Lorsque j'essaie de compiler ma base de code actuelle, le message suivant s'affiche: (SUPER UNHELPFUL ERROR MESSAGE)

La commande/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc a échoué avec le code de sortie 1.

enter image description here

Ma seule hypothèse est en quelque sorte liée à mes en-têtes de pontage, mais Xcode ne me fournit pas suffisamment d'informations pour déterminer si cela est réellement vrai. 

J'utilise Cocoapods pour ajouter CorePlot à mon projet. J'essaie de migrer la classe suivante vers Swift:

Classe 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

Classe Obj-c (ScatterPlotContainer.m)

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


@implementation ScatterPlotContainer {

}
@end

Conversion rapide

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

Mon fichier d'en-têtes de pontage

#import <CorePlot/CPTScatterPlot.h>

Ce que j'ai essayé jusqu'à présent

Lorsque je commente le #import <CorePlot/CPTScatterPlot.h> à partir du fichier d’entêtes Bridging - je reçois une erreur dans Swift car il ne sait pas ce que CPTScatterPlot est

J'ai aussi essayé #import <CPTScatterPlot.h> qui n'a pas fonctionné non plus. 

Pensées

Donc, la seule chose à laquelle je peux penser, c'est peut-être que parce que j'utilise une cabosse de cacao, il faut ajouter une sorte de nom de module. Le message d'erreur n'est vraiment pas utile. Quelqu'un a-t-il une suggestion au sujet d'une erreur flagrante que j'ai commise ou de la façon d'obtenir un message d'erreur plus descriptif pour comprendre ce qui se passe?

45
Jeef

J'ai fait la même chose toute la réponse dit mais le problème mien n'a pas été résolu. J'ai compris que le problème était lié à un appel de fonction interrompu.

Une syntaxe de fonction n'était pas fausse mais son mécanisme d'appel était faux.

Pour vérifier l'erreur exacte pour ce problème, vérifiez les points suivants:

Sélectionnez le navigateur d'émission> Cliquez sur l'erreur pour afficher les journaux des erreurs> Dans cet onglet Tous les messages.  

Cela montrera tous les journaux de détails pour cette erreur.

enter image description here

Faites défiler vers le bas et vous avez des journaux comme, dans mon cas

enter image description here

Ainsi, en lisant ceci, je découvre que quelque chose qui ne va pas avec l’appel de fonction. J'ai parcouru mon code et l'ai résolu, le code ci-dessous était correct et incorrect.

Fausse Route:

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

La bonne façon:

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

Je suis tombé dessus hier soir et rien de ce qui précède n’a résolu mon problème… Je m’étais sur le point de faire quelque chose de très mauvais avec mon ordinateur portable quand j’ai vu, par pure chance, que l’UN (1) fichier était codé au format UTF -16?!?! WTF ?? 

enter image description here

C'était le dernier fichier sur lequel je travaillais, et probablement, un mauvais "copier/coller" importait un personnage étrange dans l'arène. J'ai fait un copier/coller de mon code dans ce fichier dans un éditeur de texte simple. J'ai supprimé le fichier, le recréé et recollé mon code ... et voilà! ça marche. 

Faites ce qui précède, mais vérifiez également le codage de votre fichier! :-) 

7
Steve S.

J'avais le même message d'erreur… .. Ce qui m'a aidé, a été de définir le niveau d'optimisation dans les paramètres du compilateur Swift sur Aucun… .. Ce n'est pas vraiment une solution pour moi et je pense que c'est l'un des nombreux bugs dans Swift. compilateur.

4
heiko

Une autre solution à ce problème consiste à vérifier que vous ne possédez pas 2 fichiers ou plus avec les mêmes noms de fichier. Cela a résolu le problème pour moi.

2
Fawkes

Merci @Kampai pour les conseils fournis concernant le message du journal des erreurs. J'ai lu et il manquait des fichiers: 

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

D'une certaine manière, certains fichiers ont été supprimés lors d'une extraction de GitHub. Les fichiers sont dans le répertoire, mais pas dans le projet Xcode. 

Faites un clic droit sur un dossier et cliquez sur 'Ajouter des fichiers à ...' pour ajouter manuellement les fichiers manquants à Xcode. Cela a résolu le problème pour moi. 

Cela m'est déjà arrivé plusieurs fois, mais je sais maintenant comment y remédier.\O / 

2
AVog

La suppression des données dérivées et le nettoyage m'ont aidé

1
Andrey Chernukha

j'ai passé un temps horrible avec ce bogue pendant plus de 3 heures en allant méticuleusement de fichier à fichier, en annulant les modifications et en vérifiant si ce fichier contenait le problème. J'ai essayé la première réponse mais je ne me suis pas répondu. J'ai trouvé le problème et c'est parce que j'avais une propriété non calculée nommée de la même manière qu'une propriété calculée d'une sous-classe. J'espère vraiment que le débogueur deviendra plus robuste avec la gestion de ce type de cas dans les futures mises à jour :( 

1
ImpactZero

Je recevais la même erreur pour inclure ce code dans un bloc 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)
  }
}

Il a fallu beaucoup d’essais et d’erreurs pour trouver cette solution. Supprimer super. a permis à la construction de continuer.

1
macu

Malheureusement, cette erreur est souvent causée par un petit problème à l'intérieur du compilateur de Swift. Il n'est pas toujours facile de trouver la raison. Si le nettoyage ne fonctionne pas, ma suggestion est d'essayer de commenter le dernier code que vous avez écrit (même le fichier entier si nécessaire). Généralement, commenter le dernier code que vous avez entré restaurera la compilation et vous obtiendrez des erreurs plus significatives. A partir de là, vous devez essayer de décommenter le code pièce par pièce jusqu'à ce que vous obteniez l'instruction qui a provoqué cette erreur. Le compilateur Swift est encore assez jeune et rapporte de temps en temps des erreurs étranges. Ce type d'erreur est totalement inutile, car au lieu d'aider les développeurs, ils ne font que les confondre davantage. Je suggérerais à Apple de changer le compilateur pour donner des informations plus détaillées et éviter que cette erreur gênante n'apparaisse plus.

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

J'ai eu au-dessus de la ligne dans mon fichier Constant.h. qui était destiné aux préprocesseurs seulement. Supprimer cette ligne a fonctionné pour moi. 

0
user3693546

Je viens d'avoir cette même erreur, le problème était que j'avais redéfini une méthode avec un paramètre non facultatif et que j'avais rendu le paramètre facultatif dans la substitution. (le paramètre method ci-dessous)

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

}

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

}
0
BTSmith

1) Identifiez le fichier là où se trouve le problème. Vous pouvez copier et coller l’instruction de compilation sur la console et le dernier écran contiendra la description de l’erreur. Notez le nombre de pid où le problème a été identifié. Ensuite, faites défiler et trouvez l'instruction pid et connexe - il y aura un fichier par pid, de sorte que vous trouverez le fichier qui vous pose problème.

2) Parcourez le fichier et vérifiez toutes vos dernières modifications. Si vous avez initialisé git, vous pouvez utiliser

git diff <file name>
0
Alexander Volkov

Dans mon cas, c'était une méthode erronée. Classe de base:

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

Sous-classe: 

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

Comme vous le voyez, @escaping est manquant. Le convertisseur Swift3 dans XCode8 ne considère pas les relations d'héritage, de plus, les erreurs de type ne sont pas marquées comme des erreurs. 

0
Leo

Cela m'est arrivé et après avoir lu le navigateur de journalisation du journal, j'ai découvert que j'avais deux fichiers Swift du même nom. Cela créait le problème et la construction échouait.

0
Umair Afzal

J'avais accidentellement fait glisser des liens symboliques (alias) vers des fichiers sources dans le projet au lieu des fichiers réels.

0
AlexD

J'ai eu cette erreur en raison d'un fichier manquant dans mon projet. Ajout de ce fichier à nouveau et voila tout a fonctionné.

0
sandy

Couru dans cette question aujourd'hui en fait. Est-ce le résultat d'une extraction récente de git sur un projet dans lequel un fichier a été supprimé, mais il n'a pas été mis à jour dans mon projet local.

 Path to missing file

En cliquant sur l'erreur, l'emplacement du fichier "manquant" a été affiché, puis sa référence a été supprimée dans le navigateur de projet. Correction de l'erreur, nettoyage et compilation réussie. 

0
Christopher Larsen

Dans mon cas, j'avais renommé un fichier. Après avoir validé, j’ai constaté que le nom du fichier n’avait toujours pas changé dans le projet Xcode (je ne sais pas pourquoi), le fichier était grisé. Changer le nom et commettre à nouveau a fait l'affaire.

Nous devons donc garder un œil sur cette erreur lorsque vous modifiez des fichiers à l'aide du contrôle de source.

0
Vaibhav Singh

C'est ce qui m'est arrivé lorsque j'ai essayé de référencer une méthode à partir d'un argument de protocole immuable (par erreur, j'ai pensé que le membre était une propriété):

Avoir une interface comme suit:

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

Crash de compilation

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

Succès de la compilation

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

J'avais CoreData généré des fichiers deux fois (et ajouté moi-même). Vérifiez que les fichiers ne sont pas en double.

0
JSBach

Puisque tout le monde a montré le leur, je vais montrer le mien:

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

Incroyablement, cela ne se produit pas dans Playground, mais échoue lorsqu'il est placé dans du code dans un framework. Bien qu'il s'agisse d'une syntaxe légale (utilisée auparavant, elle fonctionne toujours dans un terrain de jeu), le compilateur Swift semble vouloir que pathPosition soit qualifié avec self.. Notez que c'est du code (relativement) ancien et utilisé pour compiler, peut-être quelque chose de cassé en 6.1.

Modifier:

J'ai l'impression de devenir fou, mais il me semble qu'un problème plus complexe se pose ici, où le code environnant peut avoir une incidence sur ce problème. J'ai vu les choses se compiler la nuit dernière, j'ai encore changé de code et de paramètres aujourd'hui, et cela a encore échoué. Aujourd'hui, j'ai dû pirater un tas de code vraiment stupide pour le faire fonctionner:

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

Pour ce que cela vaut, le message d'erreur que j'ai reçu, conformément aux instructions utiles ci-dessus, était le suivant:

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!

J'ai peur pour demain.

0
Chris Conover

Dans My Case, il s'agissait d'un bogue Simulator. Il suffit de désinstaller l'application du simulateur et de nettoyer le projet, puis d'exécuter le projet.

0
MRizwan33

déplacer le fichier Bridge au niveau du projet résout mon problème.

0
Nouman Ch

En ce qui concerne @Kampal, je n'arrive toujours pas à déterminer le montant à spécifier dans un appel de fonction. Par exemple, créer un objet UIColor nécessite parfois de spécifier UIColor, et parfois non. 

Ces deux fonctionnent:

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

Cela génère l'erreur exit code 1 lors de la compilation, sans aucun avertissement du débogueur. # vortex de débogage prenant du temps

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

J'ai donc une nouvelle règle: lorsque vous utilisez une fonction qui prend plus d'un paramètre, soyez explicite. 

Revenons maintenant à jouer Swift: AVOID THE VORTEX

0
Suz