Lyft raconte le voyage en Swift de son app iOS

Florian Innocente |

Est-il raisonnable aujourd'hui de réécrire entièrement son app iOS en Swift, le tout nouveau langage de développement dévoilé par Apple en juin 2014 ? Lyft a tenté l'aventure et se dit aujourd'hui satisfait du résultat.

Lyft est un système de covoiturage payant. Lancé à San Francisco en 2012, il est présent maintenant dans 60 villes américaines de 30 États. C'est le numéro 2 du secteur derrière Uber. Les conducteurs et leurs passagers se mettent aussi en relation au moyen d'une app pour iPhone.

L'app de Lyft

Lyft a raconté à FastCompany son voyage en Swift, sans entrer dans les arcanes techniques du langage mais plutôt pour relater le déroulement de cette opération. Chris Lambert, le directeur technique de Lyft, a d'abord observé d'un oeil circonspect l'arrivée de ce langage et la perspective de l'utiliser pour l'app « Au tout début, on a vu ça sous l'angle d'une expérimentation, de quelque chose de très risqué ».

Évaluation en septembre

Un an plus tard, l'app a été revue de fond en comble à l'intérieur et elle fonctionne sans accroc majeur. Lyft a adopté Swift à 100% et juge son processus de développement plus efficace.

Initialement, un développeur de l'équipe a jaugé la faisabilité de cette reconversion et conclut qu'il était possible d'avoir une app réécrite de zéro, et fonctionnelle, avec les outils existants.

Martin Conte Mac Donell, le premier développeur sur l'app en Swift, à droite. Crédit FastCompany

L'éditeur n'a pas réalisé cet effort pour la simple beauté du geste, c'était aussi un moyen de remettre à neuf une app dont les fondations se faisaient vieillissantes. Lyft est né en 2012, sur la bases d'un précédent service de covoiturage lancé plusieurs années auparavant. Une app iOS a donc été conçue en 2012 et reçu plusieurs évolutions au fil de la croissance de l'entreprise et de ses services.

Nous étions une entreprise très différente en 2012 lorsqu'on a commencé à travailler sur ça. On a, grosso modo, bricolé Lyft à deux en l'espace de 15 jours. Une bonne partie des "péchés capitaux" qui datent de cette époque nous suivent encore aujourd'hui. Mais c'est toujours ainsi que l'on commence.

Durant ces trois dernières années, la plupart du code avait été réécrit, explique Chris Lambert, le directeur technique, « toutefois certains gros morceaux essentiels faisaient de la résistance. On aurait fait une app très différente si on avait tout repris depuis le début. »

Le basculement sur Swift pouvait être l'occasion de le faire et de gommer les défauts accumulés dans l'app. Mais il n'y avait pas d'assurance absolue que cela fonctionne. Un développeur qui venait d'être embauché — Martin Conte Mac Donell — a donc été affecté à ce projet en septembre 2014.

Feu vert en janvier

Il a fait ses premières armes avec Swift et obtenu un prototype au bout d'un mois. Une version sommaire de l'app qui permettait de commander une voiture. Un premier jet qui s'est avéré aussi surprenant que prometteur « J'ai été capable d'être vraiment très productif sur une période temps assez réduite » dit-il.

Forte de la bonne impression de son développeur, la direction de Lyft a décidé, en janvier, de poursuivre l'aventure et d'y mettre plus de moyens. En mars, des développeurs supplémentaires ont été affectés au projet. Les deux versions Objective-C et Swift ont reçu en parallèle les mêmes nouvelles fonctions.

Basculement au printemps

En juin dernier, tous les développeurs iOS de l'entreprise — leur nombre n'est pas donné — travaillaient sur la version en Swift. Il a fallu 2 à 3 semaines en moyenne à chacun pour qu'il s'acclimate à ce langage (depuis l'année dernière, Apple y a aussi apporté de multiples améliorations et lancé la version 2 à la WWDC 2015, ndr).

Pendant cette période, l'application Lyft a été réaménagée pour améliorer son fonctionnement lorsqu'on avait réservé un véhicule. Ce qui a occupé quelques personnes pendant un peu plus d'un mois, a pu être effectué en Swift par un seul ingénieur en une semaine, constate Martin Conte Mac Donell.

La précédente app représentait environ 75 000 lignes de code tandis que sa cousine en Swift, pour les mêmes fonctions, a été ramenée à un moins d'un tiers de ce volume. Un allègement bénéfique pour la relecture et la maintenance du logiciel.

Apple a suivi de près cette opération de réécriture, les concepteurs de Swift travaillaient avec leurs homologues chez Lyft : « On était l'un des plus gros projets de réécriture en Swift, ce qui nous a naturellement confrontés aux plus gros écueils » poursuit Martin Conte Mac Donell.

Les gens d'Apple ont utilisé les retours sur ce projet pour corriger au fur et à mesure leur propre langage. Il y avait des échanges réguliers entre Lyft et Apple lorsque quelque chose bloquait. Une assistance toute particulière dont tous les éditeurs engagés dans le même processus ne peuvent évidemment bénéficier.

Une fois l'app suffisamment avancée, elle a commencé à être testée par des passagers et conducteurs (conducteurs parmi lesquels se trouvent justement des salariés de Lyft qui mettent ainsi du beurre dans les épinards tout en testant leur service). Un bêta-test à petite échelle qui a permis de repérer quelques bugs ici ou là.

L'étape suivante était la plus périlleuse puisqu'il s'agissait de mettre la nouvelle app entre les mains de tous les utilisateurs. Un quitte ou double, explique Chris Lambert en comparant avec son expérience sur Android.

L'une des problématiques c'est que vous ne pouvez pas distribuer la mise à jour d'une app iOS de manière graduelle. Android a un petit avantage sur ce point, vous pouvez décider de lancer auprès de 1%, 5% ou 10% des utilisateurs. Avec iOS, c'est tout ou rien. Si c'est disponible, ça l'est pour tout le monde. Ce qui met une pression importante sur les ingénieurs. Tous les utilisateurs qui ont activé la mise à jour automatique recevront la nouvelle app dans l'heure qui suit.

La version Swift de Lyft — 3.1 — a été lancée le 16 juillet, avec comme seule indication que tout avait été refait mais sans citer spécifiquement le langage. Aucun problème majeur n'est venu entacher ce lancement, à en croire ses auteurs.

L'app suit un rythme de révisions quasi hebdomadaire. Les notes de versions des 7 dernières mises à jour montrent qu'il s'agit uniquement de correctifs. Cependant, c'était déjà le cas avant cette mouture en Swift. Les nouvelles versions de Lyft ne se reposaient jamais très longtemps sur l'App Store. La refonte n'a pas empêché cette stratégie de révisions rapides.

Swift présenté en juin 2014

Désormais que Lyft a son app en Swift, le plus gros du travail est fait, estime Conte Mac Donell. L'entreprise est maintenant sur les rails pour suivre la direction qu'entend donner Apple : «Utiliser des outils modernes nous ouvre les portes pour tout ce qu'Apple a en tête — nouvelles plateformes, nouveaux appareils. Tout va tourner autour de Swift ». Pour cet éditeur, il ne sera pas nécessaire de courir pour se mettre au diapason de ces éventuelles nouveautés.

Source
Tags
avatar heret | 

Moi aussi je roule en Swift, et avant Apple :P

avatar ErGo_404 | 

Je me posais la question justement. Je n'ai jamais fait de dev sur iOS et je me demandais s'il n'était pas plus intéressant de commencer directement sur Swift.
Après, ils se disent plus productifs avec ce langage mais le ressenti que j'ai c'est surtout que le passage au Swift leur a permis de faire un très gros refactoring et que c'est surtout ça qui leur est bénéfique. Ils auraient peut-être eu le même gain de productivité en ré-écrivant leur code en Objective C, d'autant qu'ils maîtrisaient déjà ce langage.

avatar occam | 

Le même gain de productivité en ré-écrivant leur code en Objective C? Non. Et il ne fait pas de doute que pour Apple, Swift a déjà remplacé Objective-C. En plus il faut considérer les synergies possibles. Exemple:
Un projet de DB sur lequel je travaille est en cours de ré-écriture en C# (pour le serveur).
Les clients OS X et iOS sont développés en Swift (à terme, en Swift 2). Des ingénieurs formés au framework .NET y participent. Avant, avec Objective-C et Cocoa, ça grinçait. Depuis le passage à Swift, la productivité est presque à parité avec C#. C'est fluide, ça se traduit bien, ils aiment.

avatar Domsware | 

@ErGo_404 :
Je suis passé à Swift pour mon prochain jeu : le développement est bien plus rapide qu'en Objective-C.

Après cela est personnel puisque lié à mon expérience. Swift me rappelle en effet l'Ada et j'y retrouve beaucoup de mes réflexes.

avatar BeePotato | 

@ ErGo_404 : « ls auraient peut-être eu le même gain de productivité en ré-écrivant leur code en Objective C, d'autant qu'ils maîtrisaient déjà ce langage. »

Je le pense aussi. Honnêtement, il n’y a rien de révolutionnaire dans Swift qui permettrait de façon magique d’être beaucoup plus efficace qu’en Objective C pour le développement d’une application de ce type (je précise ça, car pour du développement ne concernant pas du tout l’interface graphique, là je trouve qu’il y a de sérieuses possibilités de gain avec Swift par rapport à Objective C).

Un des plus gros avantages de Swift est pour les développeurs Java/C# qui ont beaucoup plus l’impression de se retrouver en terrain connu alors qu’ils faisaient la tête face à du code Objective C — alors que franchement, comme l’a souligné oomu, ce genre de détail s’efface vite devant l’apprentissage de Cocoa. D’une certaine façon, cet « avantage » est un peu regrettable, car on perd un filtre qui permettait de repérer les moins motivés.

M’enfin, c’est quand même pas mal, Swift, faut pas croire que je critique, là. :-)

avatar Gulivert | 

Je ne connais pas l'objectice-c, j'ai entrepris la tâche d'écrire une app osx. Me posant la question, faut-il apprendre l'objective-c ou le swift je suis parti sur le net à la recherche de cette réponse et tous les sites que j'ai trouvé anglais ou fr sont unanimes: il faudrait commencer par l'objective-c. Du coup je suis parti dans cette direction et commencer l'app sous l'objective-c que j'ai vite trouvé très complexe ! Du coup je me suis tiens essaye de faire la même chose en swift maintenant qu'une base est posé et la conclusion est qu'il m'a fallu 3 jours d'objective-c pour poser les fondations et avoir les premières fonctions qui fonctionnent en objective-c et que le même travail fut fait en un jour dous le swift. Je viens des languages tel que C#, java, javascript, php, html et dans le swift j'ai tout de suite trouvé mes marques que je ne n'ai pu trouvé dabs l'obj-c.... Pour cause je ne connais pas le C et je n'ai que quelques bases de C++

avatar oomu | 

apprenez C quand même. C'est un langage que vous pouvez retrouver dans toutes sortes de projets anciens ou de logiciels proches du matériel. On ne sait jamais et ça coute rien.

-
Mais le langage est dans le fond presque anecdotique en comparaison des outils de développements (ide), frameworks (Cocoa, J2E, .Net, etc) et environnement système (serveurs applicatifs et autres considérations).

Soyez flexible avec les langages.

avatar fredix | 

@Gulivert :
Il y aura toujours des biens pensant qui diront qu'ils faut apprendre le C puis objectiveC avant, voir même l'assembleur en premier histoire de bien te dégoûter .. Fonce sur Swift l'important est d'être productif ....

avatar BeePotato | 

@ fredix : « Fonce sur Swift l'important est d'être productif .... »

Ben justement, pour faire du développement avec Cocoa (ce qu’il dit vouloir faire), on a plus de chances d’être productif en ayant aussi des connaissances en Objective C, qui aideront à mieux comprendre le framework.

avatar bunam | 

Sympa l'article !

Je viens de voir un truc dans le logo de Swift :
- Une éclipse : les ailes de l'oiseau forme un soleil et il y a la lune en haut à gauche pour faire l'éclipse.
- j'ai toujours trouvé l'oiseau agressif.

Il faut savoir que Sun est l'inventeur de java, donc pour moi la symbolique est là : Swift veut éclipser Java, Java le symbole actuel d'Android.

IBM a déjà utilisé cette image avec l'IDE Eclipse concurrent de celui de Sun NetBeans

avatar jojo5757 | 

@bunam :
J'en veux de ton produit ! C'est de la bonne !!

avatar bunam | 

J'en ai pas ;p

avatar Sostène Cambrut | 

Ivre, il désactive AdBlock et clique sur une bannière.

Merci !

avatar apocrypha | 

Existe-t-il un bon bouquin en français pour apprendre Swift ? Merci.

avatar bunam | 

un bundle gratos vient de sortir :
https://creatable.co/freebies/the-creatable-free-mac-bundle/
il contient :
Code Cookbook for Swift

Code Cookbook for Swift is a set of concise recipes for Apple's Swift language. Learn and practice Swift, the easy eay. Over 120 simple and practical "recipes" included for most of your everyday coding needs! And if you want to try/test the code, just do it from within the app!

Min Requirements: OS X 10.7 or later, Intel 64-bit processor

CONNEXION UTILISATEUR