web-dev-qa-db-fra.com

Erreur de compilation Xcode 7: "La commande a échoué à cause du signal: Erreur de segmentation: 11"

Hier, j'ai installé le Xcode officiel 7 et lorsque j'ai essayé d'ouvrir l'un de mes projets Swift, une alerte est apparue indiquant que la nouvelle version de Xcode voulait mettre à jour mon code Swift (ou quelque chose du genre). Ok, j’ai accepté et après l’apparition de l’erreur de compilation "Command failed due to signal: Segmentation fault: 11" (si vous voulez des détails à ce sujet, je peux écrire tout le texte de l’erreur). Quelqu'un a-t-il le même problème?

Merci

Edité

J'ai réinstallé Xcode 6.4 et ça va, pas d'erreur de compilation.

23
Chirila Vasile

Omg, c'est un terrible bug de Xcode. Il suffit de lire ceci. http://blog.bellebethcooper.com/xcode-bug.html Cela m'a fait sourire.

Le changement était trompeur, mais voici ce que c'était (dans ma classe cliente API, où je récupère les données JSON de l'API):

J'ai changé ceci:

`let json = try? NSJSONSerialization.JSONObjectWithData(data, options: [])`

pour ça:

`let json = try? NSJSONSerialization.JSONObjectWithData(data, options: []) as! [String: AnyObject]`

C'est l'une des expériences de débogage les plus frustrantes de ma vie eu, mais j'espère que ce post pourrait aider quelqu'un d'autre qui a le même problème. Et si vous êtes arrivé ici en cherchant un insecte sur Google, vous avez des problèmes avec et cela ne vous a pas aidé, je suis désolé. Je sais exactement quoi vous traversez. N'abandonne pas!

11
Murat Yasar

Cela indique qu’une méthode Requiredfunc est absente de votre code . Dans mon cas, j’utilisais _/ObjectMapper et dans ma classe, j’avais oublié d’inclure la méthode required init() qui provoque ce "Command failed due to signal: Segmentation fault: 11".

required init?(_ map: Map) {

}
7
Muhammad Umair

Regardez l'autre avertissement que vous voyez autour. 

Mon cas m'a signalé un problème avec iOS9 et GoogleAds. .__ Voir ici: https://developers.google.com/admob/ios/ios9

La réponse courte était de désactiver le paramètre de construction ENABLE_BITCODE.

Mon erreur:

ld: '/pp/src/shared_js/libs/GoogleMobileAdsSdkiOS-7.3.1/GoogleMobileAds.framework/GoogleMobileAds(GADGestureIdUtil.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture armv7
clang: error: unable to execute command: Segmentation fault: 11
clang: error: linker command failed due to signal (use -v to see invocation)
6

J'ai souvent eu à faire face à ce problème lors de la conversion de divers projets en Swift3.0. 

Comme cette question semble dynamique, chacun a sa propre solution autre que toute réponse universelle . Mais dans cette question le problème principal est d'identifier le point sur lequel obtenir du travail .

  • Identifier la méthode qui est responsable de l'erreur

    Cliquez sur le message d'erreur

 enter image description here

  • Ici, vous identifierez la classe qui est responsable de l’erreur de générer une erreur de compilation Time

     enter image description here

Dans mon cas, AppDelegate est responsable.

  • Pour trouver la ligne d'erreur, aller à la fin de la longue description de l'erreur. Vous trouverez du code comme ci-dessous:

    1. While emitting IR SIL function @_TFC9MyProject11AppDelegate21getNotificationDetailfGSqGVs10DictionaryVs11AnyHashableP___T_ for 'getNotificationDetail' at /Users/ABC/Documents/BitBucket/iOS/2016/Projects/MyProject/AppDelegate/AppDelegate.Swift:153:5

Ici 153 est la ligne de code dans AppDelegate.Swift.

func getNotificationDetail(_ launchOptions : [AnyHashable: Any]?) {
    if launchOptions != nil {
        let dictLaunch = launchOptions! as NSDictionary
        NotificationCenter.default.addObserver(self, selector: #selector(AppDelegate.openRespectiveNotificationScreen), name: NSNotification.Name(rawValue: WebServiceKey.APPMANAGER_SERVICE_CALL_FINISH), object: nil)

        inactiveUserInfo  = dictLaunch.object(forKey: UIApplicationLaunchOptionsKey.remoteNotification) as? NSDictionary
    }
}

Puis commentez tout le code dans la méthode et compilez à nouveau. Ensuite, essayez de décommenter une ligne à la fois, de sorte que vous obtenez enfin une ligne qui génère une erreur.

Après avoir trouvé la ligne de code exacte, vous pouvez facilement le réparer.

Dans mon code, je trouve que la dernière ligne de cette méthode génère une erreur.

Donc, je le remplace par le code ci-dessous et il est construit avec succès.

inactiveUserInfo  = dictLaunch[UIApplicationLaunchOptionsKey.remoteNotification] as? NSDictionary

Donc, l’essentiel est de déboguer prudemment . Essayez de cette façon, vous allez certainement résoudre les erreurs facilement.

4
technerd

Au début, je recommande de regarder attentivement le journal de construction pour trouver le fichier ayant des problèmes. Dans mon cas, une valeur facultative utilisée dans la boucle for provoquait une erreur de segmentation lors du processus de construction.

for i in 0..<hoge?.count {

J'ai corrigé mon code comme suit;

for i in 0..<hoge!.count {

Je n'ai aucune erreur maintenant. (^ O ^) /

3

Lisez attentivement le message de débogage.

J'ai rencontré cette erreur parce que j'ai utilisé un simple '=' au lieu de double '=' par erreur dans if-statement.

if aString.characters.count = 2 {...}
2
Kyle KIM

J'ai fait face à cette erreur de compilation dans Xcode Version 7.3 (7D175), projet Swift. Voici le scénario:

  1. Déclaré "protocole @objc" dans la classe Swift
  2. Dans une autre classe qui implémente ce protocole, l’une des méthodes non optionnelles n’est pas implémentée

La mise en œuvre de la méthode a résolu le problème pour moi. Cela pourrait être l'une des raisons pour lesquelles les personnes confrontées à ce problème. J'espère que ca aide

1
KrishnaCA

J'ai eu le même problème. Xcode 7.2.1. Et en sélectionnant l'erreur et en développant les journaux, je pouvais trouver l'erreur de compilation enterrée parmi les longs chemins. 

Voir la ligne après le "1" dans l'image ci-jointe. Il a une référence à un fichier et une ligne. En le regardant je pourrais trouver l'erreur. 

Dans mon cas, j'avais une assignation d'énumération invalide, j'ai déplacé une logique d'une structure à une énumération et injecté cette erreur:

J'ai eu:

return .Success(dict: dict)

J'aurais dû: 

return .Success(dict)

 Log error after selecting it in the Issue Navigator

1
Juan Valera

J'ai eu la même erreur à cause de:

 let stringB: String? = stringA.characters.count = 0 ? nil : stringA

La solution était de la changer en:

 let stringB: String? = stringA.characters.count > 0 ? stringA : nil

Peut-être que cela aide quelqu'un ...

1
Manuel

Pour moi, le problème (XCode 7.3.1) utilisait un opérateur + = sur un élément du dictionnaire.

par exemple:

func test() {
    var myDict:[String:String] = [:]
    myDict["key"] = "pig"
    myDict["key"] += "dog"

    var myArray:[String] = []
    myArray.append("pig")
    myArray[0] += "dog"
 }

Cela provoquera une erreur de segmentation. Supprimez le + = sur myDict et tout va bien.

Je suis conscient que c'est un bogue (les références de dictionnaire sont nulles) mais le compilateur ne devrait pas chier comme ça.

1
dave

Pour moi, c'était une longue fonction qui contenait un tableau de données de test.

0
Chris Gunawardena

Pour moi, le problème était de changer ma façon de vérifier si quelque chose était faux. Au lieu de:

if object1.hidden == false {
}

changer à:

if object1.hidden != true {
}
0
claassenApps

Redémarrez xcode. Nettoyer la construction (cmd + k, cmd + shift + k et nettoyer le dossier de construction -> option + cmd + shift + k) Cela devrait résoudre le problème. 

0
user2084611

J'ai reçu cette erreur lors d'une tentative de compilation avec Xcode 8.2.1. J'utilise Cocoa Pods et je soupçonne que l'un des pods était à l'origine du problème, car certains fichiers du pod étaient référencés dans la longue erreur générée par le compilateur. Après avoir quitté Xcode et exécuté pod update dans le répertoire de mon projet (via Terminal), j’ai réussi à compiler lorsque j’ai rouvert mon projet.

0
Dana Wheeler

Pour moi:

J'utilise Closure comme AnyObject, après avoir utilisé cette fonction Cast fermures/blocks Erreur résolue.

typealias UserCallBack = () -> Void
...
if let callBack = callBack as? AnyObject {
  request?.userInfo["callBack"] = callBack
}
0
Hailong

Pour moi, cela a été causé par la déclaration d'une structure dans une extension de classe finale:

final class X {
    ...
} 

extension X {
    struct Y {
        ...
    }
}
0
Max Chuquimia

Avez-vous essayé de rouvrir le projet et/ou de rajouter votre schéma? Je l'ai fait et l'erreur était partie.

0
Adriana Pineda

Voici comment j'ai corrigé - d'abord, comme suggéré par beaucoup ici, veuillez lire attentivement le journal. En fait, il vous indique exactement le numéro de la ligne où elle échoue et la raison de son échec. Le simple fait de commenter cette ligne a corrigé le problème. Dans mon cas, c'était une erreur de vérification de type. J'utilise des structures Gloss pour l'analyse JSON et il semble que plus on approfondit la hiérarchie JSON, mais l'analyseur en ligne ne reconnaît parfois pas l'existence d'un problème de temps de compilation. Lorsque vous générez le projet, il échoue. Idéalement, l’erreur de vérification de type doit être reconnue par l’analyseur en ligne. Donc, cela peut être un problème avec Xcode mais c'est votre code qui le casse. Lorsque je lis beaucoup de messages - mon analyse est la suivante ... la cause première est liée à la vérification de type. Lorsque vous essayez d'affecter des types incorrects (facultatif ou non) et que l'analyseur en ligne ne le reconnaît pas dans certains cas. Lorsque vous le construisez, il le reconnaît et provoque une erreur de segmentation. C'est notre code qui est faux malgré un bug avec Xcode, il peut être corrigé si nous lisons attentivement les journaux!

0
ReshDev

malheureusement, j'ai toujours la même erreur que vous. Je suggère que le meilleur moyen pour vous est de recréer un nouveau projet avec le nouveau Xcode et de transférer tout le code dans ce nouveau projet, le problème sera résolu. A propos, après la mise à jour d'un endroit comme framework ou xcode, cette erreur peut se produire, Apple est stupide.

0
ios killers

J'essayais d'utiliser ?? d'une manière intelligente quand cela m'est arrivé.

Je suppose que Swift n'aime pas quand vous essayez de chaîner plusieurs ?? ensemble comme dans, bien que le surligneur de syntaxe ne génère aucune erreur

let ageNum = self.ageValue > 0 ?? self.birthday?.ageFromDate() ?? 0
0
Kevin

J'ai eu la même erreur dans mon projet après la mise à niveau vers xCode 7. J'ai décidé de supprimer la nouvelle version de xCode et d'installer xCode 6.4. Après tout, cela a bien fonctionné avec xCode 6.4, donc je vous suggère de le faire pour commencer. D'autre part, vous devriez toujours être à jour, mais vous pouvez aussi avoir les deux xCode 6.4 et 7.0 :) J'espère que ça marche pour vous!

0
Erik Auranaune

J'essayais d'écrire le NSData dans le fichier en tant que code suivant.

 if let currentResumeData = currentUserInfo["NSURLSessionDownloadTaskResumeData"]
 {
     // the following "do" was giving the above mentioned compile error.
     do {
         try currentResumeData.writeToFile(fileNameString, options: .DataWritingAtomic)
     } catch {}
     // the above error code.
 }

Après avoir lu diverses réponses sur StackOverflow, je l'ai changé en tant que sous, ce qui a supprimé l'erreur.

 if let currentResumeData:NSData = currentUserInfo["NSURLSessionDownloadTaskResumeData"] as? NSData {
 {
     do {
         try currentResumeData.writeToFile(fileNameString, options: .DataWritingAtomic)
     } catch {}
 }

Comme vous pouvez le constater, le compilateur a requis le type NSData approprié de la variable "currentResumeData" pour appeler sa méthode .writeToFile.

Je suis sûr que cela aidera les autres.

0
SHS

Dans mon cas, le casting que j'ai dû corriger était similaire à Murat Yasar ( https://stackoverflow.com/a/36867502/512403 ), mais le mien avait deux parties à corriger . Le compilateur n'a pas ne fonctionne pas avec le correctif original, je devais donc modifier un peu plus mon code:

Mauvaise version:

let jsonObject: AnyObject? = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments)

Bonne version:

let jsonObject = try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! [String: AnyObject]

Peut-être que cela peut aider quelqu'un de nouveau à ces bizarreries de Swift.

0
Isaac

J'ai un projet qui se passe dans le même fichier de temps en temps. Ma solution est la suivante: 

Allez dans le fichier que l'erreur de segmentation a mentionné, commentez toutes les importations, exécutez (la construction échoue évidemment), supprimez la mise en commentaire de toutes les importations -> Constructions avec succès. 

Mes importations étaient Firebase et FirebaseAuth si cela pouvait aider quelqu'un. 

0
Roni Leshes