Avec n'importe quel changement dans le code (bien que le fichier ne soit pas dans .pch), le projet complet se recompile à chaque fois.
Réponses
Trop de publicités?Mise à jour 2017/1/2
Ce problème n'a pas été résolu dans Xcode 8.2.1 (pour mon projet).
Comment survivre ?
Code IDE: Xcode/Atom
Build: xcrun
Debug: Xcode (Control + Command + R)
Mise à jour 2016/12/17
Ce problème n'a pas été résolu dans Xcode 8.2.
Mise à jour 2016/12/12
Je choisis maintenant Atom pour coder et la ligne de commande pour construire et déboguer. J'espère qu'Apple corrigera bientôt ce bug légitime.
Mise à jour 2016/12/04
Cette question semble résolu avec Xcode 8.2 (beta 2) .
Mais pour moi, ce n'est pas résolu, je fais face à ce problème même lorsque j'utilise Xcode 8.2. Vous pouvez faire un essai (télécharger Xcode8.2 beta2 ici )
Système de construction - Xcode ne reconstruira pas une cible entière quand seulement de petits changements ont eu lieu. (28892475)
Vieille réponse : Il s'agit d'une solution de contournement :
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 il ne l'est plus. A un certain Xcode n'a pas migré correctement les paramètres du projet de bibliothèque et et il était donc réglé sur GNU99. Une fois que je l'ai changé en GNU99, il a arrêté de recompiler tout mon code à chaque fois ! de recompiler tout mon code à chaque fois !
MISE À JOUR
La plus grande amélioration que j'ai pu apporter a été la modularisation de mon projet. Plus précisément, la modularisation de la couche ORM qui est utilisée dans presque toutes les autres classes. En déplaçant ce code dans une cible séparée au sein de mon projet et en l'important comme un module, j'ai pu améliorer considérablement les temps de compilation. Xcode ne décide plus de recompiler des fichiers inutiles lorsque je fais une compilation.
Maintenant, j'utilise le Dossier unique méthode de compilation pour des constructions incrémentales rapides de débogage.
Ce lien contient d'autres suggestions intéressantes, notamment le remaniement du code, https://medium.com/rocket-fuel/optimizing-build-times-in-swift-4-dc493b1cc5f5
OLD
Cela a toujours été un problème constant pour moi avec Xcode 9. Comme beaucoup d'entre vous, je travaille sur une grande martinet 4/cocoapodes avec de nombreux fichiers sources et recompiler chaque fichier à chaque fois est exaspérant.
Jusqu'à présent, j'ai obtenu les meilleurs résultats avec les paramètres suivants. Je vous suggère de faire un essai et de voir comment cela fonctionne pour vous.
- Schéma -> Construire -> "Trouver les dépendances implicites" = VRAI
- Paramètres de construction -> Optimisation du temps de liaison = incrémentielle
- Paramètres de construction -> Niveau d'optimisation (Debug) = Aucun [-OO]
- Paramètres de construction -> Niveau d'optimisation (Release) = 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émentale = OUI
Ajout de paramètres de construction personnalisés définis par l'utilisateur,
- Paramètres de construction -> HEADERMAP_USERS_VFS = OUI
Remarque : je ne dispose pas du paramètre personnalisé défini par l'utilisateur pour l'optimisation de l'ensemble du module.
J'ai modifié quelques éléments de mon code concernant l'en-tête du préfixe qui semblent avoir réglé ce problème. Je ne sais pas lequel de ces changements a vraiment fonctionné, mais je les partage tous dans l'espoir d'aider quelqu'un d'autre. Si vous n'avez pas d'en-tête de préfixe, alors je suppose que le problème n'est pas là (ou alors le problème est multiple).
- Supprimez toutes les importations de l'en-tête préfixe qui sont des fichiers du répertoire des produits construits afin que vous puissiez changer le paramètre de construction pour cela ("Precompiled Header Uses Files From Build Directory") sur "No". Assurez-vous qu'il n'est pas également importé indirectement par d'autres importations.
- Supprimez toutes les importations de l'en-tête du préfixe qui utilisent des modules Clang (bibliothèques ou frameworks qui ont un fichier module.modulemap dans leur répertoire Headers, de sorte que vous pouvez écrire du code tel que
@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 de l'en-tête du préfixe sur "Oui". (Je ne pense pas que cela soit nécessaire, et cela ne devrait pas avoir d'effet dans mon propre projet. Je le dis simplement parce que je l'ai changé parce que j'étais prêt à essayer n'importe quoi :))
- Quittez Xcode et supprimez votre répertoire DerivedData/ModuleCache (configuré pour être dans ~/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 l'empêche de fonctionner...