{"@attributes":{"version":"2.0"},"channel":{"title":"Blog DEVLOPN Audit","link":"https:\/\/audit.devlopn.com\/blog\/","description":"Retours d\u2019exp\u00e9rience et analyses sur l\u2019audit de code Flutter, iOS et Android : architecture, s\u00e9curit\u00e9, performance, code IA-g\u00e9n\u00e9r\u00e9.","language":"fr-FR","item":[{"title":"1000 warnings supprim\u00e9s par des agents IA, que faut-il v\u00e9rifier ?","link":"https:\/\/audit.devlopn.com\/blog\/lints-agents-dette-invisible\/","guid":"https:\/\/audit.devlopn.com\/blog\/lints-agents-dette-invisible\/","pubDate":"Sun, 11 Oct 2026 06:00:00 GMT","description":"Supprimer les warnings Dart avec unawaited() ne corrige pas les bugs. Comment cadrer les agents IA et v\u00e9rifier les appels asynchrones lors de la revue de code."},{"title":"Un assetlinks.json placeholder en prod, et vos deeplinks sont interceptables","link":"https:\/\/audit.devlopn.com\/blog\/assetlinks-json-placeholder-prod\/","guid":"https:\/\/audit.devlopn.com\/blog\/assetlinks-json-placeholder-prod\/","pubDate":"Thu, 08 Oct 2026 06:00:00 GMT","description":"La v\u00e9rification App Links \u00e9choue en silence quand le fichier est un exemple copi\u00e9-coll\u00e9. R\u00e9sultat, vos liens deviennent interceptables. D\u00e9tectable en une commande."},{"title":"Le r\u00f4le GCS \u00ab lecture seule \u00bb qui expose la liste compl\u00e8te de vos fichiers","link":"https:\/\/audit.devlopn.com\/blog\/gcs-objectviewer-legacyobjectreader\/","guid":"https:\/\/audit.devlopn.com\/blog\/gcs-objectviewer-legacyobjectreader\/","pubDate":"Tue, 06 Oct 2026 06:00:00 GMT","description":"Sur un bucket public, objectViewer autorise le LIST anonyme complet l\u00e0 o\u00f9 legacyObjectReader le bloque. La diff\u00e9rence tient \u00e0 une permission. Test\u00e9 en curl."},{"title":"Cloudflare devant ma Cloud Function, et pourtant z\u00e9ro cache \u2014 le pi\u00e8ge des en-t\u00eates","link":"https:\/\/audit.devlopn.com\/blog\/cloudflare-cdn-devant-cloud-function-gcp\/","guid":"https:\/\/audit.devlopn.com\/blog\/cloudflare-cdn-devant-cloud-function-gcp\/","pubDate":"Fri, 18 Sep 2026 06:00:00 GMT","description":"Une Cloud Function qui sert des images Cloud Storage paie invocation + egress \u00e0 chaque vue. Le CDN ne cache rien sans Cache-Control \u2014 la cha\u00eene compl\u00e8te en 6 \u00e9tapes."},{"title":"ITSAppUsesNonExemptEncryption = false \u2014 le r\u00e9flexe faux des apps Flutter qui chiffrent","link":"https:\/\/audit.devlopn.com\/blog\/chiffrement-app-store-declaration-export\/","guid":"https:\/\/audit.devlopn.com\/blog\/chiffrement-app-store-declaration-export\/","pubDate":"Wed, 16 Sep 2026 06:00:00 GMT","description":"Chiffrer sa base locale avec sqlite3mc et cocher false, c'est r\u00e9pondre faux \u00e0 une question de classification EAR. Notes 3 et 4, ERN au BIS, d\u00e9claration ANSSI."},{"title":"La vaisselle du code \u2014 ne laissez pas votre dette technique s'accumuler","link":"https:\/\/audit.devlopn.com\/blog\/dette-technique-vaisselle-du-code\/","guid":"https:\/\/audit.devlopn.com\/blog\/dette-technique-vaisselle-du-code\/","pubDate":"Mon, 14 Sep 2026 06:00:00 GMT","description":"Un TODO \u00ab on g\u00e9rera cette erreur plus tard \u00bb rest\u00e9 des ann\u00e9es, un objet dummy fini en cache, et un bug bien r\u00e9el. La dette technique a des int\u00e9r\u00eats compos\u00e9s."},{"title":"Apple a rejet\u00e9 notre app pour un bug\u2026 d'iPadOS \u2014 et c'est un red\u00e9marrage qui a tout d\u00e9bloqu\u00e9","link":"https:\/\/audit.devlopn.com\/blog\/rejet-app-store-bug-ipados-reboot\/","guid":"https:\/\/audit.devlopn.com\/blog\/rejet-app-store-bug-ipados-reboot\/","pubDate":"Fri, 11 Sep 2026 06:00:00 GMT","description":"Rejet App Store pour un clavier vide qui plantait aussi dans Safari et la recherche iPadOS. Escalade t\u00e9l\u00e9phonique chez Apple, et le grand classique \u2014 reboot."},{"title":"SpecKit seul, j'ai l\u00e2ch\u00e9 \u2014 avec un orchestrator, 64 specs shipp\u00e9es d'affil\u00e9e","link":"https:\/\/audit.devlopn.com\/blog\/speckit-orchestrator-boucle-autonome\/","guid":"https:\/\/audit.devlopn.com\/blog\/speckit-orchestrator-boucle-autonome\/","pubDate":"Wed, 09 Sep 2026 06:00:00 GMT","description":"Transformer le pipeline manuel de SpecKit en boucle autonome s\u00fbre \u2014 backlog source de v\u00e9rit\u00e9, une feature par tour, invariants cod\u00e9s en dur dans la CI."},{"title":"Rejet\u00e9 deux fois par Apple pour deux popups dans le mauvais ordre \u2014 ATT et CMP","link":"https:\/\/audit.devlopn.com\/blog\/att-cmp-onetrust-ordre-consentement-ios\/","guid":"https:\/\/audit.devlopn.com\/blog\/att-cmp-onetrust-ordre-consentement-ios\/","pubDate":"Mon, 07 Sep 2026 06:00:00 GMT","description":"Prompt ATT d'Apple d'un c\u00f4t\u00e9, CMP RGPD de l'autre \u2014 l'ordre et le purpose linking qui font passer la review, et la guideline 5.1.1 qui rejette sinon."},{"title":"Vacances sans MacBook : garder un acc\u00e8s \u00e0 mon Mac depuis un iPad","link":"https:\/\/audit.devlopn.com\/blog\/vacances-sans-macbook\/","guid":"https:\/\/audit.devlopn.com\/blog\/vacances-sans-macbook\/","pubDate":"Mon, 07 Sep 2026 06:00:00 GMT","description":"Mon MacBook reste allum\u00e9 \u00e0 Lyon pendant mes vacances en Gr\u00e8ce. Avec Tailscale, SSH, tmux et Mosh, je garde un acc\u00e8s depuis mon iPad, m\u00eame en changeant de r\u00e9seau."},{"title":"38 000 \u20ac d'amende pour une ligne manquante dans des CGV \u2014 le m\u00e9diateur de la consommation","link":"https:\/\/audit.devlopn.com\/blog\/mediateur-consommation-cgv-freelance\/","guid":"https:\/\/audit.devlopn.com\/blog\/mediateur-consommation-cgv-freelance\/","pubDate":"Fri, 04 Sep 2026 06:00:00 GMT","description":"Depuis 2016, tout pro vendant \u00e0 des particuliers doit d\u00e9signer un m\u00e9diateur de la consommation et l'afficher \u2014 d\u00e8s le premier client, freelances compris."},{"title":"J'ai ajout\u00e9 une ligne \u00e0 ma Definition of Done \u2014 \/review avant de push","link":"https:\/\/audit.devlopn.com\/blog\/review-ia-definition-of-done\/","guid":"https:\/\/audit.devlopn.com\/blog\/review-ia-definition-of-done\/","pubDate":"Wed, 02 Sep 2026 06:00:00 GMT","description":"Une passe de review par un agent IA sur le diff avant m\u00eame d'ouvrir la PR \u2014 les reviewers humains lisent enfin de l'archi et des choix, plus des coquilles."},{"title":"verify(mock.method()) \u2014 le test vert qui laissait passer un double appel","link":"https:\/\/audit.devlopn.com\/blog\/mockito-verify-called-explicite\/","guid":"https:\/\/audit.devlopn.com\/blog\/mockito-verify-called-explicite\/","pubDate":"Mon, 31 Aug 2026 06:00:00 GMT","description":"En Mockito, verify sans .called(1) explicite peut rester vert alors que la m\u00e9thode part deux fois. Pourquoi la pr\u00e9cision dans les tests prot\u00e8ge le lecteur."},{"title":"Rejet App Store pour \u00ab clavier absent \u00bb \u2014 quand le faux positif vient du reviewer","link":"https:\/\/audit.devlopn.com\/blog\/rejet-app-store-clavier-ipad-faux-positif\/","guid":"https:\/\/audit.devlopn.com\/blog\/rejet-app-store-clavier-ipad-faux-positif\/","pubDate":"Fri, 28 Aug 2026 06:00:00 GMT","description":"Un rejet App Store impossible \u00e0 reproduire, une barre de raccourcis iPadOS sur la capture du reviewer, et un iPad jamais red\u00e9marr\u00e9 qui finit par tout expliquer."},{"title":"3 \u00e9tapes pour me passer de Figma en dev solo \u2014 du vibe designing au design.md","link":"https:\/\/audit.devlopn.com\/blog\/vibe-designing-design-md-source-verite\/","guid":"https:\/\/audit.devlopn.com\/blog\/vibe-designing-design-md-source-verite\/","pubDate":"Wed, 26 Aug 2026 06:00:00 GMT","description":"Du prompt au feeling au fichier design.md versionn\u00e9 \u2014 comment un fichier source unique de tokens et de r\u00e8gles transforme des prompts IA en vraies specs."},{"title":"Pourquoi Google te demande ton SIREN \u2014 la facture \u00e9lectronique arrive pour de vrai","link":"https:\/\/audit.devlopn.com\/blog\/facture-electronique-siren-fournisseurs\/","guid":"https:\/\/audit.devlopn.com\/blog\/facture-electronique-siren-fournisseurs\/","pubDate":"Mon, 24 Aug 2026 06:00:00 GMT","description":"Facture \u00e9lectronique obligatoire au 1er septembre 2026 \u2014 vos fournisseurs collectent les SIREN pour router les factures. La vague de mails ne fait que commencer."},{"title":"\u00ab Vous partagez des donn\u00e9es avec des data brokers ? \u00bb \u2014 la case \u00e0 ne pas cocher au feeling","link":"https:\/\/audit.devlopn.com\/blog\/data-broker-privacy-label-app-store\/","guid":"https:\/\/audit.devlopn.com\/blog\/data-broker-privacy-label-app-store\/","pubDate":"Fri, 21 Aug 2026 06:00:00 GMT","description":"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."},{"title":"Le token broker OAuth, quand il sert et quand c'est du cargo cult","link":"https:\/\/audit.devlopn.com\/blog\/token-broker-oauth-pkce\/","guid":"https:\/\/audit.devlopn.com\/blog\/token-broker-oauth-pkce\/","pubDate":"Thu, 20 Aug 2026 06:00:00 GMT","description":"Avec PKCE, le client mobile ne d\u00e9tient aucun secret. Le broker en Cloud Function n'est donc pas obligatoire, c'est un choix. Voici les bonnes raisons de le faire."},{"title":"webcredentials \u2014 les 3 lignes qui branchent le trousseau iCloud sur ton app","link":"https:\/\/audit.devlopn.com\/blog\/ios-webcredentials-autofill-passkeys\/","guid":"https:\/\/audit.devlopn.com\/blog\/ios-webcredentials-autofill-passkeys\/","pubDate":"Wed, 19 Aug 2026 06:00:00 GMT","description":"Associated Domains, apple-app-site-association et les AutofillHints Flutter \u2014 la config qui active l'autofill iOS et pr\u00e9pare le terrain pour les passkeys."},{"title":"Dropbox-API-Arg et les fichiers accentu\u00e9s, le premier bug de toute phototh\u00e8que fran\u00e7aise","link":"https:\/\/audit.devlopn.com\/blog\/dropbox-api-arg-accents\/","guid":"https:\/\/audit.devlopn.com\/blog\/dropbox-api-arg-accents\/","pubDate":"Tue, 18 Aug 2026 06:00:00 GMT","description":"Le header Dropbox-API-Arg doit \u00eatre de l'ASCII pur. Le premier \u00ab Vacances \u00e0 \u00c9ze.jpg \u00bb casse le t\u00e9l\u00e9chargement. La r\u00e8gle d'\u00e9chappement en une ligne."},{"title":"Ton utilisateur fran\u00e7ais ouvre ton app, elle est en japonais \u2014 locale en Flutter","link":"https:\/\/audit.devlopn.com\/blog\/flutter-locale-platformdispatcher-localeof\/","guid":"https:\/\/audit.devlopn.com\/blog\/flutter-locale-platformdispatcher-localeof\/","pubDate":"Mon, 17 Aug 2026 06:00:00 GMT","description":"PlatformDispatcher.locale vs Localizations.localeOf \u2014 deux fa\u00e7ons de r\u00e9cup\u00e9rer la locale en Flutter, et l'ordre de supportedLocales qui tranche en silence."},{"title":"D\u00e9sinstaller ne suffit pas \u2014 l'Auto Backup Android restaure vos donn\u00e9es \u00e0 l'insu de tous","link":"https:\/\/audit.devlopn.com\/blog\/android-auto-backup-donnees-reinstallation\/","guid":"https:\/\/audit.devlopn.com\/blog\/android-auto-backup-donnees-reinstallation\/","pubDate":"Fri, 14 Aug 2026 06:00:00 GMT","description":"D\u00e8s l'API 23, Android sauvegarde prefs, SQLite et cache vers le Drive de l'utilisateur, puis les restaure \u00e0 la r\u00e9installation, avant m\u00eame le premier lancement."},{"title":"Google Photos exige le header Authorization, OneDrive l'interdit","link":"https:\/\/audit.devlopn.com\/blog\/google-photos-onedrive-header\/","guid":"https:\/\/audit.devlopn.com\/blog\/google-photos-onedrive-header\/","pubDate":"Thu, 13 Aug 2026 06:00:00 GMT","description":"T\u00e9l\u00e9charger une photo utilisateur, deux clouds, deux comportements oppos\u00e9s sur le m\u00eame header HTTP. Le genre de d\u00e9tail qui co\u00fbte une journ\u00e9e de debug."},{"title":"29 000 \u20ac de redressement pour un seuil d\u00e9pass\u00e9 sans le savoir \u2014 le pi\u00e8ge du versement lib\u00e9ratoire","link":"https:\/\/audit.devlopn.com\/blog\/versement-liberatoire-seuil-rfr-redressement\/","guid":"https:\/\/audit.devlopn.com\/blog\/versement-liberatoire-seuil-rfr-redressement\/","pubDate":"Wed, 12 Aug 2026 06:00:00 GMT","description":"La perte du droit au versement lib\u00e9ratoire est automatique, mais la r\u00e9gularisation ne l'est pas. Le d\u00e9calage de deux ans du RFR rend le pi\u00e8ge tra\u00eetre."},{"title":"J'ai cartographi\u00e9 toutes les sources photo possibles pour mon app, voici les survivants","link":"https:\/\/audit.devlopn.com\/blog\/sources-photo-2026-survivants\/","guid":"https:\/\/audit.devlopn.com\/blog\/sources-photo-2026-survivants\/","pubDate":"Tue, 11 Aug 2026 06:00:00 GMT","description":"Instagram Basic Display est mort, WhatsApp est structurellement ferm\u00e9, Facebook tient encore. Le paysage r\u00e9el des imports photo pour une app mobile en 2026."},{"title":"Des paillettes fa\u00e7on Magic en Flutter \u2014 particules anim\u00e9es et playground Web","link":"https:\/\/audit.devlopn.com\/blog\/effet-paillettes-flutter-particules\/","guid":"https:\/\/audit.devlopn.com\/blog\/effet-paillettes-flutter-particules\/","pubDate":"Mon, 10 Aug 2026 06:00:00 GMT","description":"D'un GIF envoy\u00e9 un vendredi apr\u00e8s-midi \u00e0 une impl\u00e9mentation Flutter de l'effet paillettes, particules anim\u00e9es comprises, avec un playground Web en ligne."},{"title":"Ajouter un testeur iOS sans toucher au portail Apple \u2014 Bitrise Test devices","link":"https:\/\/audit.devlopn.com\/blog\/bitrise-test-devices-udid-ios\/","guid":"https:\/\/audit.devlopn.com\/blog\/bitrise-test-devices-udid-ios\/","pubDate":"Fri, 07 Aug 2026 06:00:00 GMT","description":"Fini l'enregistrement d'UDID sur le portail Apple et la r\u00e9g\u00e9n\u00e9ration manuelle des provisioning profiles \u2014 Bitrise g\u00e8re l'int\u00e9gration au moment du build."},{"title":"Flutter 3.19 embarque enfin les assets par flavor, et personne ne l'utilise","link":"https:\/\/audit.devlopn.com\/blog\/flutter-assets-par-flavor\/","guid":"https:\/\/audit.devlopn.com\/blog\/flutter-assets-par-flavor\/","pubDate":"Thu, 06 Aug 2026 06:00:00 GMT","description":"Depuis Flutter 3.19, pubspec.yaml sait exclure les assets hors flavor du bundle. Build plus l\u00e9ger sans toucher au code, avec deux limites \u00e0 conna\u00eetre."},{"title":"HiveCacheStore + dio_cache_interceptor \u2014 les 3 pi\u00e8ges que personne ne documente","link":"https:\/\/audit.devlopn.com\/blog\/hive-dio-cache-interceptor-pieges\/","guid":"https:\/\/audit.devlopn.com\/blog\/hive-dio-cache-interceptor-pieges\/","pubDate":"Wed, 05 Aug 2026 06:00:00 GMT","description":"Corruption au cold start, purge TTL absente, taille non born\u00e9e \u2014 trois cas limites du cache Dio + Hive en Flutter \u00e0 g\u00e9rer d\u00e8s le d\u00e9part pour \u00e9viter la casse."},{"title":"in_app_review \u2014 3 chances par an, et Apple ne vous dira jamais rien","link":"https:\/\/audit.devlopn.com\/blog\/in-app-review-quota-apple\/","guid":"https:\/\/audit.devlopn.com\/blog\/in-app-review-quota-apple\/","pubDate":"Tue, 04 Aug 2026 06:00:00 GMT","description":"La popup de notation iOS est limit\u00e9e \u00e0 3 affichages par an et par device, sans aucun feedback d\u00e9veloppeur. Et la guideline qu'on cite partout est la mauvaise."},{"title":"\u00ab test cedric \u00bb en prod \u2014 pourquoi il faut trois projets Firebase s\u00e9par\u00e9s","link":"https:\/\/audit.devlopn.com\/blog\/notification-test-prod-environnements-firebase\/","guid":"https:\/\/audit.devlopn.com\/blog\/notification-test-prod-environnements-firebase\/","pubDate":"Mon, 03 Aug 2026 06:00:00 GMT","description":"Une notification de test envoy\u00e9e en production \u00e0 des milliers de clients d'une banque. Le sc\u00e9nario redout\u00e9 par tout dev mobile, et la pratique qui l'\u00e9vite."},{"title":"Le poulet et le cochon \u2014 impliqu\u00e9 ou engag\u00e9, toute la diff\u00e9rence d'une \u00e9quipe","link":"https:\/\/audit.devlopn.com\/blog\/poulet-cochon-implique-engage-agile\/","guid":"https:\/\/audit.devlopn.com\/blog\/poulet-cochon-implique-engage-agile\/","pubDate":"Fri, 31 Jul 2026 06:00:00 GMT","description":"La fable du poulet et du cochon appliqu\u00e9e aux projets logiciels \u2014 distinguer ceux qui donnent un avis de ceux qui portent le code, et pourquoi les deux comptent."},{"title":"SOLID en Flutter \u2014 des principes \u00e9crits dans la CI, pas dans un wiki","link":"https:\/\/audit.devlopn.com\/blog\/solid-flutter-frontieres-ci\/","guid":"https:\/\/audit.devlopn.com\/blog\/solid-flutter-frontieres-ci\/","pubDate":"Wed, 29 Jul 2026 06:00:00 GMT","description":"Une app qui dure trois ans en prod, ce n'est pas une question de framework r\u00e9cent mais de fronti\u00e8res respect\u00e9es. SOLID appliqu\u00e9 concr\u00e8tement en Flutter."},{"title":"J'ai demand\u00e9 un conseil fiscal \u00e0 une IA \u2014 elle a valid\u00e9 une erreur \u00e0 redressement","link":"https:\/\/audit.devlopn.com\/blog\/ia-conseil-fiscal-per-erreur\/","guid":"https:\/\/audit.devlopn.com\/blog\/ia-conseil-fiscal-per-erreur\/","pubDate":"Mon, 27 Jul 2026 06:00:00 GMT","description":"Une IA g\u00e9n\u00e9raliste a confondu les articles 154 bis et 163 quatervicies sur la d\u00e9duction PER. Ce qui a sauv\u00e9 le coup \u2014 un outil con\u00e7u pour contredire."},{"title":"Mon Supabase gratuit se mettait en pause tous les 7 jours \u2014 r\u00e9gl\u00e9 en 5 lignes de SQL","link":"https:\/\/audit.devlopn.com\/blog\/supabase-pause-pg-cron-keep-alive\/","guid":"https:\/\/audit.devlopn.com\/blog\/supabase-pause-pg-cron-keep-alive\/","pubDate":"Fri, 24 Jul 2026 06:00:00 GMT","description":"Le plan gratuit de Supabase met votre projet en pause apr\u00e8s 7 jours d'inactivit\u00e9. Solution \u00e9l\u00e9gante avec pg_cron \u2014 la base g\u00e9n\u00e8re sa propre activit\u00e9."},{"title":"92 % de tokens \u00e9conomis\u00e9s \u2014 rendre visible le co\u00fbt invisible des agents IA","link":"https:\/\/audit.devlopn.com\/blog\/rtk-economie-tokens-agents-ia\/","guid":"https:\/\/audit.devlopn.com\/blog\/rtk-economie-tokens-agents-ia\/","pubDate":"Wed, 22 Jul 2026 06:00:00 GMT","description":"RTK encapsule les commandes dev courantes dans des wrappers qui ne renvoient que l'essentiel au contexte de l'agent. Bilan chiffr\u00e9 sur 13 361 commandes."},{"title":"La DES, l'obligation que personne ne vous annonce quand vous facturez dans l'UE","link":"https:\/\/audit.devlopn.com\/blog\/des-declaration-europeenne-services-freelance\/","guid":"https:\/\/audit.devlopn.com\/blog\/des-declaration-europeenne-services-freelance\/","pubDate":"Mon, 20 Jul 2026 06:00:00 GMT","description":"Facturer un client professionnel dans l'UE sans TVA ne suffit pas \u2014 la D\u00e9claration Europ\u00e9enne de Services est obligatoire d\u00e8s le premier euro, sous peine d'amende."},{"title":"Acc\u00e9l\u00e9rez vos cycles de test Flutter avec CallbackShortcuts","link":"https:\/\/audit.devlopn.com\/blog\/flutter-callbackshortcuts-keyboard-shortcuts\/","guid":"https:\/\/audit.devlopn.com\/blog\/flutter-callbackshortcuts-keyboard-shortcuts\/","pubDate":"Thu, 16 Jul 2026 06:00:00 GMT","description":"Vider le cache, remplir un formulaire, injecter un mot de passe de test en un raccourci clavier \u2014 sans classe Intent ni Action, et invisible en release."},{"title":"Code IA-g\u00e9n\u00e9r\u00e9 \u2014 pourquoi un audit humain reste indispensable","link":"https:\/\/audit.devlopn.com\/blog\/code-ia-genere-pourquoi-auditer\/","guid":"https:\/\/audit.devlopn.com\/blog\/code-ia-genere-pourquoi-auditer\/","pubDate":"Fri, 10 Jul 2026 06:00:00 GMT","description":"Le vibe coding acc\u00e9l\u00e8re le d\u00e9veloppement mais laisse des angles morts. Ce qu'un audit expert d\u00e9tecte que vos outils ne voient pas."}]}}