Toutes les nouveautés de Xcode 10 pour les développeurs

Nicolas Furno |

Comme tous les ans, Apple a présenté à l’occasion de la WWDC une nouvelle version majeure de Xcode, son outil de développement. La version 10.0 propose de nombreuses nouveautés, à la fois sous le capot, en matière d’interface et de fonctionnalités. Cette mise à jour est actuellement disponible en bêta à télécharger depuis le site d’Apple dédié aux développeurs. Elle sera finalisée et proposée sur le Mac App Store à l’automne pour Mojave et High Sierra.

Xcode 10 bêta

Qu’est-ce qu’Apple propose cette année aux développeurs ? On fait le point !

Un mode foncé sur macOS Mojave

Comme toutes les apps fournies par Apple, Xcode 10 disposera d’un mode foncé quand on l’utilise sur macOS Mojave. Cette présentation assombrie a même été pensée spécialement pour les développeurs, qui réclamaient probablement cette option déjà proposée dans les autres apps créatives d’Apple, de Final Cut Pro à Logic.

Xcode 10 en mode « clair », comme toujours…
… et Xcode 10 en mode foncé, la nouveauté de macOS Mojave.

Comme toutes les autres apps du système, le mode foncé fonctionne automatiquement pour Xcode. S’il est activé dans les Préférences système1, il sera activé aussi dans Xcode 10, et vice-versa. Par défaut, le thème de l’éditeur change en fonction du mode choisi : le thème sombre par défaut de l’app est utilisé quand le mode sombre de macOS est actif. Vous pouvez changer les couleurs de l’éditeur et vos préférences sont retenues séparément pour chaque mode, de quoi avoir un thème personnalisé en mode clair et un autre en sombre. Ou bien systématiquement le même, si vous préférez.

L’autre nouveauté de macOS Mojave en la matière, le choix de la couleur d’accentuation (celle qui s’affiche sur tous les contrôles d’interface), est naturellement disponible pour Xcode. Sur les deux captures ci-dessus, l’app était affichée avec une couleur d’accentuation jaune, voici quelques choix supplémentaires :

Xcode 10 peut changer d’aspect selon vos envies et votre goût, mais uniquement sous macOS Mojave. Notez que certaines icônes restent en bleu quoi qu’il arrive dans la première bêta, un point qui sera peut-être amélioré par la suite.

Ces nouveautés esthétiques sont réservées à macOS Mojave, Xcode 10 sur macOS High Sierra reste systématiquement dans des couleurs claires. Il existe bien une astuce pour tester le mode sombre de 10.14 sur 10.13, mais les résultats sont très inférieurs. Cette même astuce peut toutefois servir à activer le mode sombre pour Xcode seulement, si c’est ce que vous voulez.

Xcode 10 s’intègre aussi à Gitlab et Bitbucket

Xcode 9 simplifiait la vie d’une partie des développeurs en s’intégrant mieux à GitHub, le plus gros service d’hébergement et de partage de code source. Avec cette nouvelle version, Apple poursuit cet effort et crée un pont de la même nature avec deux autres services : GitLab et Bitbucket. Dans les deux cas, on peut ajouter un compte sur une version auto-hébergée ou la version clé en main fournie par les services.

En plus des comptes Apple et des serveurs Xcode, la dixième version de l’app permet d’ajouter trois types de comptes externes : GitHub, GitLab et Bitbucket.

Comme pour GitHub, vous pouvez ajouter votre compte GitLab ou Bitbucket dans les préférences de Xcode (onglet Account) et vous aurez alors quelques fonctions supplémentaires. Par exemple, vous pourrez lister tous les projets associés à votre compte et les cloner en local, tout ça sans quitter l’interface d'Apple. Pour activer cette fonction, utilisez la commande « Clone… » dans le menu Source Control.

L’interface de Xcode 10 qui permet de cloner un dépôt distant, ici sur un serveur GitLab auto-hébergé.

Pour simplifier les liens entre Xcode et les serveurs Git, on peut aussi cloner un dépôt directement depuis l’interface web. C’était le cas pour GitHub, c’est aussi possible depuis GitLab.com et Bitbucket et ce sera bientôt le cas pour les serveurs GitLab hébergés par vos soins. Quel que soit le fournisseur, le principe est simple : un bouton pour cloner directement le projet dans Xcode sera affiché pour les dépôts compatibles, c'est-à-dire ceux qui intègrent un fichier .xcodeproj.

Exemple de projet Xcode hébergé sur GitLab.com, avec le bouton « Open in Xcode ».

L’outil de développement d’Apple dispose par ailleurs de toutes les fonctions attendues pour gérer son dépôt, charger les dernières mises à jour et publier des changements, changer de branche ou en créer de nouvelles, remonter l’historique, etc. La grosse nouveauté de Xcode 10 en matière de gestion de version, c’est bien la mention, directement dans l’éditeur de code, des changements en cours. Jusque-là, Xcode indiquait les fichiers modifiés uniquement en local (« M » affiché dans la barre latérale), mais pas plus. Désormais, on peut savoir ce qui a été modifié, et agir sur les changements en cours.

Ce fichier a été modifié, comme le « M » dans la barre de gauche l’indique. Nouveauté supplémentaire de Xcode 10, les lignes modifiées sont signalées dans l’éditeur de code, par un petit trait vertical. Ici, on peut le noter aux lignes 67, 68 et 81.
On peut cliquer sur ces barres verticales pour agir dessus. Dans ce cas de figure (modification en attente), l’éditeur permet de refuser la modification.

Outre les changements temporaires apportés par vos soins, Xcode signale aussi de la même manière les changements apportés par d’autres collaborateurs et pas encore chargés en local. En cas de conflit, l’éditeur de code les affiche aussi directement au bon endroit.

Xcode 10 simplifiera aussi la vie de tous ses utilisateurs en gérant automatiquement les clés SSH, souvent indispensables pour accéder aux dépôts Git et envoyer des changements. Si la clé n’existe pas, l’app se chargera de la créer et de la transmettre au serveur.

Plusieurs curseurs dans l’éditeur

L’éditeur de code est sans contexte la brique la plus importante d’une app comme Xcode, puisque c’est là que les développeurs passent l’essentiel de leur temps. Avec cette dixième version, Apple affiche mieux les changements liés à la gestion de projet, comme nous l’avons vu dans la partie précédente. Ce n’est toutefois pas la seule nouveauté de la mise à jour annuelle.

L’autre gros ajout, c’est la prise en charge de plusieurs curseurs à la fois, comme prévu. C’est une fonction plutôt courante dans le monde des éditeurs de code, et Xcode 10 rattrape sur ce point son retard. Utiliser plusieurs curseurs permet de modifier rapidement plusieurs éléments similaires dans le code, ou insérer plusieurs fois la même ligne de code.

Dans la première bêta de Xcode 10, il existe plusieurs solutions différentes pour insérer plusieurs curseurs. Vous pouvez tout d’abord cliquer n’importe où en maintenant les touches control (^) et enclenchées. À chaque fois, un curseur supplémentaire est ajouté sous le clic.

Autre solution, utilisez le même raccourci control⇧, mais avec les flèches haut ou bas. Dans ce cas, vous ajouterez un curseur juste au-dessus ou en dessous du curseur initial. Notez sur cette vidéo que les trois curseurs bougent par la suite ensemble quand on les déplace au clavier, que ce soit avec les flèches droite et gauche, ou bien les raccourcis clavier par défaut de macOS (par exemple, ⌘→ pour aller à la fin de la ligne).

La troisième option est pratique pour sélectionner plusieurs lignes en glissant simplement le curseur de la souris, mais elle exploite bizarrement un autre raccourci clavier. Cette fois, il faut presser la touche option (), cliquer et glisser pour insérer plusieurs curseurs. Notez que ce raccourci permet aussi de sélectionner des colonnes de texte.

L’éditeur peut aussi afficher un ruban sur le côté gauche, dédié au « code folding », cette fonction qui permet de « plier » une partie du code, par exemple une fonction entière, pour en simplifier la lecture, ou pour se concentrer sur un élément. C’est une nouveauté de Xcode 10 par rapport à la version précédente, qui avait du mal avec cette fonction de manière générale (elle était désactivée pendant certaines bêtas) et qui n’a jamais restauré le ruban. Ce dernier était pourtant présent dans d’anciennes versions de Xcode, comme nous avons pu le constater sur la version 7.3.1.

Petite nouveauté quand même, le pliage de code ne se limite plus à une fonction complète et reconnue. N’importe quel bloc de code encadré par des {} peut désormais être plié et déplié.

Enfin, signalons une nouveauté discrète pour l’éditeur de code : quand on arrive en bas d’un fichier, on peut continuer à faire défiler l’interface jusqu’à centrer la dernière ligne au milieu de l’écran. Le comportement change selon que l’on utilise le clavier ou le trackpad (ou une souris) : avec le clavier, la dernière ligne reste bien en bas ; avec un défilement, elle est centrée.

Une bibliothèque mobile et plus facile d’accès

Xcode 10 modifie l’emplacement et le fonctionnement de la « bibliothèque » (Library). Jusque-là, elle était située dans la barre latérale de droite, tout en bas. Désormais, elle prend la forme d’un pop-up mobile, un petit peu comme Spotlight sur macOS. Un nouveau raccourci clavier est également associé à cette fonction : ⌘⇧L.

La bibliothèque de Xcode 10, ici qui affiche directement les objets, puisque l’on est dans le mode dédié à la création d’interfaces.
Emplacement de la même fonction sous Xcode 9.3.

Cette bibliothèque a plusieurs fonctions, qui changent selon le contexte. Si vous l’activez dans l’éditeur de code, vous verrez les « Snippets », ces lignes de code que l’on réutilise fréquemment. Xcode fournit quelques extraits courants pour débuter, mais chaque développeur pourra ajouter les siens. Une des nouveautés de cette version concerne d’ailleurs ce point : on peut désormais en créer avec la nouvelle commande « Create Code Snippet », dans le menu Editor.

Depuis Interface Builder, l’outil de création d’interface de Xcode, ce ne sont plus les snippets qui sont affichés, mais les objets. Et si vous utilisez SpriteKit ou SceneKit, son contenu sera ajusté tout aussi automatiquement. Notons que la taille et la position de la fenêtre peuvent être modifiées, ce qui sera utile pour afficher plus d’éléments à la fois, au contraire réduire la bibliothèque sur les petits écrans.

Comme avant, vous pouvez glisser un élément depuis la bibliothèque. La nouvelle interface étant affichée au-dessus du reste, la fenêtre se fermera dans la foulée pour vous laisser travailler. Maintenez la touche option () pour maintenir le pop-up ouvert si vous voulez glisser et déposer plusieurs éléments en une seule fois.

Compiler et déboguer les apps plus rapidement

Pour convertir les lignes de code source en app qu’un Mac ou un iPhone peut exécuter, il y a l’inévitable étape de compilation. Xcode 9 introduisait déjà un tout nouveau build system, Xcode 10 en propose déjà un tout autre ! En test avec la précédente version de Xcode, il est désormais activé par défaut. Il doit améliorer les performances, tout particulièrement pour les projets Swift, et spécialement pour ceux qui sont gros. Il faut dire que c’était un point noir pour les développeurs qui ont adopté le « nouveau » langage de développement d’Apple.

Les résultats varieront d’un projet à l’autre, mais nous avons noté effectivement un gain de vitesse lors de la compilation de notre app iGeneration. Sur le même Mac, un MacBook Pro 13 pouces de 2014, on gagne près de trente secondes lors de la compilation du même projet, simplement en l’ouvrant avec Xcode 10 (1 min 22) plutôt que Xcode 9 (1 min 49). Une nouvelle fonction de l’outil de développement permet, à ce sujet, de mesurer et de mémoriser les temps de compilation.

Xcode 10, pendant la compilation de l’app iGeneration.

Si vous gérez un projet plus conséquent, vous verrez peut-être des changements plus significatifs encore. Et si le nouveau build system casse quelque chose pour votre app, vous pouvez le désactiver et rester sur l’ancien. Ouvrez les paramètres de projets depuis le menu File et changez le paramètre correspondant pour désactiver cette nouveauté. Par ailleurs, notons qu’une session entière a été consacrée pendant la WWDC à cette nouveauté.

Sélectionné par défaut, le nouveau système de compilation peut être remplacé par l’ancien pour les projets qui le nécessitent.

À propos de performances, les tests unitaires sont désormais menés en parallèle, ce qui devrait accélérer cette phase du développement où l’on vérifie que tout fonctionne encore prévu avec des tests automatisés. Xcode lancera autant de tests que le Mac peut en encaisser (cela dépend essentiellement du nombre de cœurs disponibles), et ils peuvent être effectués en série, ou de manière aléatoire. Pendant la phase de debug, où l’on essaie de comprendre pourquoi un bug survient, le chargement des symboles depuis l’appareil iOS, tvOS ou watchOS connecté se fera cinq fois plus rapidement. C’était toujours une étape assez lente en effet sur les anciennes versions de Xcode.

Enfin, toujours dans la phase de compilation et de debug, les développeurs pourront enrichir Instruments de leurs propres outils d’analyse. Cet outil scrute le fonctionnement de l’appareil sur lequel l’app en cours de création tourne et il affiche de nombreuses informations par défaut. Pour les créateurs de jeu, une nouvelle vue spécifique affiche des informations plus intéressantes dans ce cadre et si cela ne suffit pas, les développeurs peuvent remonter les infos qu’ils souhaitent.

Dans la session consacrée à cette nouveauté, Apple explique que c’est aussi utile pour qu’un tiers puisse comprendre plus facilement les données remontées par Instruments. Le développeur de chaque fonction saura où trouver ce qu’il cherche, mais pas nécessairement un collaborateur. Pour lui, une interface personnalisée, avec une partie des informations seulement et peut-être une présentation différente, pourra être utile.

Exemple donné par Apple d’outil spécifique créé pour Instruments : une app de randonnée, qui affiche la quantité de données cellulaires chargées certains endroits prédéfinis.

Prise en charge des nouveautés 2018

Xcode 10 propose plusieurs nouveautés qui correspondent aussi aux nouveautés d’iOS 12, macOS 10.14 et des autres mises à jour majeures annuelles. Par exemple, le catalogue de ressources qui contient toutes les images utilisées par une app peut maintenant distinguer les éléments nécessaires à un mode sombre pour les apps macOS. Chaque ressource est définie comme claire, sombre, soit encore à haut contraste. Les outils dédiés à la création d’interface affichent aussi l’app en mode clair et en mode sombre, pour vérifier sans même compiler le code source si tout va bien.

Par ailleurs, CarPlay s’ouvrira plus largement avec iOS 12, les apps de conduite pourront notamment s’y intégrer. À cette fin, on peut stocker ces ressources spécifiques dans Xcode 10. Enfin, iOS 12 offre de nouvelles options d’optimisation des ressources et vous pourrez tout apprendre à ce sujet dans cette session.

Autre nouveauté de macOS Mojave, l’Apple Notary Service, un système qui certifie non plus seulement un développeur, mais aussi une app spécifique (lire : Sécurité : dans macOS Mojave, un notaire pour arrêter les frais). Ce sera utile si un malware se glisse au sein d’un catalogue légitime d’apps, Apple pourra bloquer l’app fautive seulement, et pas le compte complet. Cette certification app par app n’est pas encore obligatoire, mais elle le sera bientôt et Xcode 10 est prêt dès aujourd'hui. Lors de l’export d’une app macOS, on peut choisir de la faire transiter par les serveurs d’Apple pour la certifier.

Au moment d’exporter une app macOS, Xcode 10 propose de faire transiter le fichier par les serveurs d’Apple pour une certification. Pour l’heure, l’option d’export signé simple reste disponible, mais ce ne sera probablement plus le cas à terme.

Tout le reste

Nous avons abordé de nombreuses nouveautés, mais il en reste encore. Comme tous les ans, la liste est longue, avec des ajustements dans la majorité des fonctions de Xcode. Il y a du nouveau pour les « Playgrounds » Swift avec des fonctions spécifiques pour l’intelligence artificielle, du nouveau pour les traductions des apps et encore plein d’autres choses.

Xcode 10 est pensé pour fonctionner en parallèle de Xcode 9, et ainsi servir aux développeurs à découvrir les nouveautés sans abandonner leur projet en cours. Cette version sera indispensable pour profiter des nouveautés des systèmes d’exploitation en 2018.


  1. Dans le panneau « Général », c’est le premier réglage proposé par macOS 10.14. ↩︎

avatar maatthieu | 

Hello, 1 min 22 pour compiler ca me parait encore énorme :/
Rassurez moi : il existe un moyen de compiler incrémentalement et donc rapidement si je veux tester une petite modif non ? (moi je fais des webapp en js et php)

avatar pecos | 

"Petite nouveauté quand même, le pliage de code ne se limite plus à une fonction complète et reconnue. N’importe quel bloc de code encadré par des {} peut désormais être plié et déplié."

Non... c'est pas vrai ?
XCode 10 arrive à faire aussi bien que XCode 3 (de 2009) et jusqu'à XCode 6 (de 2015) que j'utilise à cet instant ?
MERVEILLEUX !

Quelle évolution majeure de la part d'Apple ! ^_^

Bon ben ils n'ont plus qu'à refaire cette merde de compilateur Swift afin que (comme sous obj-c que je persister à utiliser) la compilation se déroule en quelques secondes.

On devrait y arriver.
Au rythme où va apple et vu l'arrivée très rapide du code folding, ça ne devrait pas prendre plus d'une petite dizaine d'années.
Notez que d'ici là je serais à la retraite.

avatar IGerard | 

@pecos

La retraite c’est maintenant :P

avatar Larme | 

Enfin le retour du fold facile, mais aussi sur des scopes et plus que sur des fonctions.
Cette feature perdue depuis Xcode 8 me manque terriblement.
On sait qu'il faut réduire le nombre de lignes de code par méthodes, mais parfois, sur du legacy code, c'est pratique quand même quand on veut factoriser ou que les deux méthodes qu'on regarde d'un coin de l'œil sont trop espacées entre elles, en le laissait par exemple que les éléments importants :
if quelqueChose == quelqueChoseDAutre
{//fold}
else
{//fold}

avatar tleveque | 

A chaque année Apple tente de rattraper son retard vis-à-vis les autres IDE.... mais ils sont encore tellement loins!!
Ça m’a tellement fait rire quand à la conférence sur Xcode ils ont fait la démo du multi curseur. Les gens dans la salle se sont mis à applaudir et a crier d’extases! Réveillez vous! Ça existe depuis des années dans d’autres IDE!!
Les produits de Jetbrain sont l’exemple parfait. Ce n’est pas pour rien qu’Android Studio fonctionne sur leur plateforme IntelliJ.

Allez Apple. Au boulot!

avatar lawappe | 

@tleveque

Tout à fait d’accord !

Et l’inspiration de VS Code est également flagrante.

avatar fte | 

@tleveque

"Allez Apple. Au boulot!"

Ce que j’aimerais déjà, c’est une journée entière sans relancer Xcode parce qu’il a planté, bouffé toute la mémoire, ralenti au point de mettre plusieurs secondes pour afficher un caractère...

Ce n’est pas Xcode 10 qui va améliorer les plantages je suppose. La beta actuelle est une catastrophe, et depuis quelques années les finales plantent plus que les beta.

Heureusement qu’il y a AppCode. Quel misère ce serait sinon.

avatar IGerard | 

Le gros du boulot intéressant au niveau de l’IDE il est à voir du côté du débug Metal... impressionnant.

Clairement pourquoi pas beaucoup de moyens dans ces équipes fondamentales ???

avatar Vivid | 

Je pense a Code Warrior et a côté MPW, l'IDE d'Apple déjà très mauvais... il ont du faire de la rétention d'information au passage d'osx pour retarder la concurrence mais surtout faire couler CW.
Je passe a GTK+.. pour être le plus possible indépendant d'Apple.

avatar BeePotato | 

@ Vivid : « Je passe a GTK+.. pour être le plus possible indépendant d'Apple. »

Bon courage.

avatar Domsware | 

Je suis étonné de temps de compilation aussi longs indiqués par certains commentaires. Pour certains projets spécifiques cela peut se comprendre mais pour la grande majorité des projets non. Le soucis peut notamment provenir du projet lui-même et non de Xcode, par exemple avec la mauvaise intégration de composants externes ou bien une machine sous-dimensionnée.

Par expérience, sur des dizaines de projets, sous un 💻 de 2013 je n’ai jamais eu de longs temps de compilation.

avatar Deckard | 

Il y a des nouveautés dans Xcode 10 qui sont pour d'autres personnes que les développeurs ? :p

avatar ziggyspider | 

Le développement s'adresse quand même avant tout aux développeurs. Il va te falloir pas mal d'imagination pour trouver une autre utilité à Xcode …

avatar Deckard | 

Tu n'as pas compris le sarcasme qui vise titre de la news qui inclut la précision inutile « pour les développeurs »...

CONNEXION UTILISATEUR