Élodie Perret a écrit une application pour un réseau d'AMAP autour de Quimper : les paniers du jeudi, le point de retrait, un rappel la veille. Elle l'a essayée trois semaines sur son propre téléphone, posé sur le bureau et branché, où l'application n'a jamais rien oublié. La première semaine publique, la même remarque est revenue vingt fois : elle oublie quel point de retrait on a choisi.
Sur un bureau, rien de ce qui casse une application mobile n'arrive. L'appareil n'est pas à court d'énergie, personne ne l'interrompt, le système ne le réclame pas, et les libellés tiennent parce qu'ils ont été dessinés à la bonne largeur. Une page web est demandée puis livrée, ce qui la sépare du développement web rangé à côté ; une application est installée sur un appareil qui manque d'énergie, manque d'attention, et a le droit de l'arrêter sans le lui dire. Les cinq rubriques rangées ici sont chacune une conséquence de cette phrase.
L'appareil a le droit de vous arrêter, et il ne le dit pas
Les deux plateformes traitent une application en arrière-plan comme une ressource à reprendre. Une application est tuée en arrière-plan et repart de ce qu'elle a écrit. Pas mise en pause, pas suspendue d'une façon qui survit : terminée, sa mémoire rendue, puis relancée plus tard sur l'écran dont elle prétend qu'elle y était. Si le point de retrait choisi n'avait été écrit nulle part, il n'a jamais existé.
La réparation d'Élodie tient en onze lignes. Elle consiste à écrire le point de retrait dans le petit magasin clé-valeur de l'appareil dès qu'il change, à le relire au lancement, et à traiter la copie en mémoire comme un cache de celle-là plutôt que comme la vérité, ce qui est la même distinction entre un nom et l'objet qu'il désigne que dans les bases de la programmation.
UserDefaults.standard.set(point, forKey: "retrait")à chaque changement, et non à la fermetureUserDefaults.standard.string(forKey: "retrait")au lancement, avant le premier rendu- Sur Android,
SharedPreferencespuisDataStoretiennent le même rôle - L'objet en mémoire est un cache de cette valeur, jamais la source
- Tout état qui n'est pas écrit disparaît au premier appel entrant
Ce défaut reste invisible pendant les essais pour une raison mécanique. Un téléphone relié à un ordinateur avec un débogueur attaché est explicitement protégé de ce comportement : la plateforme ne reprend pas une application qu'on lui demande d'inspecter. Le montage de développement supprime donc exactement la panne que l'appareil est fait pour produire.
Deux nombres, et des mots français plus longs
Un pointeur sur un bureau occupe un pixel, un doigt non. 44 points sur iOS et 48 pixels indépendants de la densité sur Android, c'est le plancher publié pour une cible tactile et non le goût de quelqu'un. Ce ne sont pas des mesures en pixels : un point et un pixel indépendant de la densité gardent la même taille physique d'un écran à l'autre, ce qui est toute leur raison d'être, et une disposition écrite en pixels bruts rétrécit précisément sur les téléphones les plus chers.
Le second nombre est français et il ne figure sur aucune page anglaise. Un libellé français occupe environ un cinquième de plus que sa source anglaise, et souvent bien davantage : « Ajouter au panier » fait dix-sept caractères contre onze à « Add to cart », « Valider ma commande » en fait dix-neuf contre huit à « Checkout », « Se désinscrire » quatorze contre sept à « Opt out ». Une maquette dessinée sur les libellés anglais casse à la première traduction, et l'écran, lui, n'a pas grandi.
La règle qui en sort est de dessiner le bouton sur « Valider ma commande » et non sur « Checkout », avant la maquette plutôt qu'après la traduction. La liste des points de retrait avait des lignes de 32 points de haut, parce que c'est ce qui semblait juste à la taille où l'outil de maquette la montrait. Sur un téléphone, une ligne sur six était touchée de travers, et les gens qui touchaient de travers ne signalaient pas un défaut. Ils disaient que l'application était pénible, ce qui est la forme sous laquelle arrivent la plupart de ces fautes, et la raison pour laquelle le design pour téléphone est une rubrique et non une note de bas de page.
La fenêtre du système n'est pas un consentement
L'application envoie un rappel le mercredi soir et compte combien de gens l'ouvrent. Les deux gestes passent par une fenêtre du système, et c'est là que se produit la confusion la plus coûteuse du sujet. La permission du système n'est pas un consentement au sens de l'article 82 : la fenêtre iOS ou Android autorise techniquement un accès, elle ne recueille pas le consentement que la loi Informatique et Libertés demande avant de lire ou d'écrire sur l'appareil hors du service demandé.
La CNIL a adopté le 18 juillet 2024 une recommandation propre aux applications mobiles, publiée en septembre 2024 et modifiée le 8 avril 2025, et elle mène depuis le printemps 2025 une campagne de contrôles dessus. Ce que cela change dans le code est concret : il manque un écran, écrit par vous, où le choix est réel, où refuser est aussi simple qu'accepter, et où chaque finalité se refuse séparément. Une mesure d'audience faite pour vous seul et un identifiant publicitaire ne se demandent pas dans la même phrase.
Le reste est de la conception ordinaire, et il se décide avant la première ligne. Un rappel de panier n'a pas besoin de la position en arrière-plan, il a besoin d'une heure. Élodie a demandé la position au premier lancement, avant d'avoir montré quoi que ce soit, et la boutique a refusé la version pour ce motif. Celle qui est passée demande à la troisième ouverture, au moment où le doigt touche le bouton qui en a besoin.
Une fois ou deux fois, et l'appareil qui tranche
La question qui domine la rubrique est d'écrire une fois ou d'écrire deux fois. Elle est réelle, et la réponse dépend de la quantité d'appareil que l'application touche. Une application faite de listes, de formulaires et de texte s'écrit une fois et part dans les deux boutiques à peu près à moitié prix. Une application bâtie autour de l'appareil photo, de la position en arrière-plan, d'un widget ou de ce que la plateforme a livré l'automne dernier ne le peut pas : un seul code, deux boutiques, et la nouveauté arrive en retard, parce que le pont vers elle doit être écrit par quelqu'un après coup.
Celle d'Élodie est faite de listes, d'une carte et d'une notification, donc le multiplateforme était la bonne réponse pour elle. Il aurait été le mauvais choix pour une application qui se réveille quand on arrive au point de retrait, et le fait qu'il soit mauvais ne se serait pas vu avant quatre mois.
Une première version
Le code était fini avant le premier de ces cinq nombres
La largeur de chaque bande est le compte d'Élodie sur six semaines, donc la chute est la donnée : la plus grosse perte est entre l'installation et la première ouverture.
- Ouvrent la ficheUne fiche est un résultat de recherche avant d'être une application140
- InstallentHaut, parce que le réseau avait annoncé l'application à ses propres adhérents99
- Ouvrent une première foisLa plus grosse chute des cinq, et elle se joue entièrement hors du code48
- Reviennent le jeudi suivantLe premier chiffre honnête, et celui que l'oubli du point de retrait détruisait26
- Sont encore là au bout d'un moisCe qui reste quand l'application a survécu à quatre jeudis9
Ce sont les comptes d'une petite application annoncée à un réseau qui la connaissait déjà, et non un repère du secteur. La forme est la revendication : aucun de ces cinq nombres ne se répare en écrivant du code.
La file qui n'est pas du code, et ce que le DMA y a changé
Livrer une application n'est pas déployer, et c'est le seul endroit où ce sujet s'écarte de la mise en production. Il y a une revue, c'est une file, et sa forme se connaît mieux avant la première soumission qu'après. Un refus vous remet au bout de la file, donc le prix d'une soumission négligée se compte en jours et non dans les dix minutes que prend la correction. Les motifs courants ne sont pas subtils : une déclaration de confidentialité manquante, un compte de démonstration que le relecteur ne peut pas franchir, ou une permission demandée et jamais visiblement utilisée.
Depuis mars 2024 cette file n'est plus la seule porte, et c'est une différence européenne. Le règlement sur les marchés numériques s'applique aux contrôleurs d'accès depuis le 7 mars 2024, et depuis iOS 17.4 une application peut être distribuée hors de l'App Store dans l'Union, par une place de marché tierce puis, avec iOS 17.5 en mai 2024, depuis un site. Les moteurs de rendu tiers y sont autorisés et la commission y a baissé pour qui accepte les nouvelles conditions. Un développeur français n'a donc pas la même question de distribution qu'un développeur américain, et presque aucun cours ne le dit.
Sur 140 personnes du réseau qui ont ouvert la fiche dans la boutique, 99 ont installé, 48 ont ouvert une première fois, 26 sont revenues le jeudi suivant et 9 étaient encore là au bout d'un mois. Le code était fini avant le premier de ces cinq nombres. La plus grosse chute est entre l'installation et la première ouverture, et l'oubli du point de retrait l'aggravait chaque semaine.
Où l'on cale, et le moment où le projet devient un budget
Le blocage est la deuxième plateforme, et c'est un problème d'argent déguisé en problème technique. Quelqu'un livre sur Android, obtient des utilisateurs, puis découvre que les revenus sont sur iOS, et qu'aller les chercher demande un Mac, un compte développeur annuel facturé en euros et un second jeu de conventions. Cela ne se franchit pas en un week-end.
La forme française du blocage tient à ce qui est finançable. Le CPF paie une formation, France Travail en finance une pour un demandeur d'emploi, et ni l'un ni l'autre n'achète une machine. Le projet du soir devient donc un budget à un moment précis, et ce moment se voit venir.
Ce qu'on ouvre en 2026
Android Studio construit pour Android sur les trois systèmes de bureau, il est gratuit, et il a remplacé Eclipse et son greffon Android, que montrent encore les tutoriels antérieurs à 2015 environ. Xcode est le seul chemin vers iOS et il exige un Mac, ce qui est une décision de matériel prise par un logiciel, et qu'il vaut mieux connaître avant de commencer. Il est gratuit ; le Mac et le compte développeur annuel ne le sont pas.
Pour le chemin partagé, Flutter et React Native sont les deux options sérieuses, et elles se départagent sur ce que l'équipe sait déjà : React Native si elle écrit du JavaScript, Flutter sinon, et si elle préfère une seule chose qui se comporte pareil des deux côtés. Toutes deux ont remplacé la génération d'outils qui livrait un site web dans une coquille d'application, une approche parfois encore juste et que les gens sentent.
Reste ce que l'application doit rapporter, qui change la conception de la chose et pas seulement sa facturation, et qui en France se pose sous les mêmes règles de consentement que le rappel du mercredi soir : la monétisation d'une application.