Mais pour moi, ce n'est pas résolu, je suis confronté à ce problème même lorsque j'utilise Xcode 8.2. Vous pouvez l'essayer (téléchargez Xcode8.2 beta2 ici )
Système de construction • Xcode ne reconstruira pas une cible entière lorsque seuls de petits changements se sont produits. (28892475)
Ancienne réponse:
Il s'agit d'un travail autour de:
Onglet "Build Setting" -> "C Language Dialect" -> Changez-le en "Compiler Default".
Le "Dialecte du langage C" a été réglé sur "GNU99" au lieu de "Compiler Default". Auparavant, le standard était GNU99 mais maintenant ce n'est pas le cas. À un moment donné, Xcode n'a pas migré correctement les paramètres du projet de bibliothèque et a donc été défini sur GNU99. Une fois que je l'ai changé en GNU99, il a arrêté de recompiler tout mon code à chaque fois!
Jusqu'ici tout va bien!!! Donnez-moi une heure et la prime est à vous si elle continue.
Adam Waite
7
Argh est de retour pour tout recompiler
Adam Waite
1
J'ai le même comportement. Si j'efface les données dérivées (ou change le dialecte du langage C), cela fonctionnera pendant environ 10 versions. Après cela, il retombe pour tout reconstruire.
bluebamboo
1
Xcode 8.2 (beta 2) fonctionne pour 10 builds puis reconstruit tout à partir de zéro, mais toujours mieux que le précédent.
Markus
3
Malheureusement, le problème persiste dans Xcode 8.3 beta 2 (du moins pour nous). Aucune amélioration notable ne peut être mesurée dans notre projet.
Kasper Munck
20
Allez dans Product -> Scheme -> Edit Scheme. Sélectionnez Construire dans la colonne de gauche et décochez " Rechercher les dépendances implicites "
Mais cet indicateur doit rester coché lorsque vous créez le projet pour la première fois.
@Josh, utilisez-vous plusieurs projets dans votre projet (par exemple sous-projet ou inclus). Et êtes-vous sûr, en regardant la sortie de votre build, qu'il reconstruit vraiment tout?
Mobile Ben
3
C'est un espace de travail de base avec des cocoapodes et le projet principal. CocoaPods reste construit, mais le projet principal reconstruit chaque fichier; regarder la sortie de la construction et sa reconstruction de plus de 100 fichiers.
Josh
1
Mise à jour: il semble que cette solution fonctionne pour quelques versions après cela, mais il en va de même pour le nettoyage de l'ensemble du projet et la reconstruction. Cependant, à la 2-8ème reconstruction, il recommence à tout recompiler. Des idées? Au-delà de la frustration.
Josh
Cela ne fonctionne pas, du moins pas avec un espace de travail CocoaPods. Tout se construit, à chaque fois. Super ennuyeux, d'autant plus qu'Apple a eu des années pour résoudre ce problème.
Womble
7
Le correctif pour moi consistait simplement à fermer le storyboard, j'avais ouvert le fichier source avec l'éditeur assisté et le fichier de storyboard ouvert également (en fermant le storyboard --- puisque je n'y apportais aucune modification) supprimait toute la compilation inutile
La plus grande amélioration que j'ai pu apporter a été la modularisation de mon projet. Modulariser spécifiquement la couche ORM qui est utilisée dans presque toutes les autres classes. En déplaçant ce code dans une cible distincte dans mon projet et en l'important en tant que module, j'ai pu considérablement améliorer les temps de compilation. Xcode ne décide plus de recompiler les fichiers inutiles lorsque je fais une compilation.
J'utilise maintenant la méthode de compilation Single File pour les versions de débogage incrémentielles rapides.
Cela a toujours été un problème constant pour moi avec Xcode 9. Comme beaucoup d'entre vous, je travaille sur un grand swift 4 / cocoapods avec de nombreux fichiers sources et chaque fichier à chaque fois est exaspérant.
Jusqu'à présent, j'obtiens les meilleurs résultats avec les paramètres suivants. Je vous suggère de l'essayer et de voir comment cela fonctionne pour vous.
Schéma -> Construire -> "Rechercher les dépendances implicites" = TRUE
Paramètres de construction -> Optimisation au moment du lien = incrémentielle
Paramètres de construction -> Niveau d'optimisation (débogage) = Aucun [-OO]
Paramètres de construction -> Niveau d'optimisation (version) = le plus rapide, le plus petit [-Os]
Paramètres de construction -> Augmenter le partage des en-têtes précompilés = OUI
Paramètres de construction -> Activer la distillation incrémentielle = OUI
Ajout de paramètres de construction personnalisés définis par l'utilisateur,
Paramètres de construction -> HEADERMAP_USERS_VFS = OUI
Remarque: je n'ai pas le paramètre personnalisé défini par l'utilisateur pour l'optimisation de l'ensemble du module.
J'ai changé quelques choses avec mon code concernant l'en-tête de préfixe qui semblent avoir résolu ce problème. Je ne sais pas lequel a vraiment fait l'affaire, mais je vais tous les partager dans l'espoir que cela aide quelqu'un d'autre. Si vous n'avez pas de jeu d'en-tête de préfixe, alors je suppose que ce n'est pas le problème (ou le problème est multiforme).
Supprimez toutes les importations de l'en-tête de préfixe qui sont des fichiers du répertoire des produits générés afin de pouvoir modifier le paramètre de génération pour cela («L'en-tête précompilé utilise les fichiers du répertoire de génération») sur «Non». Assurez-vous qu'il n'est pas importé indirectement via d'autres importations.
Supprimez toutes les importations de l'en-tête de préfixe qui utilisent des modules Clang (bibliothèques ou frameworks qui ont un fichier module.modulemap dans leur répertoire Headers, afin que vous puissiez écrire du code comme @import MyModule). (Pour moi, ceci et l'étape 1 étaient une seule et même chose.)
Définissez le paramètre de construction pour le partage d'en-tête de préfixe sur "Oui". (Je ne pense pas que cela soit nécessaire et cela ne devrait pas avoir d'effet sur mon propre projet. Je le dis simplement parce que je l'ai changé parce que j'étais prêt à tout essayer. :))
Quittez Xcode et supprimez votre répertoire DerivedData / ModuleCache (configuré pour être à ~ / Library / Developer si je me souviens bien).
Si cela ne fonctionne toujours pas, vous pouvez essayer de supprimer d'autres importations de votre en-tête de préfixe. Il y a peut-être quelque chose qui fait trébucher ...
sous les paramètres de construction de votre cible (Projet -> Cible -> Paramètres de construction -> Défini par l'utilisateur).
Cette solution a fonctionné à chaque fois pour moi aujourd'hui, après qu'aucune autre solution ne fonctionnait de manière cohérente au cours du mois dernier.
EDIT: recompile encore parfois tout, bien qu'il semble le faire beaucoup moins fréquemment avec ce paramètre défini.
J'ai également ajouté cette valeur, le temps de construction est plus rapide mais cela n'a pas résolu la construction incrémentielle. J'ai changé le compilateur Swift - Génération / débogage de code en optimisation rapide et complète du module ... est le meilleur résultat à ce jour
Antonio Junior
Je ne peux même pas trouver défini par l'utilisateur)
David Seek
2
@DavidSeek c'est tout en bas des paramètres de construction
Vérifiez tout votre code sur les @IBDesignabledirectives dans mon cas particulier de projet de construction Xcode tout le temps car j'avais des vues sur mon storyboard qui contenaient ces @IBDesignableattributs. La deuxième chose est que mon storyboard est également ouvert dans une fenêtre séparée (pas un onglet) qui pousse mon Xcode à créer des builds pour tous les simulateurs pour toujours.
Nous utilisons un certain nombre de @IBDesignabledirectives ... y a-t-il quelque chose en particulier que nous devrions rechercher?
Stan
Je pense qu'il est possible de les trouver en les excluant un par un, et de vérifier le résultat, mon cas c'était seulement 2 des directives @IBDesignable dans tout le projet.
ua24
2
Madhuri Mane a tout à fait raison à ce sujet. Pour ajouter un peu plus de clarté, quelques points importants à noter:
Ceci est UNIQUEMENT applicable si vous avez des dépendances implicites sur des bibliothèques / frameworks sur lesquels votre cible s'appuie.
Si "Rechercher les dépendances implicites" est désactivé:
Résultat: la bibliothèque ne sera pas créée avant la création de la cible d'application. La cible d'application n'a pas pu être créée.
Correction: pour éviter que le deuxième scénario ne se produise, vous devez ajouter les cibles nécessaires dans la liste des cibles et les ordonner correctement.
Maintenant, si votre projet entier est hébergé dans une seule cible et que la compilation prend 4 minutes, vous ne pouvez pas faire grand chose à ce sujet, sauf le diviser en frameworks pour tirer parti de ce qui précède ou déterminer où la compilation est en retard. Si vous utilisez quelque chose comme PaintCode ou avez de gros morceaux de code UIKit rapidement, changez-le en Objective-c, il se compile beaucoup plus rapidement
Accédez aux paramètres de construction de votre cible et définissez-le Defines Modulesur Yes.
A travaillé pour moi pour quelques builds, trop tôt pour prétendre qu'il s'agit d'une solution de contournement définitive, mais au moins nous essayons.
Accédez au paramètre de construction du projet et modifiez le "Dialecte du langage C".
Le "Dialecte du langage C" est réglé sur "GNU99" au lieu de "Compiler Default" lorsque vous mettez à jour la version xcode. À un moment donné, Xcode n'a pas migré correctement les paramètres du projet de bibliothèque et a donc été défini sur GNU99. Cela résoudra le problème
Si vous avez apporté des modifications au fichier Swift, commencez à construire l'application, allez dans le dernier onglet et cliquez sur le journal de construction, pendant l'étape "Vérifier les dépendances" arrêtez la construction et exécutez-la à nouveau. Lors de la deuxième exécution, il ne devrait générer que les fichiers que vous avez modifiés. Si cela est fait correctement, j'ai trouvé que cela fonctionne à chaque fois. Pas besoin de modifier les paramètres du projet.
Cela semble être un bogue dans Xcode.
Si vous voyez que l'application effectue une compilation complète, arrêtez la compilation et réessayez cette astuce.
Si vous n'avez apporté aucune modification au code, utilisez CMD + CTRL + R pour exécuter sans générer l'application qui attache le débogueur. Ne construira pas d'application mais peut aider à gagner du temps inutile.
Cela fonctionne vraiment, mais parfois XCode échouera avec le code 1 et vous devrez créer une version propre. C'est un cauchemar
Antonio Junior
Il existe d'autres scénarios dans lesquels Xcode effectuera toujours une compilation complète. J'ai trouvé que si vous modifiez le fichier .h inclus dans l'en-tête de pontage, il reconstruira tous les fichiers Swift. Il peut y avoir d'autres scénarios qui ne sont pas liés au bogue Xcode.
Vlad
Il existe des scénarios dans lesquels le seul changement est un changement de nom de fonction ou une nouvelle propriété ajoutée à une classe / structure existante qui entraîne une reconstruction complète.
Essayez de: 1. Accédez au projet 2. Cliquez sur Paramètres de génération 3. Vérifiez que OptimizationLevel est défini sur Aucun pour le débogage. 4. Cliquez sur Ajouter un paramètre défini par l'utilisateur. 5. Définissez SWIFT_WHOLE_MODULE_OPTIMIZATION sur OUI.
rien pour fonctionner il compile quand même quand j'écris une seule lettre.
Chandni
-2
pour accélérer la compilation de xcode, peut utiliser IRAMDISK (disque de mémoire virtuelle). Moyen très utile et efficace pour réduire le temps de compilation.
Peut également utiliser pour accélérer les applications fréquemment utilisées.
Réponses:
Mise à jour 2017/1/2
Ce problème n'a pas été résolu sur Xcode 8.2.1 (pour mon projet)
Comment survivre?
Mise à jour 2017/12/17
Ce problème n'a pas été résolu dans Xcode 8.2.
Mise à jour 12/12/2016
Atom vers le code et la ligne de commande pour construire et déboguer est mon choix maintenant. J'espère qu'Apple corrigera bientôt ce bug légitime.
Mise à jour 04/12/2016
Ce problème semble résolu avec Xcode 8.2 (beta 2) .
Mais pour moi, ce n'est pas résolu, je suis confronté à ce problème même lorsque j'utilise Xcode 8.2. Vous pouvez l'essayer (téléchargez Xcode8.2 beta2 ici )
Ancienne réponse: Il s'agit d'un travail autour de:
Onglet "Build Setting" -> "C Language Dialect" -> Changez-le en "Compiler Default".
Pour référence :
la source
Allez dans Product -> Scheme -> Edit Scheme. Sélectionnez Construire dans la colonne de gauche et décochez " Rechercher les dépendances implicites "
Mais cet indicateur doit rester coché lorsque vous créez le projet pour la première fois.
la source
Le correctif pour moi consistait simplement à fermer le storyboard, j'avais ouvert le fichier source avec l'éditeur assisté et le fichier de storyboard ouvert également (en fermant le storyboard --- puisque je n'y apportais aucune modification) supprimait toute la compilation inutile
la source
ACTUALISÉ
La plus grande amélioration que j'ai pu apporter a été la modularisation de mon projet. Modulariser spécifiquement la couche ORM qui est utilisée dans presque toutes les autres classes. En déplaçant ce code dans une cible distincte dans mon projet et en l'important en tant que module, j'ai pu considérablement améliorer les temps de compilation. Xcode ne décide plus de recompiler les fichiers inutiles lorsque je fais une compilation.
J'utilise maintenant la méthode de compilation Single File pour les versions de débogage incrémentielles rapides.
Il y a d'autres bonnes suggestions dans ce lien, y compris la refactorisation du code, https://medium.com/rocket-fuel/optimizing-build-times-in-swift-4-dc493b1cc5f5
VIEUX
Cela a toujours été un problème constant pour moi avec Xcode 9. Comme beaucoup d'entre vous, je travaille sur un grand swift 4 / cocoapods avec de nombreux fichiers sources et chaque fichier à chaque fois est exaspérant.
Jusqu'à présent, j'obtiens les meilleurs résultats avec les paramètres suivants. Je vous suggère de l'essayer et de voir comment cela fonctionne pour vous.
Ajout de paramètres de construction personnalisés définis par l'utilisateur,
Remarque: je n'ai pas le paramètre personnalisé défini par l'utilisateur pour l'optimisation de l'ensemble du module.
la source
J'ai changé quelques choses avec mon code concernant l'en-tête de préfixe qui semblent avoir résolu ce problème. Je ne sais pas lequel a vraiment fait l'affaire, mais je vais tous les partager dans l'espoir que cela aide quelqu'un d'autre. Si vous n'avez pas de jeu d'en-tête de préfixe, alors je suppose que ce n'est pas le problème (ou le problème est multiforme).
@import MyModule
). (Pour moi, ceci et l'étape 1 étaient une seule et même chose.)Si cela ne fonctionne toujours pas, vous pouvez essayer de supprimer d'autres importations de votre en-tête de préfixe. Il y a peut-être quelque chose qui fait trébucher ...
la source
On dirait qu'ils y travaillent activement selon https://forums.developer.apple.com/thread/62737 mais une solution de contournement consiste à ajouter
HEADERMAP_USES_VFS = YES
sous les paramètres de construction de votre cible (Projet -> Cible -> Paramètres de construction -> Défini par l'utilisateur).
Cette solution a fonctionné à chaque fois pour moi aujourd'hui, après qu'aucune autre solution ne fonctionnait de manière cohérente au cours du mois dernier.
EDIT: recompile encore parfois tout, bien qu'il semble le faire beaucoup moins fréquemment avec ce paramètre défini.
la source
Vérifiez tout votre code sur les
@IBDesignable
directives dans mon cas particulier de projet de construction Xcode tout le temps car j'avais des vues sur mon storyboard qui contenaient ces@IBDesignable
attributs. La deuxième chose est que mon storyboard est également ouvert dans une fenêtre séparée (pas un onglet) qui pousse mon Xcode à créer des builds pour tous les simulateurs pour toujours.la source
@IBDesignable
directives ... y a-t-il quelque chose en particulier que nous devrions rechercher?Madhuri Mane a tout à fait raison à ce sujet. Pour ajouter un peu plus de clarté, quelques points importants à noter:
Ceci est UNIQUEMENT applicable si vous avez des dépendances implicites sur des bibliothèques / frameworks sur lesquels votre cible s'appuie.
Si "Rechercher les dépendances implicites" est désactivé:
Source et lectures complémentaires sur le sujet: https://pewpewthespells.com/blog/managing_xcode.html#scheme-action
Maintenant, si votre projet entier est hébergé dans une seule cible et que la compilation prend 4 minutes, vous ne pouvez pas faire grand chose à ce sujet, sauf le diviser en frameworks pour tirer parti de ce qui précède ou déterminer où la compilation est en retard. Si vous utilisez quelque chose comme PaintCode ou avez de gros morceaux de code UIKit rapidement, changez-le en Objective-c, il se compile beaucoup plus rapidement
la source
Accédez aux paramètres de construction de votre cible et définissez-le
Defines Module
surYes
.A travaillé pour moi pour quelques builds, trop tôt pour prétendre qu'il s'agit d'une solution de contournement définitive, mais au moins nous essayons.
la source
Apple a publié hier une nouvelle version bêta de Xcode (14 novembre)
Xcode 8.2 beta 2
Et ce problème a été marqué comme résolu dans la note de publication.
Ça marche pour moi. La vitesse de construction est revenue comme d'habitude. Tous ceux qui sont confrontés à ce problème devraient essayer!
https://developer.apple.com/download/
la source
Accédez au paramètre de construction du projet et modifiez le "Dialecte du langage C".
Le "Dialecte du langage C" est réglé sur "GNU99" au lieu de "Compiler Default" lorsque vous mettez à jour la version xcode. À un moment donné, Xcode n'a pas migré correctement les paramètres du projet de bibliothèque et a donc été défini sur GNU99. Cela résoudra le problème
la source
Si vous avez apporté des modifications au fichier Swift, commencez à construire l'application, allez dans le dernier onglet et cliquez sur le journal de construction, pendant l'étape "Vérifier les dépendances" arrêtez la construction et exécutez-la à nouveau. Lors de la deuxième exécution, il ne devrait générer que les fichiers que vous avez modifiés. Si cela est fait correctement, j'ai trouvé que cela fonctionne à chaque fois. Pas besoin de modifier les paramètres du projet.
Cela semble être un bogue dans Xcode.
Si vous voyez que l'application effectue une compilation complète, arrêtez la compilation et réessayez cette astuce.
Si vous n'avez apporté aucune modification au code, utilisez CMD + CTRL + R pour exécuter sans générer l'application qui attache le débogueur. Ne construira pas d'application mais peut aider à gagner du temps inutile.
la source
Problème de mon côté résolu en appliquant la décocher à la solution "Rechercher les dépendances implicites".
MAIS rappelez-vous si vous utilisez des cocoapodes, pour appliquer également ces paramètres à votre projet de pod en le sélectionnant dans
Produit -> Schéma -> Pods- "yourProjectName"
s'appliquent également dans:
Produit -> Schéma -> "yourProjectName"
Cela m'aide, alors j'espère que cet indice aidera quelqu'un d'autre.
Merci
la source
Essayez de: 1. Accédez au projet 2. Cliquez sur Paramètres de génération 3. Vérifiez que OptimizationLevel est défini sur Aucun pour le débogage. 4. Cliquez sur Ajouter un paramètre défini par l'utilisateur. 5. Définissez SWIFT_WHOLE_MODULE_OPTIMIZATION sur OUI.
la source
pour accélérer la compilation de xcode, peut utiliser IRAMDISK (disque de mémoire virtuelle). Moyen très utile et efficace pour réduire le temps de compilation.
Peut également utiliser pour accélérer les applications fréquemment utilisées.
reportez-vous au lien suivant pour télécharger et utiliser: http://iramdisk.findmysoft.com/mac/
la source