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.
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:
#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
#import <CorePlot/CPTScatterPlot.h>
#import "ScatterPlotContainer.h"
@implementation ScatterPlotContainer {
}
@end
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>
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.
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?
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.
Faites défiler vers le bas et vous avez des journaux comme, dans mon cas
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)
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 ??
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! :-)
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.
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.
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 /
La suppression des données dérivées et le nettoyage m'ont aidé
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 :(
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.
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.
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.
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) {
}
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>
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.
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.
J'avais accidentellement fait glisser des liens symboliques (alias) vers des fichiers sources dans le projet au lieu des fichiers réels.
J'ai eu cette erreur en raison d'un fichier manquant dans mon projet. Ajout de ce fichier à nouveau et voila tout a fonctionné.
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.
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.
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.
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
}
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
}
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.
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.
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.
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.
déplacer le fichier Bridge au niveau du projet résout mon problème.
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