50 votes

Xcode 8 fait une reconstruction complète du projet

Après avoir mis à jour un projet Swift + ObjC vers Xcode 8 (Swift 2.3), j'ai constaté que 50% ou plus du temps Xcode fait une reconstruction complète du projet au lieu d'une construction incrémentale.

Les modifications apportées consistent à ajouter de simples instructions d'impression. Il ne semble pas y avoir de logique quant au moment où une reconstruction complète est effectuée.

Il semble que ce soit dans la phase "Vérifier les dépendances" que cela se décide. Sous Xcode 7, cela ne semblait pas être un problème.

Quelqu'un d'autre a-t-il rencontré ce problème ?

33voto

Vlad Points 61

J'ai trouvé que cela fonctionne de manière cohérente, il compilera cependant les fichiers swift si vous modifiez un en-tête inclus dans l'en-tête de pontage. Il compilera aussi complètement si vous changez de branche git dans les deux sens.

Tout d'abord, assurez-vous que le niveau d'optimisation pour le débogage est défini sur None (pas d'optimisation du module entier). enter image description here enter image description here

Ensuite, selon https://forums.developer.apple.com/thread/62737 Personnel d'Apple (ddunbar) :

Nous pensons que le cadre :

HEADERMAP_USES_VFS = YES

à true dans votre projet (ou pour toutes vos cibles) peut être une solution de contournement efficace > pour de nombreuses personnes. Il n'est pas garanti que cela fonctionne (c'est la raison pour laquelle ce n'est pas > déjà activé par défaut), mais cela devrait fonctionner pour la plupart des projets.

Il faut l'ajouter via "Add user-defined setting" (ajouter un paramètre défini par l'utilisateur) sous votre cible Build Settings (paramètres de construction).

enter image description here

.

enter image description here

12voto

Andrew Carter Points 754

Ok, voici une réponse à la raison pour laquelle ça arrive, mais je ne connais pas la solution. Si vous utilisez le "Other Swift Flag" -driver-show-incremental, Xcode affichera ce qu'il décide de compiler en se basant sur les dépendances. Vous verrez des choses comme :

Queuing EditProfileViewController.swift because of dependencies discovered later
Queuing ChangePasswordViewController.swift because of dependencies discovered later
Queuing JoinViewController.swift because of dependencies discovered later
Queuing JoinProfileViewController.swift because of dependencies discovered later
Queuing FormViewBuildable.swift because of dependencies discovered later
Queuing RadioTextFormView.swift because of dependencies discovered later
Queuing TextFieldFormView.swift because of dependencies discovered later
Queuing AccountProfileViewController.swift because of dependencies discovered later

Je me demande si c'est un problème lié à Swift 3, car je n'avais pas ce problème avant la conversion. J'ai fait un petit projet d'exemple où

Le fichier A comprend un élément du fichier B comprend un élément du fichier C.

et même l'ajout d'un changement de fichier privé à FichierC qui n'est utilisé nulle part fait que FichierA, FichierB, et FichierC sont mis en file d'attente pour la compilation à cause des dépendances. Je vais tester cet exemple dans Xcode 7 plus tard dans la journée pour voir ce qui se passe.

Il semble donc que la résolution de la dépendance du martinet 3 ne fonctionne pas très bien. J'ai testé cela sur 2 autres projets swift 3 au travail, et c'est la même chose. Faites n'importe quel changement dans n'importe quel fichier, et chaque fichier est compilé. Cela ne semble pas lent jusqu'à ce que vous commenciez à avoir des projets d'environ 15 000 lignes de code, ce qui peut être la raison pour laquelle personne ne parle beaucoup de cela. A moins que vous n'ayez une application swift 3 de taille moyenne, vous ne remarquerez probablement même pas que la complication incrémentale ne fonctionne pas tout à fait correctement. Je mettrai à jour si j'apprends quelque chose de plus.

10voto

Johnny Points 726

Apple a publié une nouvelle version bêta de Xcode hier (14 novembre).

Xcode 8.2 beta 2

Et ce problème a été marqué comme résolu dans la note de mise à jour.

Système de construction

- Xcode ne reconstruira pas une cible entière lorsque seulement de petits fichiers changements ont eu lieu. (28892475)

Cela fonctionne pour moi. La vitesse de construction est revenue comme d'habitude. Tous ceux qui sont confrontés à ce problème devraient l'essayer !

https://developer.apple.com/download/

8voto

user1446940 Points 53

Décocher "Find Implicit Dependencies" dans Edit Scheme > "Scheme" > Build tab a réglé le problème pour moi pour les fichiers de projet. "Copy swift standard libraries" prend toujours une éternité

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