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?
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)" }
où 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.
J'ai fait un cours s'étendre. Cela provoque également le compilateur Swift à rester bloqué dans une boucle sans erreur:
class X: X
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).
Essayez de nettoyer votre dossier de construction de projet
Pod Install
ou Pod Update
.Je pense que 2 est probablement la cause.
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é.
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:
Build
en cours d'exécution. Voir quel fichier source prend beaucoup de temps de compilation.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.
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
.
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
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 ...
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