Création d’une app iOS et Android sans codage grâce à l’IA
L’application mobile Frandroid, développée en Flutter, n’a pas été mise à jour depuis trois ans et présente 98 dépendances obsolètes, entraînant des bugs signalés par les utilisateurs. Au cours de trois jours, l’auteur a entrepris de moderniser l’application en utilisant exclusivement l’IA Claude Code comme assistant, réalisant une migration complète de l’architecture en vingt heures de collaboration.
Trois ans sans mise à jour, 98 dépendances obsolètes, des utilisateurs signalant des bugs. L’application Frandroid nécessitait une refonte totale. Cependant, avec un planning chargé et des projets stratégiques prioritaires, cette tâche n’était pas la priorité de notre équipe technique. J’ai donc choisi de tenter une expérience : la moderniser moi-même, sans formation en développement, me basant uniquement sur Claude Code comme assistant. Trois jours plus tard, voici le compte-rendu complet de cette expérience.
On le sait, l’intelligence artificielle modifie notre quotidien de nombreuses façons.
Dans une récente vidéo, Arnaud détaillait ses usages quotidiens de l’IA : organiser des vacances en compilant itinéraires et recommandations, trier des newsletters pour extraire l’essentiel, réaliser des tableaux comparatifs de produits tech, relire et améliorer des brouillons d’articles, poser des questions sur des sujets complexes, trouver des recettes adaptées à ses contraintes alimentaires, demander des définitions vulgarisées, brainstormer sur de nouveaux formats éditoriaux et créer des visuels pour illustrer des concepts abstraits. Ces usages sont devenus courants pour des millions d’utilisateurs. Mais utiliser l’IA pour développer une application mobile complète ? Cela représente un tout autre défi.
Ces dispositifs d’assistance simplifient des tâches précises et spécifiques. Mais qu’en est-il de projets plus ambitieux, nécessitant une cohérence au fil du temps et une bonne compréhension technique ? J’ai voulu tester les limites de cette technologie en me lançant un défi : moderniser l’application mobile de Frandroid sans aucune formation en développement.
Équipé d’un MacBook Pro, d’un iPhone 16 Pro, d’un Pixel 10 Pro et de Claude Code (abonnement Max durant cette expérience, Pro par la suite), j’ai entrepris de migrer une application Flutter vieille de trois ans vers une architecture moderne.
Retour sur une semaine d’expérimentation qui interroge l’avenir du développement logiciel.
### Une application laissée à l’abandon par nécessité
Chez Humanoid, l’entreprise éditrice de Frandroid, l’équipe technique jongle avec une feuille de route chargée. Le maintien de sites à forte audience nécessite des investissements conséquents en infrastructure et développement. Notre roadmap est dense et l’application mobile Frandroid n’y figure malheureusement pas comme priorité.
Néanmoins, cette application universelle développée en Flutter sert quotidiennement plusieurs dizaines de milliers de lecteurs sur iOS et Android. Flutter, le framework open source de Google, permet de créer une base de code unique fonctionnant sur les deux systèmes d’exploitation. Ce choix était judicieux à l’époque, mais le code n’avait pas été modifié depuis trois ans au moins.
Les retours des utilisateurs s’accumulaient : bugs d’affichage, plantages occasionnels, dépendances obsolètes, fonctionnalités manquantes. L’écart se creusait dangereusement entre les standards actuels et notre application. J’ai donc décidé d’utiliser exclusivement l’IA comme assistante pour moderniser cette application, tout en documentant chaque étape.
### Claude Code : un terminal qui comprend votre projet
Le marché regorge d’outils promettant de créer des applications sans coder, tels que Bubble, Adalo, FlutterFlow ou encore Webflow pour la création de sites. Ces solutions « no-code » fonctionnent sur un principe de blocs à assembler visuellement. Cependant, avec l’IA générative, l’approche change radicalement. Plutôt que d’utiliser des outils simplifiés, il est désormais possible d’employer les mêmes environnements que les développeurs professionnels.
J’ai choisi Claude Code d’Anthropic pour cette expérience. Contrairement aux assistants IA traditionnels, Claude Code s’intègre directement dans le terminal de l’ordinateur. Il peut lire des fichiers, exécuter des commandes, modifier du code et même lancer des builds. Cette intégration lui permet de comprendre la structure globale d’un projet et d’agir comme un véritable collaborateur technique.
L’avantage sur des outils tels que GitHub Copilot ou Cursor réside dans son approche conversationnelle structurée. Claude Code ne se contente pas de suggérer des lignes de code : il planifie, organise et documente son travail. Pour un non-développeur, cette guidance méthodique témoigne d’une différence majeure entre un projet qui se concrétise et un abandon frustrant.
Ma première interaction avec l’outil consistait simplement à exposer mon objectif : migrer l’application vers une Clean Architecture. En quelques secondes, Claude Code a généré une checklist détaillée de quinze étapes. À ce moment-là, je ne pensais pas du tout atteindre cet objectif.
### Vingt heures pour transformer une architecture complète
La migration vers la Clean Architecture était le défi principal. Cette approche, théorisée par Robert C. Martin (Uncle Bob), organise le code en couches distinctes : Domain (logique métier pure), Data (accès aux données) et Presentation (interface utilisateur). L’objectif ? Séparer clairement les responsabilités afin de faciliter la maintenance et les tests.
L’application originale mélangeait tout dans les mêmes fichiers. Le code gérant l’affichage, le stockage local et la logique métier cohabitait dans une architecture monolithique difficile à maintenir. Claude Code a procédé méthodiquement : migration fonction par fonction, en commençant par les plus simples comme le mode sombre.
La première session a duré quatre heures. Claude Code lisait simultanément de cinq à dix fichiers pour comprendre le contexte, proposait des structures de code, expliquait ses choix et réalisait les modifications. Mon rôle consistait à valider les décisions, tester les résultats et signaler les problèmes. Un cycle question-action-validation s’est rapidement établi.
Au total, vingt heures de collaboration productive ont suffi pour migrer entièrement l’architecture, résoudre les conflits de dépendances, optimiser les performances et ajouter de nouvelles fonctionnalités. Quatre-vingts fichiers ont été modifiés, plus de trois mille lignes de code écrites, et quinze erreurs critiques résolues. Un développeur Flutter senior aurait probablement réalisé ce travail en moins d’une semaine. Un junior aurait nécessité une à deux semaines. Pour une personne sans formation en développement, l’estimation tourne entre trois et six mois d’apprentissage.
### Les obstacles techniques et leurs solutions pragmatiques
Le principal problème est survenu lors de la compilation iOS. Un message d’erreur cryptique signalait un conflit de dépendances entre google_mobile_ads et Firebase concernant une bibliothèque nommée nanopb. Sur Android, tout fonctionnait normalement grâce à Gradle qui gère mieux ce type de situations. En revanche, avec CocoaPods sur iOS, le conflit ne pouvait pas être résolu.
Claude Code a analysé les logs, identifié la source du problème et proposé trois solutions avec leurs avantages et inconvénients. J’ai choisi de désactiver temporairement les publicités sur iOS uniquement, une décision de gestion que l’IA ne pouvait pas prendre seule. Par la suite, l’outil a documenté ce choix dans un fichier TODO_IOS_ADS.md, expliquant la marche à suivre ultérieure.
Un second obstacle devait être surmonté concernant les versions d’extensions iOS. L’application utilise OneSignal pour les notifications push, nécessitant une extension iOS. Les numéros de version de l’extension et de l’application principale doivent correspondre, mais elles utilisaient des variables Xcode différentes. Claude Code a détecté cette incohérence en comparant les fichiers Info.plist et a synchronisé les configurations.
La gestion de ces problèmes techniques illustre parfaitement la complémentarité entre humains et IA. Claude Code comprend le contexte iOS (les extensions doivent partager la version parente), diagnostique le problème et propose une solution. De mon côté, je valides que la solution respecte nos contraintes métier sans comprendre les détails d’implémentation.
Je n’évoque ici que quelques problèmes, mais la réalité fut bien plus chaotique. Gradle a planté plusieurs fois, m’obligeant à nettoyer manuellement les caches et à relancer des builds de trente minutes.
J’ai dû réinstaller Xcode complètement à plusieurs reprises après des corruptions de cache inexplicables. Mon iPhone a redémarré une dizaine de fois pour résoudre des problèmes de connexion avec le Mac ou des plantages mystérieux lors des installations, probablement à cause du cache. Sans oublier les innombrables commandes flutter clean, les suppressions de dossiers Pods, les réinitialisations de DerivedData, et ces moments interminables où rien ne fonctionnait sans raison apparente avant de recommencer à fonctionner après un énième redémarrage.
Il faut souligner que l’application souffrait d’une dette technique significative résultant de plusieurs années sans mise à jour. L’analyse des dépendances montrait que 98 paquets avaient des versions plus récentes, mais qu’il était impossible de les installer sans causer des ruptures dans les contraintes existantes. Chaque tentative entraînait un effet domino et bloquait techniquement la situation : il était impossible de mettre à jour une dépendance sans en compromettre d’autres, les nouvelles fonctionnalités de Flutter et Dart demeuraient inaccessibles, les correctifs de sécurité ne pouvaient pas être appliqués, et les APIs dépréciées continuaient d’être utilisées par manque d’alternatives compatibles.
J’ai compris pourquoi le maintien régulier d’une application n’est pas un luxe, mais une nécessité : chaque mois sans mise à jour creuse un peu plus le fossé technique, rendant la migration exponentiellement plus compliquée.
Une limitation importante est apparue régulièrement : le décalage entre les connaissances de Claude Code et l’actualité du développement mobile.
Son apprentissage s’est arrêté en janvier 2025, ce qui pose problème dans un écosystème en évolution mensuelle. Lorsque iOS 18.1 est sorti en octobre 2024, suivi d’iOS 18.2 quelques semaines plus tard, puis iOS 26, Claude Code ne connaissait pas les incompatibilités spécifiques de ces versions avec certains SDK comme UMP (User Messaging Platform de Google). Il a donc fallu que je lui signale les crashs pour qu’il se mette à rechercher sur le web et découvre que iOS 26 nécessitait la désactivation temporaire de ce SDK.
Heureusement, la fonction de recherche web intégrée a sauvé la situation, mais elle a introduit une étape supplémentaire : au lieu de proposer directement la solution, l’IA devait d’abord reconnaître son ignorance, puis chercher, analyser les résultats, et enfin proposer un correctif.
Pour des frameworks en évolution rapide comme Flutter (nouvelle version stable tous les trois mois), cette obsolescence des connaissances peut buler un problème. La solution consisterait à croiser systématiquement les suggestions de Claude Code avec la documentation officielle récente, et à lui demander explicitement de vérifier sur le web lorsque l’on suspecte un changement. Cela ralentit le développement, mais reste gérable tant que l’on en prend conscience.
### Quand l’IA doute et l’humain encourage
Un phénomène étrange s’est manifesté à plusieurs reprises durant ce projet. Face à des problèmes particulièrement complexes, Claude Code témoignait d’un certain découragement. Après avoir tenté plusieurs approches pour résoudre le conflit de dépendances nanopb ou déboguer un crash au démarrage, l’outil suggérait parfois d’abandonner certaines pistes ou de simplifier drastiquement les objectifs.
Cette tendance à l’abandon face à la difficulté suggère quelque chose d’intéressant sur le mode de fonctionnement de ces IA. Contrairement à un développeur humain qui persévère par obstination ou fierté professionnelle, l’IA évalue constamment la probabilité de succès. Lorsque cette probabilité lui semble faible, elle suggère rationnellement de renoncer. C’est alors à moi de jouer le rôle du motivateur : « Non, on va y arriver », « Continue comme ça », « Essaie encore une autre approche ». L’inversion des rôles était amusante. Habituellement, on imagine l’IA comme inflexible et l’humain comme celui qui abandonne. Dans ce cas, c’est l’inverse qui s’est produit.
Pour certains problèmes, j’ai même été celui qui ai fourni la solution. Claude Code peinait à prendre du recul.
Cela soulève une question intéressante sur la collaboration humain-IA. L’obstination humaine, souvent perçue comme un défaut dans la gestion de projet, apparaît comme un atout ici. Elle pousse l’IA à explorer des solutions qu’elle aurait écartées trop rapidement. Beaucoup de fonctionnalités de l’application n’auraient jamais vu le jour si j’avais accepté les premiers constats d’échec.
### Une nouvelle fonctionnalité : la recherche assistée par IA
Au-delà de la modernisation, j’ai souhaité ajouter une fonctionnalité : un système de recherche basé sur Perplexity AI, notre partenaire. Les utilisateurs peuvent désormais poser des questions et recevoir des réponses générées à partir des articles Frandroid, accompagnées de citations de sources.
Cette fonctionnalité a nécessité du développement backend (Firebase Functions en TypeScript) et frontend (Flutter avec le pattern BLoC). Claude Code a structuré le projet selon la Clean Architecture fraîchement mise en place : entities, repositories, use cases, datasources et blocs d’état.
La partie la plus délicate concernait le rendu HTML des réponses. Le package flutter_html ne supportait pas le CSS personnalisé avancé. Claude Code a migré vers flutter_inappwebview, permettant ainsi un contrôle total sur l’affichage tout en respectant la charte graphique de Frandroid. Couleurs exactes, typographie Montserrat, mode sombre : chaque détail visuel a été ajusté.
Le développement de cette fonctionnalité a pris six heures, y compris les itérations de design, le débogage et les tests multiplateformes. Un détail amusant : après sept appuis sur l’icône de recherche IA, un easter egg apparaît. Je vous laisse le plaisir de le découvrir.
### Les limites et apprentissages de cette collaboration
Cette expérience montre à la fois les capacités et les limites de l’IA en développement. Claude Code excelle dans l’exécution technique : lecture de code, détection d’erreurs, mise en œuvre de patterns, gestion de dépendances. Cependant, il demeure un assistant, pas un développeur autonome.
Les décisions métier m’incombaient systématiquement. Désactiver les publicités iOS ? Raccourcir les titres d’interface ? Ajouter un onboarding pour les notifications ? Ces choix nécessitent une compréhension du produit et des utilisateurs que l’IA ne possède pas. Elle peut proposer des options avec leurs implications, mais la décision finale appartient à l’humain.
La communication était cruciale. Mes messages restaient simples et factuels : « l’app plante au démarrage », « 472 erreurs sur Xcode », « le défilement est lent ». Claude Code traduisait ces symptômes en diagnostics techniques et solutions. Une véritable division du travail qui fonctionne précisément parce que l’IA comprend le contexte métier autant que le code technique.
Le retour sur investissement est impressionnant : vingt heures pour réaliser tout cela. Cependant, cette efficacité masque une réalité : sans la capacité à tester, identifier les problèmes et prendre des décisions produit, le projet aurait échoué. L’IA amplifie les compétences existantes, sans les remplacer.
### Ce que j’ai vraiment appris sur le code et ses exigences
Cette immersion dans le développement mobile m’a appris bien plus que ce que j’imaginais. J’ai compris la logique des architectures logicielles, l’importance de la séparation des responsabilités, ainsi que la complexité de la gestion d’état dans une application. Des concepts qui me semblaient abstraits sont devenus concrets à travers la résolution de problèmes réels.
Plusieurs personnes m’ont questionné sur la qualité du code produit. Une question légitime : une IA peut-elle générer du code aussi propre et maintenable qu’un développeur expérimenté ? La réponse est nuancée. Claude Code applique des patterns standards (BLoC pour la gestion d’état, Repository pattern pour l’accès aux données) et respecte les conventions de nommage Flutter. Le code est structuré, commenté et suit les bonnes pratiques. Cependant, il manque parfois d’optimisation fine qu’un expert offrirait : certaines requêtes pourraient être mises en cache plus intelligemment, et quelques widgets auraient pu être mieux optimisés pour la performance.
La question de la sécurité a également été soulevée. L’application manipule des données utilisateur, communique avec des APIs et stocke des préférences localement. J’ai demandé à Claude Code d’auditer spécifiquement ces aspects : validation des entrées utilisateur, gestion sécurisée des tokens API, protection contre les injections et chiffrement des données sensibles. L’outil a identifié et corrigé plusieurs failles potentielles.
Cependant, je ne prétends pas que cette application atteigne le niveau de sécurité qu’aurait garanti une équipe de développement professionnelle avec une revue de code et des tests de pénétration. C’est une des limites claires de cette approche.
### Testez l’application et partagez vos retours
L’application modernisée est maintenant disponible en version bêta. Sur Android, rendez-vous sur le Play Store et inscrivez-vous au programme de test bêta de l’application Frandroid. Sur iOS, rejoignez le programme TestFlight via ce lien. Ces versions incluent l’ensemble des améliorations : nouvelle architecture, optimisations de performance (démarrage 75 % plus rapide, défilement fluide à 60 ips), recherche assistée par IA et même un onboarding pour les notifications personnalisées.
Je cherche à stabiliser cette version avant un déploiement en production. Veuillez nous faire parvenir vos retours de bugs en commentaires ou sur Discord ; j’ai créé un canal dédié : plantages, comportements étranges, erreurs d’affichage, tout est important.
Mais au-delà des corrections, j’aimerais connaître vos idées de fonctionnalités. Quel usage faites-vous de l’application ? Qu’est-ce qui faciliterait votre lecture quotidienne de Frandroid ? Si j’ai le temps, je continuerai à faire évoluer cette application. Si vous avez des idées d’autres applications qui pourraient servir la communauté Frandroid, je suis preneur : cette expérience m’a donné envie de poursuivre l’exploration des possibilités offertes par l’IA lorsque l’on y consacre du temps et de la méthode.

