Xcode 8 très lent Swift de la compilation
Depuis Swift 3 et Xcode 8 mon projet se compile très lentement.
Chaque fois que j'ajoute tellement comme une ligne vide dans un fichier, la recompilation prend une minute. Lorsque je vérifie la sortie, il n'existe pas de fichier particulier qui est très longue.
(J'ai aussi utilisé cet outil pour le mesurer: https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode)
Elle apparaît toujours à compiler les 4 fichiers à la fois. Le "rythme" est tout à fait stable. Juste très lent...
Aussi: à Chaque fois que j'ouvre ou basculer entre les fichiers, il peut prendre beaucoup de temps jusqu'à ce que je obtenir de saisie semi-automatique, ou des erreurs/avertissements.
Que puis-je vérifier? J'ai presque l'impression qu'il y a un drapeau j'ai mis que juste traîne en bas de la construire la vitesse comme un fou..
EDIT:
Ce n'est pas une solution au problème sous-jacent, mais j'ai passé un certain temps sur le déplacement de plus de code pour les cadres. Cela fait une différence (tout simplement parce qu'il a recompiler moins de fichiers à chaque fois). Cela ne devrait pas être nécessaire, mais il est devenu insupportable... je suis toujours à la recherche beaucoup pour une solution adéquate.
- Voir si ceci qui fonctionne pour vous. Je suppose que vous avez essayé l'habitude de le redémarrage de votre mac, Xcode, projet de, projet de nettoyage etc.
- même ici. je vais avoir l'âge de 9 mois 15inch macbook 2,5 ghz. le prix était presque 3k. il s'est comporté comme le Flash dans xcode 7 compaired à ce qui se passe ici dans xcode 8. storyboards besoin d'une année à l'ouvrir et à la compilation de temps, au moins triplé. j'espère juste pour les mises à jour.
- et @YashTamakuwala merde, vous construire mes espoirs avec ce lien, mais mon
Build Active Architectures Only
est déjà mis enYES
par défaut 🙁 - oui j'ai essayé déjà, mais merci.
- Il y a aussi un drôle de truc vaudou de créer un nouveau projet vide et coller vos fichiers d'origine dans le nouveau. Ce truc est connu pour résoudre de nombreux obscur comportements de Xcode.
- J'ai aussi essayé. Merci, mais il n'a pas aidé..
- Même ici! Frustrant!
- Avez-vous activé tout le module d'optimisation et vous construisez votre configuration de version? (Il a été tourné sur Swift 3.0 par défaut) module d'optimisation nécessaires à la reconstruction de l'ensemble de votre projet à chaque fois.
- stackoverflow.com/questions/39547197/...
- essayez ma réponse, je pense que c'est le problème avec vous code.
- merci, mais comme indiqué dans ma question, il n'existe pas de fichier particulier qui prend beaucoup de temps à compiler.
- Voir ma réponse dans ce post, j'espère que ça aide.
- Cela a fonctionné pour moi sur Xcode 8.3 swift 3.1 - stackoverflow.com/a/40497873/1890317 je suis passé de plus d'une minute à construire à 17 secondes
Vous devez vous connecter pour publier un commentaire.
Un problème avec ce problème, c'est que nous ne savons pas où est la mauvaise initialisation/déclaration . Une solution que mon collègue suggère, c'est de trouver la fonction qui prennent beaucoup de temps à compiler donc:
Project
sélectionnez votre cibleBuild Settings
->Swift Compiler - Custom Flags
Other Swift Flags
-Xfrontend -warn-long-function-bodies=50
(50 représente le temps en millisecondes)après qu'un avertissement affiché comme suit:
et après qui vous savez quoi faire 😉
J'ai eu le même problème seulement depuis la mise à jour Swift 3/XCode 8 et il semble être provoquée par l'afflux de littéraux de tableau, semblable à cette.
J'ai été en mesure de résoudre le problème en ajoutant des annotations de type pour les variables étant affecté à l'littéral de tableau, par exemple
au lieu de
C'est un problème avec Xcode 8 où il n'a pas d'effectuer des versions correctement. Si vous modifiez un seul swift fichier il doit compiler uniquement ce fichier uniquement. Cela a déjà été évoqué ici: Xcode 8 est plein projet de reconstruction
Les 4 fichiers à la fois de construire des sons comme Xcode est l'exécution d'une reconstruction complète du projet, qui ne devrait pas arriver de nouveau si vous avez modifié une seule ligne dans un fichier.
Dans mon cas, j'ai été en utilisant une fonction d'aide à enregistrer certaines données dans Firebase. Que la fonction était de retour d'un dictionnaire, avec environ 20 éléments, et il faudra environ 40 minutes pour compiler.
Ma solution a été d'initialiser un dictionnaire vide, puis ajouter les éléments un par un pour
someDict
. Maintenant, il compile en moins de 30 secondes. J'espère que cela aide.Avant
Après
Cela a fonctionné pour moi sur un de mes projets.
Source
C'était un simple projet et il a augmenté à un de mes construit à partir de 1 minute à 2 secondes.
Sur un Dispositif physique j'ai eu ces résultats.
Pour l'un de mes plus gros projets (42 dossiers) ont diminué de 2:36 2:20.
Puis j'ai ajouté:
SWIFT_WHOLE_MODULE_OPTIMIZATION = OUI pour Construire de Paramètres définis par l'utilisateur réglage.
Le temps a passé jusqu'à - 2:00
Sur le simulateur de la construction a 49 secondes la première fois, puis j'ai utilisé.
et la construction s'est faite en 7 secondes.
J'espère que cette aide.
J'ai été en mesure de réduire considérablement ma swift projet temps de compilation en évitant l'utilisation du Nil-la Coalescence de l'Opérateur et de concaténation de chaîne.
Dans otherwords où j'avais quelque chose comme:
Je l'ai changé pour
Mon temps de compilation ont chuté de façon drastique - de 20 minutes à 20 secondes.
Assurez-vous que vous n'êtes pas combiner des tableaux comme
let combinedArrays = array1 + array2
. Il y a un bug connu aussi bien pour l'inférence de type ici, où Swift déchets de temps à essayer de comprendre à quel type de lacombinedArrays
devrait être. Au lieu de cela,[array1, array2].joined()
devrait fonctionner tout aussi bien, et de compiler beaucoup plus rapide.Une pratique courante qui ralentit le temps de compilation est à l'aide de
Array.append
etString.append
(ou leur+
opérateur équivalents). PourString
s, il est préférable d'utiliser une chaîne formatée, donc au lieu devous devez utiliser
Je ne me souviens pas l'accélération, mais c'était de l'ordre de 10 fois pour ces lignes. Les chances sont, de la pensée, que ce ne sera pas une notable accélération pour tout, mais les tinest projets. Par exemple, notre projet a des centaines de Swift fichiers, ainsi que de nombreux Objective-C, et notre temps de compilation sont souvent de 10 minutes ou plus, parfois, même si le seul changement à un non-Swift fichier.