129 votes

Xcode 8 recompile le code complet à chaque fois

Avec n'importe quel changement dans le code (bien que le fichier ne soit pas dans .pch), le projet complet se recompile à chaque fois.

34voto

Dinh Nhat Points 171

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 :

enter image description here onglet "Build Setting" -> "C Language Dialect" -> Changez-le en "Compiler Default".

A titre de référence :

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 !

19voto

Madhuri Mane Points 213

Allez dans Produit -> Schéma -> Modifier le schéma. Sélectionnez Build dans la colonne de gauche et décochez " Trouver les dépendances implicites "

Mais ce drapeau doit rester coché lorsque vous construisez le projet pour la première fois

7voto

La solution pour moi a été de fermer le storyboard, j'avais le fichier source ouvert avec l'éditeur assisté et le fichier storyboard ouvert également (fermer le storyboard --- puisque je n'y apportais aucune modification) a supprimé toutes les compilations inutiles.

5voto

anders Points 355

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.

3voto

Christopher Rogers Points 2807

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).

  1. 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.
  2. 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).
  3. 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 :))
  4. 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...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X