Depuis Xcode 7 et Swift 2.0, j'obtiens l'erreur ci-dessus, comme dans la capture d'écran présentée ici:
Je n'ai aucune idée d'où cela vient, nettoyer et supprimer les données dérivées n'a pas fonctionné.
Y a-t-il quelqu'un d'autre qui rencontre ce problème?
projet:
cible:
J'ai le même problème avec tous les projets Xcode 6.3, j'ouvre dans Xcode 7.0. J'ai créé un nouveau projet, copié tous mes fichiers sources et ressources et tout a fonctionné sans cette erreur du compilateur. Je pensais que cela avait quelque chose à voir avec les paramètres du projet . Peut-être existe-t-il d'autres paramètres qui génèrent également des problèmes, mais pour moi, c'était le cas.
Dans mon cas
Erreur
override func observeValueForKeyPath(keyPath: (String!)?, ofObject object: (AnyObject!)?, change: ([NSObject : AnyObject]!)?, context: UnsafeMutablePointer<Void>)
Ok
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [NSObject : AnyObject]?, context: UnsafeMutablePointer<Void>)
Cela a fonctionné pour moi, alors essayez-le. J'ai eu cette erreur lors de la conversion du code de Swift 3 à Swift 4.
Allez simplement dans Projet> Cible> Paramètre de construction et recherchez "Compilateur Swift - Génération de code" et définissez le niveau d'optimisation sur "Aucune optimisation [-Onone]".
Dans mon cas,
Le compilateur me donnerait le message:
Incorrect number of arguments passed to called function!
%4 = call %Swift.type* @_T015SimplifiedCoder6StructVMa() #1, !dbg !3112
<unknown>:0: error: fatal error encountered during compilation; please
file a bug report with your project and the crash log
<unknown>:0: note: Broken function found, compilation aborted!
mais j'ai réalisé que j'avais raté un paramètre générique par défaut:
class Class<K> {
init<T: Protocol>(_ value: T) where T.Key == K {}
}
protocol Protocol {
associatedtype Key
static func getClass<NewKey>(_: NewKey.Type) -> Class<NewKey>
}
struct Struct<K>: Protocol {
typealias Key = K
static func getClass<NewKey>(_: NewKey.Type) -> Class<NewKey> {
let _self = Struct<NewKey>()
return Class(_self)
}
}
protocol CanGetClass {
associatedtype StructType: Protocol
}
extension CanGetClass {
func getClass<Key>(_: Key.Type) -> Class<Key> {
return StructType.getClass(Key.self)
}
}
struct R: CanGetClass {
typealias StructType = Struct
}
modifié:
typealias StructType = Struct
à:
typealias StructType = Struct<Int>
l'extension de CanGetClass a essayé d'appeler getClass sur un type incomplet.
Assurez-vous de ne pas implémenter de protocole privé dans l'extension de classe. La plupart du temps, il serait assez étrange d'avoir un protocole privé, mais pas nécessaire, selon ce que vous souhaitez encapsuler.
Quelque chose comme, dans le même fichier:
class C: ... {
}
extension C: P {
}
private protocol P: class {
}
Faites ceci et vous aurez sûrement Command failed due to signal: Abort trap: 6
Au lieu de cela, supprimez le modificateur private
du protocole et l'erreur est corrigée.
J'ai aussi eu cette erreur sur XCode 7 Beta 5. Après avoir nettoyé la construction, j'ai eu une autre erreur en disant qu'une de ma classe ne se conformait pas au protocole que je venais de changer. Après avoir résolu le problème, il se construit. Les modifications de protocole que j'ai apportées consistent à changer le type de paramètre d'une méthode de Int
à Int32
J'ai reçu ceci quand est-ce que
protocol ProtocolA {
associatedtype BType: ProtocolB
}
protocol ProtocolB {
associatedtype AType: ProtocolA
}
J'ai résolu ce problème avec ces étapes:
a couru 'pod deintegrate'
Faites un podfile comme ceci: plate-forme: ios, '8.0' use_frameworks!
a lancé 'pod install'
C'est ce qui a causé l'erreur pour moi.
Avant:
for (key,value) in hash{
count += value.count
}
Après:
for (_,value) in hash{
count += value.count
}
Cela n'aimait pas que cette clé ne soit jamais utilisée nulle part. Je ne sais pas pourquoi cela devrait provoquer l'échec de la construction.
Dans Xcode 9.3, j'ai réinstallé le module spécifique dans lequel des avertissements sont apparus et effacé à nouveau les données dérivées n. Cela a fonctionné pour moi :)
Dans mon cas, j'avais le protocole @objc avec des méthodes facultatives et lorsque j'ai appelé ses méthodes également dans la classe Swift, j'ai obtenu cette erreur. Après avoir supprimé le mot-clé facultatif des fonctions du protocole, l'erreur avait disparu.
avant (avec erreur):
@objc protocol SomeDelegate:NSObjectProtocol{
optional func someDelegateMethod()
}
class MySwiftClass{
func notifyMyDelegate(){
mydelegate?.someDelegateMethod?() //this line caused the error
}
}
après:
@objc protocol SomeDelegate:NSObjectProtocol{
func someDelegateMethod()
}
class MySwiftClass{
func notifyMyDelegate(){
mydelegate?.someDelegateMethod()
}
}
Dans mon cas, j'avais un private struct Constants
déclaré à la fois dans class A
et extension A
.
Cela devrait probablement donner une erreur, mais ce n’est pas le cas.
J'ai eu cette erreur en essayant d'exécuter des tests ..__ Pour le résoudre, j'ai mis ce script dans Terminal:
rm -rf ~/Library/Developer/Xcode/DerivedData
La suppression des données dérivées a résolu le problème
Je suis capable de reproduire cela simplement et de manière cohérente avec un tout nouveau projet créé dans Xcode 7.0 beta (7A120f). Notez que le problème est probablement plus large que l'exemple, mais il est reproductible à 100% pour moi en ajoutant une seule ligne à un nouveau projet. Ce problème semble également s’appliquer exclusivement à iOS, pas à OS X, du moins pour cet exemple. Ont soumis le rapport de bogue n ° 21376523 à Apple.
Créez un nouveau projet dans Xcode 7.0 (7A120f). Le type est "Jeu", la langue est "Swift", la technologie de jeu est "SceneKit".
Construire et exécuter avec les paramètres par défaut. Le projet se construit et fonctionne correctement dans le simulateur (vous verrez le modèle de vaisseau spatial 3D en rotation par défaut).
Ajoutez une seule propriété SCNVector3 à GameViewController.Swift, comme ceci:
class GameViewController: UIViewController {
var p = SCNVector3Zero
-> Produit "Abort trap: 6". Le projet ne sera plus compilé.
Remplacez la constante par un initialiseur vide.
class GameViewController: UIViewController {
var p = SCNVector3()
-> Même problème, "Abort trap: 6"
-> "Abort trap: 6" a disparu, le projet est à nouveau compilé et exécuté.
Changer "var" en "laisser".
class GameViewController: UIViewController {
let p = SCNVector3Zero
-> Compile et s'exécute.
Changez le type de propriété en SCNVector4 au lieu de SCNVector3.
class GameViewController: UIViewController {
var p = SCNVector4Zero
-> Compile et s'exécute.
EDIT: Ce problème est résolu dans Xcode 7.0 beta-2 (7A121l) si vous obtenez "Abort trap: 6" en raison de l’utilisation d’un type de vecteur float 3 (tel que SCNVector3). À partir des notes de publication:
• Un crash du compilateur lors de l’appel de fonctions C ou Objective-C prenant Les paramètres SIMD float3 ont été corrigés. (21294916)
Je n'ai pas essayé d'autres solutions. J'ai eu ce problème pour cette configuration:
func speacialAdd(_ num1: Int, to num2: Int){
func specialMultiply(_ digit1: Int, with digit2: Int = num2){ // SOURCE OF PROBLEM
print(digit2)
print(digit1)
}
specialMultiply(5)
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print(speacialAdd(5, to: 6))
}
}
Cette ligne est la source du problème. Le défaut pour un argument ne semble pas fonctionner pour une fonction imbriquée
func specialMultiply(_ digit1: Int, with digit2: Int = num2) // ERROR
Les solutions sont:
func specialMultiply(_ digit1: Int, with digit2: Int) // OK
func specialMultiply(_ digit1: Int, with digit2: Int = 6) // OK
FWIW En fait, j'ai d'abord écrit ceci dans une aire de jeu et j'ai eu une erreur différente:
L'exécution du terrain de jeu a échoué:
erreur: Impossible de rechercher les symboles:
__T013__lldb_expr_111speacialAddySi_Si2totF4num2L_Sifau
Pour moi, la cause de cette erreur était:
J'ai créé un fichier pour créer des extensions sur UIView. Dans ce fichier, j'ai créé un protocole privé nommé Foo
.
Puis j'ai fait:
extension UIView: Foo
Supprimer le privé du protocole a fait disparaître l'erreur.
Je suppose que c'est probablement un bug. Le compilateur devrait nous avertir du problème. De la même manière qu'il nous avertit que nous ne pouvons pas ajouter de conformité privée à des types, il devrait nous indiquer que la conformité devrait utiliser un protocole "public/interne".
J'ai eu ce message quand j'utilise do-try-catch dans un initialiseur Failable:
public init?() {
do {
...
super.init(superParam: try getParamForSuper())
...
} catch {
...
}
}
La compilation a réussi lorsque l'appel d'essai a été déplacé vers sa propre variable locale:
public init?() {
do {
...
let superParam = try getParamForSuper()
super.init(superParam: superParam)
...
} catch {
...
}
}
Dans mon cas, c’est en définissant une valeur sur un paramètre dans une fonction que cette erreur était à l'origine de l'erreur.
Avant:
public func comparableValidator<T: Comparable>(minValue : T? = nil, maxValue : T? = nil, value: T) -> Void {
if let min = minValue {
_assertFunc(min <= value, "\(value) must be at least \(min)")
}
if let max = maxValue {
_assertFunc(max >= value, "\(value) must be at most \(max)")
}
}
Après:
public func comparableValidator<T: Comparable>(minValue : T?, maxValue : T?, value: T) -> Void {
if let min = minValue {
_assertFunc(min <= value, "\(value) must be at least \(min)")
}
if let max = maxValue {
_assertFunc(max >= value, "\(value) must be at most \(max)")
}
}
pour moi .. J'ai modifié le contenu d'une fonction @objc comme ceci:
avant:
@objc func didConnectWithSession() {
context!.stream.disconnectAfterSending()
}
après:
@objc func didConnectWithSession() {
//context!.stream.disconnectAfterSending()
}
Cela a causé l'erreur. J'ai résolu en supprimant la fonction entière.
Dans mon cas, renommer plusieurs paramètres des méthodes init qui sont un protocole échoue à la compilation. Je le résous en le faisant un par un, je le compile après chaque changement.
J'avais le même problème et j'ai constaté que le problème était que j'avais changé le système de génération en "Nouveau système de génération" après avoir lu un article sur "Comment accélérer vos générations" (Ceci est l'article btw ici )
Donc, pour revenir au système de construction standard:
J'espère que cela aide quelqu'un et ne perdez pas des heures à essayer de comprendre pourquoi cela ne fonctionnait pas!
J'ai réussi à construire mon projet en réglant le niveau d'optimisation sur "Aucun" dans le menu "Compilateur Swift - Génération de code" dans les paramètres de cible (et non du projet). Voir la capture d'écran ci-dessous...
Cela ne devrait pas être une solution permanente car il fait plus que doubler la taille de l'ipa. Il devrait être possible de réactiver l'optimisation lorsque Xcode 7 sort de la version bêta.
Ok, dans mon cas c'était parce que j'avais une énumération imbriquée dans une classe générique. Ce qui est étrange, c’est que lorsque j’ai isolé le problème (dans BaseDao2), le compilateur m’a dit la bonne erreur, mais dans ma véritable implémentation de BaseDao (qui contient plus de choses), il jette le "piège 6".
Type 'DaoError2' nested in generic type 'BaseDao2' is not allowed
Quand j'ai eu ceci:
class BaseDao2<T>: InjectRestSession{
enum DaoError2: ErrorType{
case FAILED_RESPONSE(String)
case INVALID_RESULT(String)
case FAIL_TO_LIST, FAIL_TO_GET
}
func get() -> T?{
return nil
}
}
Quoi qu'il en soit, dans mon cas, je déplace le DaoError hors de la BaseDao et tout compilé. Quoi qu'il en soit, mon sentiment est que "piège 6" est ce que quelque chose ne peut pas compiler et le compilateur est devenu confus. En partant d'un cas simple et en ajoutant ce que vous pensez être à l'origine du problème, vous pouvez aider à identifier le problème en obtenant la bonne erreur de compilation. En d'autres mots, vous devez être doux avec le compilateur Swift.