J’ai créé une app avec l’IA sans savoir coder : de zéro formation à une app iOS et Android

L'IA voulait jeter l'éponge, j'ai dit non

 
Trois ans sans mise à jour, 98 dépendances obsolètes, des lecteurs qui signalaient des bugs. L’application Frandroid nécessitait une refonte complète, mais avec une roadmap chargée et des projets stratégiques à mener, elle n’était pas la priorité de notre équipe technique. J’ai décidé de tenter une expérience : la moderniser moi-même, sans formation en développement, juste avec Claude Code comme assistant. Trois jours plus tard, voici le récit complet de cette expérience.

On le sait, l’intelligence artificielle transforme notre quotidien de multiples 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 en extraire l’essentiel, générer 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 à mes contraintes alimentaires, demander des définitions vulgarisées, brainstormer sur de nouveaux formats éditoriaux, ou encore créer des visuels pour illustrer des concepts abstraits. Ces usages sont devenus banals pour des millions d’utilisateurs. Mais utiliser l’IA pour développer une application mobile complète ? C’est une tout autre affaire.

Ces outils d’assistance facilitent des tâches précises et délimitées. Mais qu’en est-il de projets plus ambitieux, nécessitant de la cohérence sur la durée 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 formation en développement.

Armé d’un MacBook Pro, d’un iPhone 16 Pro, d’un Pixel 10 Pro et de Claude Code (forfait Max pendant cette expérience, Pro autrement), j’ai entrepris de migrer une app Flutter vieille de trois ans vers une architecture moderne.

Retour sur une semaine d’expérimentation qui interrogent l’avenir du développement logiciel.

Une application laissée à l’abandon par nécessité

Chez Humanoid, l’entreprise qui édite Frandroid, l’équipe technique jongle avec une feuille de route chargée. Maintenir des sites à forte audience demande des investissements considérables en infrastructure et développement. Notre roadmap est dense, et l’application mobile Frandroid n’y figure malheureusement pas comme priorité.

Pourtant, 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 seule base de code fonctionnant sur les deux systèmes d’exploitation. Un choix judicieux à l’époque, mais le code n’avait pas été touché depuis au moins trois ans.

Les retours utilisateurs s’accumulaient : bugs d’affichage, plantages occasionnels, dépendances obsolètes, fonctionnalités manquantes. L’écart entre les standards actuels et notre application se creusait dangereusement. J’ai décidé de tenter une expérience : moderniser cette application en utilisant exclusivement l’IA comme assistant de développement, tout en documentant chaque étape du processus.

Claude Code : un terminal qui comprend votre projet

Le marché propose de nombreux outils promettant de créer des applications sans coder : Bubble, Adalo, FlutterFlow ou encore Webflow pour les sites web. Ces solutions « no-code » fonctionnent sur un principe de blocs à assembler visuellement. Mais avec l’IA générative, l’approche change radicalement. Plutôt que d’utiliser des outils simplifiés, on peut désormais 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 classiques, 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 profonde lui permet de comprendre la structure complète d’un projet et d’agir comme un véritable collaborateur technique.

L’avantage sur des outils comme 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 fait toute la différence entre un projet qui aboutit et un abandon frustrant.

Ma première interaction avec l’outil consistait simplement à expliquer mon objectif : migrer l’application vers une Clean Architecture. En quelques secondes, Claude Code a généré une todo-list détaillée de quinze étapes. Je vous avoue, à ce moment-là, je ne pensais pas du tout y arriver.

Vingt heures pour transformer une architecture complète

La migration vers 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 pour 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 cinq à dix fichiers pour comprendre le contexte, proposait des structures de code, expliquait ses choix et implémentait 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 complètement l’architecture, résoudre les conflits de dépendances, optimiser les performances et ajouter de nouvelles fonctionnalités. Quatre-vingt fichiers modifiés, plus de trois mille lignes de code écrites, quinze erreurs critiques résolues. Un développeur Flutter senior aurait probablement accompli ce travail en moins d’une semaine. Un junior aurait nécessité une à deux semaines. Pour quelqu’un sans formation en développement, l’estimation tourne autour de trois à six mois d’apprentissage.

Les obstacles techniques et leurs solutions pragmatiques

Le gros 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 autour d’une bibliothèque nommée nanopb. Sur Android, tout fonctionnait normalement grâce à Gradle qui gère mieux ces situations. Mais iOS, avec CocoaPods, ne pouvait pas résoudre le conflit.

Claude Code a analysé les logs, identifié la source du problème et proposé trois solutions avec leurs avantages et inconvénients. J’ai opté pour la désactivation temporaire des publicités sur iOS uniquement, une décision métier que l’IA ne pouvait pas prendre seule. L’outil a ensuite documenté ce choix dans un fichier TODO_IOS_ADS.md expliquant la marche à suivre future.

Un second obstacle concernait les versions d’extensions iOS. L’application utilise OneSignal pour les notifications push, qui nécessite une extension iOS. Les numéros de version de l’extension et de l’application principale doivent correspondre, mais utilisaient des variables Xcode différentes. Claude Code a détecté cette incohérence en comparant les fichiers Info.plist et synchronisé les configurations.

La gestion de ces problèmes techniques illustre parfaitement la complémentarité humain-IA. Claude Code comprend le contexte iOS (les extensions doivent partager la version parente), diagnostique le problème et propose une correction. De mon côté, je valide que la solution respecte nos contraintes métier sans comprendre les détails d’implémentation.

De temps en temps, j’ai été obligé de remonter manuellement les logs à Claude Code

Je n’évoque ici que quelques problèmes, mais la réalité fut bien plus chaotique. Gradle a planté à de multiples reprises, ce qui m’a forcé à nettoyer manuellement les caches et à relancer des builds de trente minutes.

J’ai dû réinstaller Xcode complètement plusieurs fois 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, certainement à cause du cache. Sans compter les innombrables flutter clean, les suppressions de dossiers Pods, les réinitialisations de DerivedData, et ces moments où rien ne fonctionnait sans raison apparente avant de soudainement remarcher après le énième redémarrage.

Il faut dire l’application souffrait d’une dette technique importante à cause de plusieurs années sans mise à jour. L’analyse des dépendances montrait que 98 packages disposaient de versions plus récentes, mais impossibles à installer sans casser les contraintes actuelles. On obtenait à chaque fois un effet domino avec une situation de blocage technique : impossible de mettre à jour une dépendance sans en casser d’autres, les nouvelles fonctionnalités de Flutter et Dart restaient inaccessibles, les correctifs de sécurité ne pouvaient pas être appliqués, et les APIs dépréciées continuaient d’être utilisées faute d’alternative compatible.

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, jusqu’à rendre la migration exponentiellement plus complexe.

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’arrête en janvier 2025, ce qui pose problème sur un écosystème qui évolue mensuellement. Quand iOS 18.1 est sorti en octobre 2024, puis iOS 18.2 quelques semaines plus tard, et maintenant 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 fallu que je lui signale les crashs pour qu’il cherche activement sur le web et découvre que iOS 26 nécessitait de désactiver temporairement ce SDK.

Heureusement, la recherche web intégrée sauve la situation, mais elle introduit une étape supplémentaire : au lieu de proposer directement la solution, l’IA doit 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 être un problème. La solution ? Systématiquement croiser les propositions de Claude Code avec la documentation officielle récente, et lui demander explicitement de vérifier sur le web quand on suspecte un changement. Evidement, cela ralentit le développement, mais ça reste gérable tant qu’on en a conscience.

Quand l’IA doute et l’humain encourage

Alors, quelque chose d’étrange s’est produit à plusieurs reprises durant ce projet. Face à des problèmes particulièrement complexes, Claude Code manifestait une forme de découragement. Après avoir tenté plusieurs approches pour résoudre le conflit de dépendances nanopb ou debugger un crash au démarrage, l’outil proposait parfois d’abandonner certaines pistes ou de simplifier drastiquement les objectifs.

Cette tendance à l’abandon face à la difficulté montre quelque chose d’intéressant sur le 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. Quand cette probabilité lui semble faible, elle suggère rationnellement de renoncer. C’est moi qui ai dû jouer le rôle de 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 infatigable et l’humain comme celui qui abandonne. Ici, c’est l’inverse qui s’est produit.

Sur certains problèmes, j’ai même fourni la solution. Claude Code n’arrivait pas à prendre du recul.

Cela soulève une question intéressante sur la collaboration humain-IA. L’obstination humaine, souvent vue comme un défaut en gestion de projet, devient un atout ici. Elle pousse l’IA à explorer des solutions qu’elle aurait écartées trop rapidement. Plusieurs fonctionnalités de l’application n’existeraient pas 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 voulu 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, avec citations des sources.

Cette feature a nécessité du développement backend (Firebase Functions en TypeScript) et frontend (Flutter avec BLoC pattern). Claude Code a structuré le projet en respectant 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, ce qui a permis 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, avec les itérations design, le débogage et les tests multi-plateformes. Un détail amusant : après sept appuis sur l’icône de recherche IA, un easter egg apparaît. Je vous laisse tester ça.

Les limites et apprentissages de cette collaboration

Cette expérience montre autant les capacités que les limites de l’IA en développement. Claude Code excelle dans l’exécution technique : lecture de code, détection d’erreurs, implémentation de patterns, gestion de dépendances. Mais il reste 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 requièrent 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 revient à l’humain.

La communication était essentielle. Mes messages restaient simples et factuels : « l’app plante au démarrage », « 472 erreurs sur Xcode », « le scroll est lent ». Claude Code traduisait ces symptômes en diagnostics techniques et solutions. Une vraie 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 impressionne : vingt heures pour accomplir tout ça. Mais cette efficacité cache 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, elle ne les remplace pas.

Ce que j’ai vraiment appris sur le code et ses exigences

Cette immersion dans le développement mobile m’a enseigné bien plus que prévu. J’ai compris la logique des architectures logicielles, l’importance de la séparation des responsabilités, la complexité de la gestion d’état dans une application. Des concepts qui restaient abstraits sont devenus concrets à travers la résolution de problèmes réels.

Plusieurs personnes m’ont interrogé sur la qualité du code produit. 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 les 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. Mais il manque parfois de l’optimisation fine qu’un expert apporterait : certaines requêtes pourraient être mises en cache plus intelligemment, quelques widgets mériteraient d’ê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, 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, chiffrement des données sensibles. L’outil a identifié et corrigé plusieurs failles potentielles.

Cependant, je ne prétends pas que cette application atteint le niveau de sécurité qu’aurait garanti une équipe de développement professionnelle avec revue de code et 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 désormais 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 contiennent toutes les améliorations : nouvelle architecture, optimisations de performance (démarrage 75 % plus rapide, scroll fluide à 60 ips), recherche assistée par IA, et même un onboarding pour les notifications personnalisées.

Je cherche maintenant à stabiliser cette version avant un déploiement en prod. Envoyez-nous vos retours de bugs en commentaires ou sur Discord, j’ai créé un canal dédié : plantages, comportements étranges, erreurs d’affichage, tout compte.

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. Et 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 continuer à explorer ce que l’IA permet de créer quand on y consacre du temps et de la méthode.


Le saviez-vous ? Google News vous permet de choisir vos médias. Ne passez pas à côté de Frandroid et Numerama.

Recherche IA boostée par
Perplexity