Xcode 9.2 accélère les compilations de Swift

Nicolas Furno |

Une nouvelle option permet d’accélérer la compilation des projets en Swift dans Xcode 9.2, la dernière version de l’outil de développement d’Apple. Si vous avez installé cette mise à jour disponible depuis le début de la semaine, vous pouvez gagner du temps lors de la compilation, cette étape qui transforme les lignes de code en une app prête à l’emploi.

Xcode 9.2 pendant la compilation de notre app iOS. Cliquer pour agrandir
Xcode 9.2 pendant la compilation de notre app iOS. Cliquer pour agrandir

Apple n’a pas activé directement cette compilation plus rapide et l’option n’est même pas accessible depuis l’interface. C’est une fonction expérimentale, à activer avec cette ligne de commande (pensez à quitter Xcode avant de l’utiliser) :

defaults write com.apple.dt.Xcode  BuildSystemScheduleInherentlyParallelCommandsExclusively -bool NO

Si quelque chose ne fonctionne plus après avoir modifié cette option, vous pouvez revenir en arrière en utilisant la même ligne de commande, mais avec YES à la place de NO à la fin. Autre précision importante, cette accélération n’est disponible qu’avec le build system traditionnel, et pas pour celui en Swift proposé en option depuis Xcode 9.0. Ce dernier exploitait déjà les avancées introduites par la nouvelle option.

À l’usage, le gain dépendra de chaque projet et il sera d’autant plus sensible que l’app est complexe. Nous l’avons testée sur iGeneration, notre app iOS développée exclusivement en Swift 4, et nous avons noté un gain significatif. Alors qu’une compilation à partir de zéro demandait deux minutes et quarante secondes par défaut, elle ne nécessitait plus qu’une minute et cinquante secondes après avoir utilisé l’option. Soit un temps de compilation réduit d’environ un tiers, ce qui n’est pas si mal pour une seule ligne de commande.

Cliquer pour agrandir
Cliquer pour agrandir
avatar zarghol | 

Pas mal ! J’utilise le nouveau build system depuis le début de la semaine, donc pas besoin d’activer cette option pour moi :)

avatar pecos | 

Ce temps de compilation est littéralement pathétique, comment faites vous pour travailler dans ces conditions ?
Je développe depuis 2009 des apps pour iOS, en objective-C, comparables à la vôtre en terme de taille et de complexité.
Cela ne prend que 10 secondes pour compiler après avoir demandé la commande "clean" afin de faire repartir la compilation de zéro.

Et de 2 à 3 secondes dans tous les autres cas.
(pour obtenir ces valeurs j'utilise XCode 6, c'est le plus rapide. XCode 8 est déjà plus lent, même en Obj-C. Je n'ai pas essayé encore XCode 9 mais je crains le pire.)

Comme pourrais-je travailler comme vous le faites alors qu'il m'arrive souvent de demander UNE COMPILATION PAR MINUTE de temps de travail ???
(obligatoire quand toute l'interface est programmée en code et pas avec interface builder : le moindre changement du code ne peut être apprécié que dans le simulateur, visuellement)

A la fin de la journée d'après vous en Swift ça ferait combien de temps de perdu ?
C'est délirant une lenteur pareille on se croirait revenu dans les années 80 !

Et surtout qu'aucun ne commence à me dire que mon projet doit ressembler à un "hello world" et que c'est bien normal que ça aille vite. Je ne gagne pas ma vie depuis bientôt 10 ans en vendant des "hello world".

avatar minitoine | 

Ah, toi aussi tu es un adepte de la construction d'interfaces dans le code ? :D
Nous ne sommes pas seuls !

(La différence doit être là)

Sachant qu'ils n'indiquent pas non plus la machine pour compiler. C'est peut être un macbook.. (J'espère pour eux)

avatar BeePotato | 

@ minitoine : « Ah, toi aussi tu es un adepte de la construction d'interfaces dans le code ? :D »

Juste par curiosité (une sorte de sondage, quoi) : pour quelle raison, ce passage par du code plutôt que par IB ?

avatar Domsware | 

@BeePotato

De mon côté je me sers de IB pour dégrossir les enchaînements de vues, la navigation et aussi comme d’un bloc note pour poser une interface rapidement. Après pour contrôler finement je passe par le code.

Sinon je n’ai pas de préférences : j’ai des applications faites en majorité avec IB et d’autres entièrement en code.

avatar Rez2a | 

@pecos

Essaie de prendre un ton encore un peu supérieur non ?

Sinon tout le monde n’a pas besoin de compiler une fois par minute, on ne sait pas ce que donne leur temps de compilation sans faire de clean, on ne sait pas non plus le nombre de frameworks liés, etc. ; et va savoir, le temps qu’ils perdent à la compilation, ils le regagnent peut-être en utilisant IB plutôt qu’en faisant toute l’interface en lignes de code.

avatar pecos | 

Quel ton supérieur ???

Je dis juste que des temps de compilations aussi démesurément longs pour une petite app comme iGénération c'est indigne d'Apple en 2017 et avec les machines qu'on a.

Et que je ne vois pas bosser de cette façon.

Qu'apple revoie sa copie, tant pour XCode que pour le compilo de Swift et on verra.

"Tout le monde n'a pas besoin de compiler une fois par minute ?"
Ben tiens...
Je me rappelle dans les années 80 on laissait les machines compiler le week end tellement c'était long. Hé hé... on y revient peut-être...

Mais au passage, si c'est un festival de bugs ces derniers temps chez Apple (iOS 11 et HighSierra), le fait que les devs d'Apple ne puissent pas compiler super vite pour vérifier la moindre modif y est peut-être pour quelque chose, non ? ;-)

avatar bobdu87 | 

xCode est devenue un usine a gaz digne de visual studio... compiler un simple "hello world" demande un diplôme d'ingénieur... alors que la ligne de commande est infirment plus simple et rapide...

avatar IGerard | 

@pecos

Les temps de compilation sont déterminants dans ton boulot aujourd'hui ?

Il faut peut être plus penser avant alors

Je crois qu'au contraire les temps de compilation plus courts nous rendent moins précautionneux

Cela dit, oui, pour Swift, ça mériterait sans doute des équipes de dev bien plus conséquentes...

avatar Ducletho | 

@IGerard

Hyper contrôle de pecos va dans le sens de précautionneux. Du coup, j’ai du mal à suivre ton raisonnement ?

avatar IGerard | 

@Ducletho

Je ne dis pas que Pecos n'est pas un mec sérieux, je pense au contraire qu'il est comme tu dis dans le contrôle maniaque :) ce qui est sans doute une qualité ici

Mon propos est que le temps de compilation courts sont une incitation au Quick & Dirty ...

Moi c'est le temps que ça prend à la fin de la compilation qui me rend fou... le packaging est d'une lourdeur sans nom ...

avatar bobdu87 | 

Comme sous visual, j'ai le temps de compiler et lancer mon programme 10 fois sous linux pour le temps d'une compilation/exécution sous windows...

avatar bobdu87 | 

@IGerard
On peut aussi programmer proprement et avoir une compilation rapide.

Décidément tout est bon pour éviter de critiquer la pomme...

avatar IGerard | 

@bobdu87

Non, tu n'y es pas... je suis d'accord, ça mériterait bien mieux

On peut même se demander si Lattner qui était le patron de tout cet outillage n'est pas parti parce que justement cette équipe n'a pas les moyens de ses ambitions

Perso ce qui me gêne le plus la dedans ce sont les bugs, le refactoring qui est rudimentaire...

Les temps de compilation ça se gomme plus facilement...

avatar Domsware | 

@bobdu87

Je ne sais pas s’il s’agit de programmation propre mais en tout cas je n’ai pas ces temps de compilation chez moi, loin de là.

Sans plus d’informations la ou les causes de ces temps importants ne peuvent être déterminés. Donc taper sur Xcode c’est une erreur.

avatar fte | 

@IGerard

"Je crois qu'au contraire les temps de compilation plus courts nous rendent moins précautionneux"

Ce ne sont pas les temps qui rendent moins précautionneux, ce sont les gens peu précautionneux qui sont peu précautionneux. Les gens précautionneux ne sont pas rendus moins précautionneux, un compilateur peut attendre son développeur.

Par contre lorsque tu développes un algorithme et itère tout au long de la journée, chaque poignée de secondes perdues à chaque cycle use la patience et constituent cummulées une demi-heure, une heure, plus parfois, à la fin de la journée. Impact important et direct sur la tension nerveuse et la productivité. À la fin d'un mois ça se mesure en jours perdus.

J'ai toujours équipé mes développeurs en machines de course pour ça entre autres.

avatar IGerard | 

@fte

Tu t'es fait avoir par le discours de tes développeurs ?

avatar fte | 

@IGerard

Ah non, c'est mon discours et ils n'ont rien demandé avant que je fournisse. Ma politique est assez simple : machine puissante, 2 27" minimum, clavier, souris et chaise à choix jusqu'à 1000 CHF sans poser de question.

avatar IGerard | 

@fte

Dev Mac ?

Tu embauches ? ;)

Au niveau matos je ne vais pas me plaindre on m'a équipé d'un bon MBP 2015

Mais dans le reste de la boîte c'est chiche, écran 24 pouces de mauvaise qualité et petit PC pas bien fameux pourtant un grand groupe qui marche fort... bon on a des locaux de rêve depuis peu pour attirer les bon éléments.

avatar fte | 

@Rez2a

Essaie de prendre un ton encore plus passif agressif.

avatar ovea | 

@fte

Passif agressif — j'adore cette tonalité très chamarré de la vie ?

P'tit problemo de load balencing

avatar IGerard | 

@pecos

Ha tiens ... Pecos

Tu arrives à vivre de ton boulot sur iOS, des applications personnelles ou bien du service ?

avatar pecos | 

Applications personnelles payantes.
Ça eut payé plus, mais ça suffit toujours.
Pour combien de temps je l'ignore.

avatar MacMarc | 

En même temps, à moins que je sois complètement à côté de la plaque, l'utilisation de Swift évite justement de devoir compiler à chaque fois qu'on veut tester les dernière ajoûts de lignes de code...

Ce qui doit être infiniment plus intéressant côté gain de temps, globalement.

avatar bobdu87 | 

2 mn 40 pour compiler ca LOL!!!!
Des centaines de classes en C++ avec quelques centaines de milliers de ligne de code, ca compile en moins de 30 secondes sous linux... LOL!

avatar maatthieu (non vérifié) | 

Je suis d'accord avec pecos : je développe tous les jours en javascript et je dois compiler pour voir le résultat. Là j'aimerais bien changer et coder pour ios mais ça fait vraiment peur d'attendre 2 minutes la compil... c'est extrêmement lent.

avatar dk53 | 

C'est une compilation from scratch les gars hein. Quand tu compiles 50 fois par jour tu fais pas 50 clean avant, les fichiers déjà compilés ne le sont pas une deuxiemme fois.

Quand aux temps de compilations de pecos, en swift c'est juste impossible. Dès que t'a un projet un peu gros avec des frameworks tes temps de compilations explosent.

avatar LaurentH | 
Faire du C++/ObjC sur Xcode 6 pourquoi pas, mais pour l'app tvOS, watchOS, et iOS 11 ça va être chaud. C'est vrai que compiler du Swift ça rame un peu, mais je suis sûr que le team Xcode va continuer a améliorer les choses. Sinon le meilleur compilateur sur Mac ça restera LightspeedC.
avatar pecos | 

J'ai juste une question candide : est-ce qu'au moins une fois de temps en temps vous ne vous demandez pas si Apple va dans une (très) mauvaise direction ?

Je dis ça parce que si l'on en croit ce qui est dit dans l'article et surtout son titre, tout va bien, madame la marquise.
Le choix du mot "accélère" est très révélateur.

Personnellement, si j'avais écrit le même article, j'aurais choisi comme titre :

" XCode 9.2 améliore un peu l'extrême lenteur des compilations en swift ".

Ce serait plus objectif.

Il faut bien comprendre que quand on accélère d'un facteur 38 % quelque chose qui devrait être à la base 50 fois plus rapide, compte tenu des machines surgavées en cœurs et en RAM qu'on a de nos jours, y a comme un problème.
-------------
Au passage, même le compilateur Obj-C n'est plus ce qu'il était : comme je l'écrivais, le même soft avec XCode 6 sous mavericks est 3 fois plus rapide à compiler qu'avec XCode 8 sous Sierra. (from scratch of course).
Quand à la liaison entre XCode et le simulateur, c'est à l'avenant : de plus en plus lent à réagir.
Et tout ça sur une machine à base de core i7 gavée de RAM jusqu'à la gueule et avec deux SSD comme volumes de travail.

(Bon de toute façon vu les bugs avec l'appstore lus sur un autre article, tout ça a-t-il vraiment de l'importance ? ^_^ )

avatar IGerard | 

@pecos

Bravo en tous cas pour en vivre !

Oui, on se dit qu'ils ne mettent pas autant de moyens qu'ils devraient

Quand on voit le boulot exceptionnel en hard et en soft pour le X ... si on oublie les bugs... on se dit que tout n'est pas perdu

avatar Domsware | 

@IGerard

Je ne suis pas du tout d’accord avec cela selon mon expérience pro. Bien sûr Xcode a des hauts et des bas comme toute application.
Néanmoins chaque année voit son lot de nouvelles fonctionnalités et d’améliorations des anciennes.

avatar IGerard | 

@pecos

Peut être que Lattner est moins fort qu'on le croit

Toutes ces énormes évolutions au niveau tool chain c'est à lui qu'on les doit ;)

ObjC c'est alourdit c'est sur avec toutes les nouvelles fonctionnalités

Crise de croissance tout ça

Et pourtant ils sortent un X innovant au niveau hard TPU, FaceID... et l'iPad pro avec iOS 11 est une belle avancée

avatar ovea | 

Juste une question ?

Compilation, ça veut dire déploiement sur toutes les cibles iOS/iPhone/iPad ?

Non parce que j'imagine le nombre de machines virtuelles se multiplier sur le Mac, affichant, chaque machine chaque iOS, toutes affichant un «hey ! Ça va ?»

… c'est possible de répondre globalement ?!?!

CONNEXION UTILISATEUR