DEVLOPN Audit

Blog

Audit de code, sans langue de bois

Retours d’expérience et analyses sur l’audit de code Flutter et mobile natif : architecture, sécurité, performance, code IA-généré.

ITSAppUsesNonExemptEncryption = false — le réflexe faux des apps Flutter qui chiffrent

Chiffrer sa base locale avec sqlite3mc et cocher false, c'est répondre faux à une question de classification EAR. Notes 3 et 4, ERN au BIS, déclaration ANSSI.

La vaisselle du code — ne laissez pas votre dette technique s'accumuler

Un TODO « on gérera cette erreur plus tard » resté des années, un objet dummy fini en cache, et un bug bien réel. La dette technique a des intérêts composés.

Apple a rejeté notre app pour un bug… d'iPadOS — et c'est un redémarrage qui a tout débloqué

Rejet App Store pour un clavier vide qui plantait aussi dans Safari et la recherche iPadOS. Escalade téléphonique chez Apple, et le grand classique — reboot.

SpecKit seul, j'ai lâché — avec un orchestrator, 64 specs shippées d'affilée

Transformer le pipeline manuel de SpecKit en boucle autonome sûre — backlog source de vérité, une feature par tour, invariants codés en dur dans la CI.

Rejeté deux fois par Apple pour deux popups dans le mauvais ordre — ATT et CMP

Prompt ATT d'Apple d'un côté, CMP RGPD de l'autre — l'ordre et le purpose linking qui font passer la review, et la guideline 5.1.1 qui rejette sinon.

38 000 € d'amende pour une ligne manquante dans des CGV — le médiateur de la consommation

Depuis 2016, tout pro vendant à des particuliers doit désigner un médiateur de la consommation et l'afficher — dès le premier client, freelances compris.

J'ai ajouté une ligne à ma Definition of Done — /review avant de push

Une passe de review par un agent IA sur le diff avant même d'ouvrir la PR — les reviewers humains lisent enfin de l'archi et des choix, plus des coquilles.

verify(mock.method()) — le test vert qui laissait passer un double appel

En Mockito, verify sans .called(1) explicite peut rester vert alors que la méthode part deux fois. Pourquoi la précision dans les tests protège le lecteur.

Rejet App Store pour « clavier absent » — quand le faux positif vient du reviewer

Un rejet App Store impossible à reproduire, une barre de raccourcis iPadOS sur la capture du reviewer, et un iPad jamais redémarré qui finit par tout expliquer.

3 étapes pour me passer de Figma en dev solo — du vibe designing au design.md

Du prompt au feeling au fichier design.md versionné — comment un fichier source unique de tokens et de règles transforme des prompts IA en vraies specs.

Pourquoi Google te demande ton SIREN — la facture électronique arrive pour de vrai

Facture électronique obligatoire au 1er septembre 2026 — vos fournisseurs collectent les SIREN pour router les factures. La vague de mails ne fait que commencer.

« Vous partagez des données avec des data brokers ? » — la case à ne pas cocher au feeling

Google Analytics ou Dynatrace ne sont pas des data brokers mais des sous-traitants. La question qui tranche avant de remplir un privacy label App Store.

webcredentials — les 3 lignes qui branchent le trousseau iCloud sur ton app

Associated Domains, apple-app-site-association et les AutofillHints Flutter — la config qui active l'autofill iOS et prépare le terrain pour les passkeys.

Ton utilisateur français ouvre ton app, elle est en japonais — locale en Flutter

PlatformDispatcher.locale vs Localizations.localeOf — deux façons de récupérer la locale en Flutter, et l'ordre de supportedLocales qui tranche en silence.

Désinstaller ne suffit pas — l'Auto Backup Android restaure vos données à l'insu de tous

Dès l'API 23, Android sauvegarde prefs, SQLite et cache vers le Drive de l'utilisateur, puis les restaure à la réinstallation, avant même le premier lancement.

29 000 € de redressement pour un seuil dépassé sans le savoir — le piège du versement libératoire

La perte du droit au versement libératoire est automatique, mais la régularisation ne l'est pas. Le décalage de deux ans du RFR rend le piège traître.

Des paillettes façon Magic en Flutter — particules animées et playground Web

D'un GIF envoyé un vendredi après-midi à une implémentation Flutter de l'effet paillettes, particules animées comprises, avec un playground Web en ligne.

Ajouter un testeur iOS sans toucher au portail Apple — Bitrise Test devices

Fini l'enregistrement d'UDID sur le portail Apple et la régénération manuelle des provisioning profiles — Bitrise gère l'intégration au moment du build.

HiveCacheStore + dio_cache_interceptor — les 3 pièges que personne ne documente

Corruption au cold start, purge TTL absente, taille non bornée — trois cas limites du cache Dio + Hive en Flutter à gérer dès le départ pour éviter la casse.

« test cedric » en prod — pourquoi il faut trois projets Firebase séparés

Une notification de test envoyée en production à des milliers de clients d'une banque. Le scénario redouté par tout dev mobile, et la pratique qui l'évite.

Le poulet et le cochon — impliqué ou engagé, toute la différence d'une équipe

La fable du poulet et du cochon appliquée aux projets logiciels — distinguer ceux qui donnent un avis de ceux qui portent le code, et pourquoi les deux comptent.

SOLID en Flutter — des principes écrits dans la CI, pas dans un wiki

Une app qui dure trois ans en prod, ce n'est pas une question de framework récent mais de frontières respectées. SOLID appliqué concrètement en Flutter.

J'ai demandé un conseil fiscal à une IA — elle a validé une erreur à redressement

Une IA généraliste a confondu les articles 154 bis et 163 quatervicies sur la déduction PER. Ce qui a sauvé le coup — un outil conçu pour contredire.

Mon Supabase gratuit se mettait en pause tous les 7 jours — réglé en 5 lignes de SQL

Le plan gratuit de Supabase met votre projet en pause après 7 jours d'inactivité. Solution élégante avec pg_cron — la base génère sa propre activité.

92 % de tokens économisés — rendre visible le coût invisible des agents IA

RTK encapsule les commandes dev courantes dans des wrappers qui ne renvoient que l'essentiel au contexte de l'agent. Bilan chiffré sur 13 361 commandes.

La DES, l'obligation que personne ne vous annonce quand vous facturez dans l'UE

Facturer un client professionnel dans l'UE sans TVA ne suffit pas — la Déclaration Européenne de Services est obligatoire dès le premier euro, sous peine d'amende.

Accélérez vos cycles de test Flutter avec CallbackShortcuts

Vider le cache, remplir un formulaire, injecter un mot de passe de test en un raccourci clavier — sans classe Intent ni Action, et invisible en release.

Code IA-généré — pourquoi un audit humain reste indispensable

Le vibe coding accélère le développement mais laisse des angles morts. Ce qu'un audit expert détecte que vos outils ne voient pas.