Développement Swift / iOS : Améliorer la qualité de son code grâce à SwiftLint

La qualité du code est actuellement LE sujet dans le monde du dev (et avec raison !). Si vous êtes développeur.se pro et passionné.e, vous n’êtes sans doute pas passé à coté !

Donc, si le TDD est votre religion, que vos tests unitaires sont nickels et couvrent 100% du code, qu’Xcode ne retourne plus un seul warning, et que Sonarqube est devenu votre meilleur ami… Et bien vous pouvez encore vous améliorer, grâce à SwiftLint !

Si Sonarqube fera l’objet d’un autre article de blog, je vais aujourd’hui vous parler de SwiftLint.

SwiftLint, c’est un outil créée et maintenu par Realm pour améliorer le respect des conventions d’écritures en Swift, disponible ici : https://github.com/realm/SwiftLint

Comme souvent, il y a plusieurs manières de l’intégrer dans un projet, personnellement, j’aime bien Cocoapods !

Comme code d’exemple, je vais reprendre la démo « InfoKayak », mise à jour pour Swift 5.

Sans SwiftLint, Xcode 11.3 ne trouve rien à redire au code (pas de warning, pas d’erreur) :

Editez maintenant le fichier Podfile en y ajoutant la ligne :  » pod ‘SwiftLint’  » :

Mettez à jour et installer les pods, puis rouvrez le projet avec Xcode. Pour le moment, il n’y a pas de changements 🙂

En fait, pour activer SwiftLint, il faut un petit script. Dans les « Build Phases » du projet, cliquez sur le « + » , ajoutez une « New run script phase », et mettez-y ce script :

On Build et Oh ! 286 warnings et 22 erreurs 😦 WTF ?

Allez, avant de faire un burn out, une bonne nouvelle, SwiftLint est capable de corriger automatiquement une grosse partie de ces problèmes 🙂 .

Pour cela, depuis un terminal, mettez vous dans le dossier de votre projet, et exécutez la commande « ./Pods/SwiftLint/swiftlint autocorrect« .

Ensuite, effacez le dossier de build d’Xcode, et au besoin, relancez l’IDE. Normalement, la situation devrait s’être grandement améliorée : il n’y a plus que 2 erreurs et 5 warnings à corriger manuellement, chose que je fais immédiatement… 😉

Dans certaines situations, on ne peux pas corriger (cas de librairie externes lesquelles nous n’avons pas la main…), il est donc possible de paramétrer SwiftLint plus finement.

Pour tout ce qui est règles globales, il faut créer un fichier .swiftlint à la racine de votre projet. Par exemple, le mien contient ceci :

Lorsqu’il s’agit d’un besoin temporaire, on peut désactiver une règle directement dans le code avec l’instruction // swiftlint:disable <rule> . La liste des règles se trouve ici : https://realm.github.io/SwiftLint/rule-directory.html

Voilà, j’espère que cette petite introduction vous aura donné envie de vous mettre à Swiftlint et à vous mettre à la qualité ! En tous cas moi, je suis accro !

Une pépite de fin d’année !

En cette fin d’année, je suis en pleine lecture du super livre de Denis Yurichev « Rétro-ingénierie pour débutants Comprendre le langage d’assemblage », téléchargable ici : https://beginners.re/RE4B-FR.pdf

Ce qui m’a rappelé le temps des webzines : Ah les No Way, Phack, 40Hex… 🙂 Que de bons souvenirs !

Du coup, je me suis demandé si ils étaient encore trouvables quelques part… et j’ai trouvé ce GitHub: https://github.com/cloudsriseup/Hacker_EZines

Ouah !, le top ! Plus de 1 Go de webzines ! Un grand merci à John pour ce super travail !

Vous vous en téléchargez une dizaine sur votre smartphone et hop, sauvé.e du beau-père qui radote, de l’oncle homophobe et de la belle soeur arrogante pour ces interminables repas de « Fêtes » 😉

En vous adressant une fois encore tous mes meilleurs voeux pour cette nouvelle année !

Vincent.

Nouvelle mise à jour de l'application mobile Kayak Tracker !

Toujours ravie de satisfaire les demandes des utilisateurs.rices, j’ai rajouté quelques fonctions dans l’application Kayak Tracker.

Vous pouvez maintenant exporter vos tracks soit d’application à application (via un email), soit dans Google Earth !

Voici la vidéo explicative :

Parmi les autres nouveautés / améliorations, il y a également de nouveaux fonds de carte (vue satellite, vue mixte) et une amélioration des traductions !

Comme d’habitude, l’application est à télécharger sur l’app store :

Et bonnes balades !

Reason et la gestion des risques

Je m’intéresse un peu à l’aéronautique, et surtout à sa partie technique/maintenance. Or, en surfant sur un de mes forums favoris : crash-aerien.aero, j’ai entendu parler des plaques de Reason. Quel est le rapport avec la choucroute me direz-vous ? Et bien c’est simple, je pense que ce concept est non seulement applicable à l’informatique, mais aussi dans la vie de tous les jours, et que nous pouvons en faire un formidable outil de lutte contre la procrastination !

James Reason est un psychologue expert en facteurs humains. Membre des plus respectées instances du Royaume Uni, il est connu, entre autres, pour ses travaux sur la réduction des risques en milieu hospitalier. Il est aussi le père d’un modèle étiologique d’accidents connu sous le nom de SCM : Swiss Cheese Model. C’est de ce modèle et de son application à l’informatique et à la vie en générale dont je vais traiter 🙂 .

Lire la suite

Swift Map Filter Reduce mémo

Lorsque l’on pense opérations sur des types Array ou Dictionary en Swift, on a souvent le réflexe for-in loop… Mais Swift propose d’autres méthodes comme map, filter, reduce… potentiellement plus efficaces. Voici donc un petit mémo à ce sujet 🙂

Map

Map sert à parcourir une collection er à appliquer la même opération à chaque élément de cette collection. La fonction map retourne un array contenant le résultat. Dans l’exemple suivant, la fonction map est utilisée pour retourner le carré de chaque item d’un tableau :

Le type de retour de la fonction map n’est pas limité au type des éléments d’origine :

Et enfin, la fonction map peut être utilisée sur tout type de collection :

Filter

La fonction filter parcourt un array ou une collection et retourne un array contenant les éléments correspondant à la condition demandée. Ex: recherche des entiers divisibles par 2:

Reduce

Reduce sert à combiner tous les éléments d’une collection pour créer une nouvelle valeur. Dis comme cela, ce n’est pas très parlant, mais voici quelques exemples :

  • Ajouter toutes les valeurs d’un array à une valeur initiale de 15 :
  • Fusionner des chaînes :

flatMap et compactMap

  • flatMap :
  • compactMap :

En résumé :

  • map permet de retourner un array contenant le résultat d’une transformation appliquée à chaque item.
  • filter retourne un array contenant seulement les éléments correspondant à une condition donnée.
  • reduce retourne une seule valeur calculée en combinant chaque item avec une valeur initiale.

Un dev iOS au pays de Mac OS

Cela faisait un petit moment que je n’avais pas publié d’articles. Je vous rassure, je n’étais pas perdue au milieu du désert de Gorafe, mais plutôt en plein projet… macOS.

J’ai en effet eu le bonheur de contribuer à un projet mac OS écrit en Swift, et cela m’a donné l’occasion de me frotter un peu plus sérieusement à Cocoa et consorts… et d’en faire un petit retour d’expérience 🙂 .

Venant tout droit du dev iOS, donc d’UIKit, de prime abord, cela ressemble énormément. On remplace tout ce qui est UI par NS (ex : UITextField devient NSTextField) et ça repart… pas très loin justement 😦

En effet, on s’aperçoit vite que toute la syntaxe est un poil différente. Par exemple, pour changer le texte dans un champ texte, sous UIKit, on utilise la syntaxe : monJoliTextFielt.text = « Bonjour » Et sous Cocoa, la syntaxe est monJoliTextField.stringValue = « Bonjour »

Ces petites différences, ajoutées à un certain manque de documentation en ligne (en tous cas pour Swift) comparé à iOS font que le développement peut parfois devenir un peu… lent 😦 Il faut parfois (souvent) adapter la syntaxe ObjectiveC à Swift, et ça prend du temps… Vive StackOverflow !

Mais franchement, une fois assimilé, la programmation d’une application Mac OS en Swift devient franchement plaisant.

En tant que dev iOS et donc utilisateur Xcode, je retrouve la construction d’interfaces par storyboards. Là encore, les éléments ne sont pas exactement les mêmes, mais avec un peu de patience et de recherches, on s’y retrouve. Et pour le reste, cela reste du Swift.

Du coup, si j’étais au départ un peu anxieux par rapport au fait de passer de mon iOS « chéri » à Mac OS, je me suis rapidement pris au jeu et je serais maintenant partant pour recommencer sur un autre projet Mac OS 🙂

Et puis, il ne faut pas oublier qu’encore une fois, Apple pense à nous faciliter la vie avec le projet Marzipan, depuis renommé Catalyst :). Donc si tout va bien, d’ici quelques temps, on ne se prendra plus la tête à développer une application pour iOS ou Mac OS, mais on développera une application tout cours !

Bon pour le moment, je vous laisse, j’ai des applis à mettre à jour pour iOS et iPad OS 13 🙂

Mes lectures de cet été 2019

Il n’y a pas que le code dans la vie (quoi que…), alors comme chaque été, je vous partage mes lectures de vacances…

Bon, c’est les vacances, mais rien n’interdit de lire des livres en rapport avec sa passion… 🙂 Ce livre n’est pas un livre technique, mais plutôt un ensemble de « trucs et astuces » pour améliorer son travail de développeur.se de manière « pragmatique ». Cela se présente sous la forme d’analogies et de petites histoire très faciles à lire et surtout à retenir. Pour moi, c’est un must !

J’adore Stephen King, et là j’avoue avoir eu du mal à me remettre de cette lecture ! Amateurs.rices d’horreur, passez votre chemin, ce n’est pas le sujet. Par contre, si vous avez dépassé 35 ans, cette « étude sociologique » de la société Américaine est peut-être faite pour vous…

Evitez juste de le lire si vous n’avez pas le moral 🙂

« Une chose encore capable de vous faire rire plus de trente ans après ne peut pas avoir été une perte de temps. Je pense même qu’une telle chose frôle l’immortalité. »

« C’est solide, les cœurs. En règle générale, ils ne se brisent pas. Les cœurs, ça plie sans se rompre. »

« Les cœurs peuvent se briser. Oui. Les cœurs peuvent se briser. Parfois, je me dis qu’il vaudrait mieux que nous mourions, en de tels moments, mais nous ne mourons pas. »

Un livre que nous avons sans doute tous.tes lu durant notre adolescence… mais qu’il fait bon de relire à l’âge adulte 🙂

« « Mon cœur craint de souffrir, dit le jeune homme à l’Alchimiste, une nuit qu’ils regardaient le ciel sans lune.
— Dis-lui que la crainte de la souffrance est pire que la souffrance elle-même. Et qu’aucun cœur n’a jamais souffert alors qu’il était à la poursuite de ses rêves, […]. »

Une fiction historique qui nous projette au temps de la construction des cathédrales. Difficile d’en décrocher une fois que l’on a commencé 🙂

Là, c’est tout de suite plus léger… Mais c’est techno et cela se passe à Nantes alors… Bon, comme dans tous les livres du genre, il y a quelques « à peu prés » avec la réalité technologique. En oui, faut bien perpétrer le mythe du méchant hacker dans son coin… Mais, j’ai quand même bien aimé l’histoire, avec un suspense qui ne nous laisse pas respirer 1 seconde… Et puis cela m’a permis de me remettre de Coeurs perdus en Atlantide (je suis trop sensible 😦 ).