web-dev-qa-db-fra.com

Xcode se bloque sur "Compiler les fichiers source Swift"

J'utilise Xcode 7.3.1. Lors de la construction de mon projet basé sur Swift, il se bloque sur "Compiler les fichiers source Swift". J'ai essayé diverses combinaisons de suppression de DerivedData, de nettoyage, d'exécution, de redémarrage de Xcode, de redémarrage d'OS X. Aucune ne semble fonctionner. Des idées?

10
Steve Kuo

Merci pour toutes les suggestions des commentateurs. Je l'ai réduit à la fermeture de map en faisant référence à une propriété que j'avais supprimée. Exemple:

var people: [Person] = ...
let foo = people.map { "\($0.name), \($0.age)" }

Person ressemble à quelque chose comme:

protocol Person {
    var name: String { get }
    var age: Int { get }
}

Tout cela fonctionne bien. Ensuite, j'ai supprimé age tout en maintenant la fermeture inchangée. Cela a rendu Xcode désespérément confus. Probablement lié à l'inférence de type de Swift.

7
Steve Kuo

J'ai fait un cours s'étendre. Cela provoque également le compilateur Swift à rester bloqué dans une boucle sans erreur:

class X: X
14
Hai

Changez "Niveau d'optimisation du compilateur Swift" dans les paramètres de construction de "Optimisation du module entier" en "Optimisation de fichier unique". Ce n'est peut-être pas votre problème, mais cela a résolu le mien avec lequel j'étais coincé pendant une demi-journée. Il s’agit peut-être simplement d’un bogue temporaire dans la version récente de Xcode (c’est celui que j’utilisais au moment où j’ai écrit cela).

5
KutakMir

Essayez de nettoyer votre dossier de construction de projet

  1. Maintenez la touche option enfoncée et accédez à Product -> Clean Build Folder (où Clean était auparavant dans le menu)
  2. Si vous utilisez CocoaPods, supprimez votre fichier Workspace et exécutez Pod Install ou Pod Update.

Je pense que 2 est probablement la cause. 

5
Mobile Bloke

J'ai eu le même problème. Dans mon cas, cela semble résulter de l'application d'un trop grand nombre d'actions de coalescence nulles. Je construisais un article json:

json = [ "item1": value1 ?? "",
         "item2": value2 ?? "",
         "item3": value3 ?? "",
         ...
         "item14": value14 ?? "" ]

Cela ne compilerait pas. Lorsque j'ai enlevé tous les néant qui fusionnent pour qu'il ressemble à ce qui suit, tout est bien compilé.

json = [ "item1": value 1,
         "item2": value 2,
         "item3": value 3,
         ...
         "item14": value 14 ]

Je n'ai pas essayé de déterminer le seuil pour le nombre d'articles avant qu'il ne soit bloqué.

4
Jeff Evernham

Il semble y avoir diverses causes possibles du temps de compilation extrêmement long. Les valises Corner ou Edge sont partout. Donc, le meilleur moyen est d'observer et d'enquêter sur votre propre cas.

Bien que mentionné par d'autres dans les commentaires, les étapes ci-dessous méritent encore plus d'attention:

  1. Exécuter le projet
  2. Basculez vers Report Navigator (commande + 9), puis sélectionnez la tâche Build en cours d'exécution. Voir quel fichier source prend beaucoup de temps de compilation.
  3. Vérifiez l'historique de validation récent de ce fichier source. Recherchez la cause possible.
3
denkeni

Dans mon cas, le problème était lors de l'analyse JSON. J'envoyais une valeur facultative dans un paramètre de dictionnaire lors de l'analyse syntaxique JSON.

2
Swati Gupta

Regarder le Navigateur de rapports m'a aidé à trouver le problème. Dans mon cas, le problème était que j'ai essayé d'ajouter des contraintes de mise en page automatique à une sous-vue ajoutée par programme d'une UITableView dans une UITableViewController.

1
Tamás Sengel

Dans mon cas, XCode reste bloqué sur le gros dictionnaire:

requestParameters = [
                        "asset" : "...",
                        "user" : "...",
                        // about 15 additional keys
                        ]

Le problème a été résolu après le remplacement de cette partie par:

var requestParameters = [String : Any]()
requestParameters["asset"] = "..."
requestParameters["user"] = "..."
// about 15 additional keys
0
Serhiy

Donc, je crois que dans la plupart des cas, il s'agit d'un problème d'interférence de type littéral bien connu dans les dictionnaires.

Code comme ceci:

 let params = [
                "title": title, "desc": desc, "velikost": velikost,
                "cena": cena, "vykon": vykon, "telefon": telefon,
                "rokVyroby": rokVyroby, "stkDo": stkDo,
                "zemePuvodu": zemePuvodu, "najetoKilometru": najetoKilometru,
                "stav": stav, "ZnackaId": znackaId,
                "VyrobceId": vyrobceId,
                "category": categoryId, "subCategory": subCategoryId,
                "modely[]": modelId, "prodejNakup": prodejNakup,
                "mena": mena, "isNovy": isNovy, "serviska": serviska,
                "abs": abs, "technicak": technicak,
            ]

Doit être mieux écrit toujours comme ça:

let params: [String: String] = [
                "title": title, "desc": desc, "velikost": velikost,
                "cena": cena, "vykon": vykon, "telefon": telefon,
                "rokVyroby": rokVyroby, "stkDo": stkDo,
                "zemePuvodu": zemePuvodu, "najetoKilometru": najetoKilometru,
                "stav": stav, "ZnackaId": znackaId,
                "VyrobceId": vyrobceId,
                "category": categoryId, "subCategory": subCategoryId,
                "modely[]": modelId, "prodejNakup": prodejNakup,
                "mena": mena, "isNovy": isNovy, "serviska": serviska,
                "abs": abs, "technicak": technicak,
            ]

Mais je pense que même des littéraux plus courts sont un problème et que pour gagner du temps en attendant la construction, il est préférable de toujours définir le type des littéraux de dictionnaire afin que le compilateur n'ait pas à le découvrir par lui-même, car il lutte évidemment. PS: Je pense que les ingénieurs d’Apple ont de sérieux problèmes personnels, ils doivent engager des personnes de Jatbrains ou peut-être même de moi;) pour se concentrer sur des tâches importantes et ne pas perdre de temps en discussions sur la différence entre Swift et les autres ...

0
Renetik

xcode semble avoir un problème pour concaténer plus de 5 chaînes. Voir ceci: Xcode se bloque lorsqu’on tente de l’exécuter dans un terrain de jeu Swift? La solution de contournement donnée a résolu mon problème

0