{"id":200,"date":"2026-10-07T06:39:58","date_gmt":"2026-10-07T05:39:58","guid":{"rendered":"https:\/\/arrowlancer.ma\/blog\/?p=200"},"modified":"2026-10-07T06:39:58","modified_gmt":"2026-10-07T05:39:58","slug":"tma-flutter-maroc-prestataire-2026","status":"publish","type":"post","link":"https:\/\/arrowlancer.ma\/blog\/fr\/tma-flutter-maroc-prestataire-2026\/","title":{"rendered":"TMA Flutter Maroc : choisir le bon prestataire en 2026"},"content":{"rendered":"<p>Une application Flutter livr\u00e9e il y a dix-huit mois a d\u00e9j\u00e0 vu passer environ six versions stables du SDK. Flutter publie en moyenne une release stable par trimestre, Dart suit le m\u00eame rythme, et chacune de ces mont\u00e9es d\u00e9place quelque chose : une API d\u00e9pr\u00e9ci\u00e9e qui dispara\u00eet, un comportement de rendu qui change, une contrainte de version qui bloque un package. Pendant ce temps, Google Play et l\u2019App Store ont relev\u00e9 leurs exigences de build au moins une fois.<\/p>\n<p>C\u2019est pour cette raison que tant de PME marocaines se retrouvent avec une application qui fonctionne encore sur les t\u00e9l\u00e9phones des utilisateurs mais qui ne compile plus sur la machine du prestataire suivant. Le code n\u2019a pas boug\u00e9. Tout ce qui l\u2019entoure a boug\u00e9.<\/p>\n<p>Si votre app a \u00e9t\u00e9 d\u00e9velopp\u00e9e par un freelance ou une petite structure aujourd\u2019hui injoignable, la vraie question n\u2019est pas de savoir s\u2019il faut tout refaire. Un code Flutter de deux ou trois ans se reprend presque toujours. Encore faut-il un prestataire qui sait par o\u00f9 commencer.<\/p>\n<h2>Ce qui casse dans une app Flutter n\u2019est pas ce qui casse dans une app native<\/h2>\n<p>Dans une application native, la surface d\u2019instabilit\u00e9 est assez lisible : le langage (Swift ou Kotlin), le SDK de la plateforme, quelques biblioth\u00e8ques. Quand Apple change une API, vous le lisez dans les notes de version d\u2019Xcode et vous corrigez.<\/p>\n<p>Flutter ajoute deux couches par-dessus. Le SDK Flutter et le langage Dart \u00e9voluent sur leur propre calendrier, ind\u00e9pendamment d\u2019Apple et de Google. Et presque toutes les fonctions qui touchent au t\u00e9l\u00e9phone (cam\u00e9ra, notifications, biom\u00e9trie, paiement, g\u00e9olocalisation, stockage s\u00e9curis\u00e9) passent par un package communautaire de pub.dev qui enveloppe lui-m\u00eame du code natif. Vous h\u00e9ritez donc du calendrier d\u2019Apple, de celui de Google, de celui de Flutter et de celui de plusieurs dizaines de mainteneurs b\u00e9n\u00e9voles. Ce n\u2019est pas un argument contre Flutter, qui reste souvent le bon choix pour une PME qui veut deux plateformes avec une seule \u00e9quipe, comme nous l\u2019expliquons dans notre <a href=\"https:\/\/arrowlancer.ma\/blog\/fr\/application-native-ou-flutter-maroc-2026\/\">guide de d\u00e9cision entre application native et Flutter<\/a>. Mais la maintenance demande une comp\u00e9tence suppl\u00e9mentaire : savoir \u00e0 quel \u00e9tage de cet empilement se situe la panne.<\/p>\n<h2>Chaque version stable du SDK d\u00e9place quelque chose<\/h2>\n<p>Sur le papier, une mise \u00e0 jour SDK Flutter est indolore. En pratique, les d\u00e9pr\u00e9ciations ont une dur\u00e9e de vie limit\u00e9e : une API marqu\u00e9e obsol\u00e8te finit par \u00eatre retir\u00e9e, et si vous avez saut\u00e9 quatre versions, vous r\u00e9cup\u00e9rez la suppression sans avoir jamais vu l\u2019avertissement.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/arrowlancer-prod.firebasestorage.app\/blog-ma\/tma-flutter-maroc-prestataire-2026\/1.jpg\" alt=\"TMA Flutter Maroc : choisir le bon prestataire en 2026\" loading=\"lazy\" \/><\/p>\n<p>Quelques ruptures bien document\u00e9es, pour donner une id\u00e9e du genre de travail que \u00e7a repr\u00e9sente :<\/p>\n<ul>\n<li>Material 3 devenu le th\u00e8me par d\u00e9faut : l\u2019apparence de tous vos composants change sans qu\u2019une ligne de votre code bouge.<\/li>\n<li>WillPopScope remplac\u00e9 par PopScope pour la gestion du bouton retour, avec un comportement diff\u00e9rent sur les formulaires \u00e0 confirmation.<\/li>\n<li>La d\u00e9claration du plugin Gradle c\u00f4t\u00e9 Android pass\u00e9e en mode d\u00e9claratif, ce qui invalide les fichiers de build g\u00e9n\u00e9r\u00e9s par les anciennes versions de Flutter.<\/li>\n<li>Les contraintes de version Dart dans le pubspec, qui arr\u00eatent net la compilation d\u00e8s que le SDK install\u00e9 sort de l\u2019intervalle d\u00e9clar\u00e9.<\/li>\n<\/ul>\n<p>La cons\u00e9quence est simple : on ne passe pas de Flutter 3.3 \u00e0 la derni\u00e8re version en une commande. Un prestataire qui sait faire avance par paliers, remonte version par version et v\u00e9rifie la compilation et les \u00e9crans critiques \u00e0 chaque \u00e9tape. Il fixe aussi la version de Flutter du projet, avec fvm ou un \u00e9quivalent, pour que deux d\u00e9veloppeurs ne compilent pas avec deux SDK diff\u00e9rents. Si personne ne vous parle de \u00e7a en avant-vente, notez-le.<\/p>\n<h2>pub.dev : la dette que personne ne surveille<\/h2>\n<p>Ouvrez le fichier pubspec.yaml de votre application. Vous y trouverez probablement entre vingt et cinquante d\u00e9pendances directes, et plusieurs fois plus de d\u00e9pendances transitives. Chacune est maintenue par quelqu\u2019un qui ne vous conna\u00eet pas et qui n\u2019a aucune obligation envers vous.<\/p>\n<p>La commande flutter pub outdated donne en une minute l\u2019\u00e9tat r\u00e9el du parc : ce qui est en retard d\u2019une version mineure, ce qui est en retard d\u2019une majeure, et ce qui n\u2019est plus r\u00e9soluble du tout. Sur pub.dev, chaque package affiche sa date de derni\u00e8re publication et, le cas \u00e9ch\u00e9ant, un bandeau \u00ab discontinued \u00bb. Les mauvaises nouvelles sont presque toujours l\u00e0.<\/p>\n<p>Les packages les plus risqu\u00e9s sont ceux qui enveloppent un SDK natif : webview, notifications locales, gestion des permissions, lecteurs de QR et surtout passerelles de paiement. Un wrapper abandonn\u00e9 autour d\u2019un SDK de paiement qui continue d\u2019\u00e9voluer de son c\u00f4t\u00e9, c\u2019est une impasse dat\u00e9e. Il faudra soit changer de package, soit \u00e9crire le pont natif \u00e0 la main, et les deux options se chiffrent. Autre indicateur utile : la pr\u00e9sence d\u2019un bloc dependency_overrides. C\u2019est parfois l\u00e9gitime et temporaire, mais c\u2019est souvent la trace d\u2019un conflit de versions contourn\u00e9 plut\u00f4t que r\u00e9solu, qui ressortira \u00e0 la premi\u00e8re mont\u00e9e de SDK.<\/p>\n<h2>Ce qui remonte des couches natives iOS et Android<\/h2>\n<p>Flutter ne vous dispense pas des r\u00e8gles des deux magasins. Google Play impose chaque ann\u00e9e un niveau d\u2019API cible minimum pour publier une mise \u00e0 jour, et Apple exige r\u00e9guli\u00e8rement que les binaires soient compil\u00e9s avec une version r\u00e9cente du SDK iOS. Les dates et les niveaux exacts changent : v\u00e9rifiez-les dans la console Play et dans les annonces Apple Developer plut\u00f4t que de vous fier \u00e0 un chiffre lu dans un article. Concr\u00e8tement, ces exigences se traduisent par :<\/p>\n<ul>\n<li>une mont\u00e9e d\u2019Android Gradle Plugin et de Kotlin, parfois du JDK utilis\u00e9 par le projet ;<\/li>\n<li>une mise \u00e0 jour d\u2019Xcode, qui impose parfois une mont\u00e9e de macOS, donc parfois un Mac plus r\u00e9cent ;<\/li>\n<li>la r\u00e9g\u00e9n\u00e9ration des pods iOS et la relecture des permissions d\u00e9clar\u00e9es dans Info.plist, qu\u2019Apple examine \u00e0 chaque soumission ;<\/li>\n<li>des changements de comportement Android (affichage bord \u00e0 bord, contraintes m\u00e9moire) qui d\u00e9gradent l\u2019affichage r\u00e9el sans produire la moindre erreur de compilation.<\/li>\n<\/ul>\n<p>Reste le volet administratif, qui bloque plus de reprises que le code lui-m\u00eame. Le compte Apple Developer (99 USD par an) et le compte Google Play (25 USD une fois) doivent \u00eatre au nom de votre soci\u00e9t\u00e9, pas \u00e0 celui du d\u00e9veloppeur parti. Le keystore de signature Android ne se r\u00e9g\u00e9n\u00e8re pas : si l\u2019application est inscrite \u00e0 Play App Signing vous pouvez demander une r\u00e9initialisation de la cl\u00e9 de t\u00e9l\u00e9versement, sinon vous perdez la possibilit\u00e9 de mettre \u00e0 jour l\u2019app existante. Ces points sont d\u00e9taill\u00e9s dans notre article sur <a href=\"https:\/\/arrowlancer.ma\/blog\/fr\/publier-application-mobile-maroc-app-store-play-store\/\">la publication d\u2019une application mobile au Maroc<\/a>.<\/p>\n<h2>TMA Flutter Maroc : les fourchettes de prix en 2026<\/h2>\n<p>Le co\u00fbt TMA mobile Maroc d\u00e9pend moins du nombre d\u2019\u00e9crans que de la dette accumul\u00e9e et du niveau d\u2019engagement demand\u00e9. Les fourchettes ci-dessous correspondent \u00e0 ce qui se pratique sur le march\u00e9 marocain en 2026, hors \u00e9volutions fonctionnelles factur\u00e9es au projet.<\/p>\n<ul>\n<li><strong>Veille et correctifs<\/strong> (surveillance des crashs, mont\u00e9es de SDK, conformit\u00e9 stores, aucune nouvelle fonctionnalit\u00e9) : 2 500 \u00e0 6 000 MAD par mois pour une app simple.<\/li>\n<li><strong>TMA standard avec SLA<\/strong> (d\u00e9lai de prise en charge contractuel, correctifs, petites \u00e9volutions, une \u00e0 deux publications par trimestre) : 6 000 \u00e0 15 000 MAD par mois.<\/li>\n<li><strong>Application critique<\/strong> (paiement en ligne, backend sur mesure, plusieurs apps, astreinte) : 15 000 \u00e0 35 000 MAD par mois, parfois plus.<\/li>\n<li><strong>Audit de reprise initial<\/strong> : 8 000 \u00e0 25 000 MAD selon la taille du code et l\u2019\u00e9tat de la documentation.<\/li>\n<li><strong>Rattrapage de SDK<\/strong> couvrant deux ou trois ans de retard, factur\u00e9 une fois : 20 000 \u00e0 60 000 MAD.<\/li>\n<\/ul>\n<p>Les taux journaliers s\u2019\u00e9talent largement, d\u2019un freelance Flutter exp\u00e9riment\u00e9 \u00e0 une agence structur\u00e9e, et l\u2019\u00e9cart se paie surtout en continuit\u00e9 de service quand la personne qui conna\u00eet votre code tombe malade. Pour le cadrage g\u00e9n\u00e9ral d\u2019un budget, les postes de la <a href=\"https:\/\/arrowlancer.ma\/blog\/fr\/maintenance-application-mobile-maroc-budget-2026\/\">maintenance d\u2019application mobile au Maroc<\/a> restent les m\u00eames, Flutter ou pas.<\/p>\n<h2>G\u00e9n\u00e9raliste mobile ou prestataire Flutter : ce qu\u2019il faut v\u00e9rifier avant de signer<\/h2>\n<p>Cinq questions suffisent g\u00e9n\u00e9ralement \u00e0 savoir \u00e0 qui vous parlez.<\/p>\n<ol>\n<li><strong>Quelle version de Flutter tourne dans votre int\u00e9gration continue ?<\/strong> Un num\u00e9ro pr\u00e9cis, un fichier de version \u00e9pingl\u00e9, un pipeline : tout vaut mieux que \u00ab la derni\u00e8re \u00bb.<\/li>\n<li><strong>Montrez-moi une migration majeure que vous avez men\u00e9e.<\/strong> Pas une app livr\u00e9e de z\u00e9ro : une app reprise, remise \u00e0 jour depuis plusieurs versions de retard, avec le temps que \u00e7a a pris.<\/li>\n<li><strong>Qui chez vous lit du Kotlin et du Swift ?<\/strong> Une \u00e9quipe Flutter incapable de descendre dans les dossiers android\/ et ios\/ ne corrigera pas la moiti\u00e9 des pannes r\u00e9elles.<\/li>\n<li><strong>Comment traitez-vous un package abandonn\u00e9 ?<\/strong> La bonne r\u00e9ponse parle de fork maintenu, de remplacement \u00e9valu\u00e9 ou de pont natif \u00e9crit \u00e0 la main.<\/li>\n<li><strong>Que se passe-t-il si nous partons ?<\/strong> D\u00e9p\u00f4t Git chez vous, comptes stores \u00e0 votre nom, documentation de build \u00e0 jour. Ces clauses figurent dans notre guide pour <a href=\"https:\/\/arrowlancer.ma\/blog\/fr\/changer-prestataire-it-maroc-2026\/\">changer de prestataire IT au Maroc<\/a>.<\/li>\n<\/ol>\n<p>Un g\u00e9n\u00e9raliste mobile s\u00e9rieux fait tr\u00e8s bien ce travail. Ce qui disqualifie un prestataire, ce n\u2019est pas l\u2019absence d\u2019\u00e9tiquette Flutter, c\u2019est la proposition de repartir de z\u00e9ro avant m\u00eame d\u2019avoir ouvert le code. Une r\u00e9\u00e9criture compl\u00e8te co\u00fbte plusieurs fois le prix d\u2019une remise \u00e0 niveau, et vous repayez des fonctionnalit\u00e9s que vous poss\u00e9dez d\u00e9j\u00e0.<\/p>\n<h2>L\u2019audit de reprise, avant la premi\u00e8re ligne de code<\/h2>\n<p>Personne ne devrait s\u2019engager sur une TMA sans avoir compil\u00e9 le projet lui-m\u00eame. L\u2019audit de reprise tient en g\u00e9n\u00e9ral entre trois et dix jours ouvr\u00e9s, et son d\u00e9roul\u00e9 est assez stable.<\/p>\n<ol>\n<li>Cloner le d\u00e9p\u00f4t sur une machine neuve et tenter un build Android puis un build iOS sans aide ext\u00e9rieure. Le temps n\u00e9cessaire est la premi\u00e8re mesure de l\u2019\u00e9tat du projet.<\/li>\n<li>Relever les versions (Flutter, Dart, AGP, Kotlin, JDK, cible de d\u00e9ploiement iOS) et l\u2019\u00e9cart avec ce qui est support\u00e9 aujourd\u2019hui.<\/li>\n<li>Lancer flutter pub outdated et flutter analyze, puis classer chaque d\u00e9pendance : \u00e0 jour, en retard, sans mainteneur.<\/li>\n<li>Inspecter android\/ et ios\/ pour rep\u00e9rer ce qui a \u00e9t\u00e9 modifi\u00e9 \u00e0 la main par rapport aux gabarits g\u00e9n\u00e9r\u00e9s.<\/li>\n<li>Chercher les secrets en clair dans le d\u00e9p\u00f4t, v\u00e9rifier les fichiers de configuration Firebase, les certificats et le keystore.<\/li>\n<li>Reconstituer la cha\u00eene de publication et les acc\u00e8s r\u00e9els aux comptes stores, au backend, au DNS.<\/li>\n<li>Rendre une liste de risques hi\u00e9rarchis\u00e9e avec un plan \u00e0 90 jours chiffr\u00e9, et ce qui peut attendre sans danger.<\/li>\n<\/ol>\n<p>Ce livrable garde sa valeur m\u00eame si vous confiez ensuite la TMA \u00e0 quelqu\u2019un d\u2019autre. Il \u00e9vite surtout la situation la plus fr\u00e9quente : la maintenance d\u00e9marre, la premi\u00e8re mise \u00e0 jour de store est refus\u00e9e, et personne n\u2019avait budg\u00e9t\u00e9 les trois semaines de remise \u00e0 niveau que \u00e7a demande.<\/p>\n<h2>CNDP : ce qui doit suivre quand la maintenance change de mains<\/h2>\n<p>Une application qui collecte un nom, un num\u00e9ro de t\u00e9l\u00e9phone, une position ou un historique d\u2019achat traite des donn\u00e9es personnelles au sens de la loi 09-08. Changer de prestataire ne change pas qui est responsable de traitement : c\u2019est vous. Au moment de la bascule, la d\u00e9claration aupr\u00e8s de la CNDP doit refl\u00e9ter la r\u00e9alit\u00e9, y compris l\u2019identit\u00e9 du sous-traitant technique qui acc\u00e8de aux donn\u00e9es. Les formulaires et la proc\u00e9dure \u00e9voluent, donc v\u00e9rifiez l\u2019\u00e9tat actuel sur le site de la CNDP plut\u00f4t que de recopier un mod\u00e8le de 2022. Le contrat de TMA doit encadrer cet acc\u00e8s : finalit\u00e9, dur\u00e9e, interdiction de copier la base de production vers un environnement de test non prot\u00e9g\u00e9, obligation de notification en cas d\u2019incident.<\/p>\n<p>Il y a enfin le m\u00e9nage sur les acc\u00e8s de l\u2019ancien prestataire : console Firebase, cl\u00e9s d\u2019API, acc\u00e8s au backend, compte de test sur les stores. Tant qu\u2019ils existent, le risque reste chez vous. M\u00eame logique pour les SDK tiers embarqu\u00e9s dans l\u2019application (analytics, outil de crash, notifications push) : ils envoient des donn\u00e9es hors du Maroc et doivent appara\u00eetre dans votre politique de confidentialit\u00e9 et dans la fiche store.<\/p>\n<h2>Questions fr\u00e9quentes<\/h2>\n<h3>Faut-il refaire une application Flutter de trois ans ?<\/h3>\n<p>Rarement. Un code \u00e9crit proprement se remet \u00e0 niveau en deux \u00e0 six semaines selon sa taille. La r\u00e9\u00e9criture devient d\u00e9fendable quand l\u2019architecture interdit toute \u00e9volution (logique m\u00e9tier dans les widgets, aucun test, gestion d\u2019\u00e9tat incontr\u00f4l\u00e9e) ou quand le besoin fonctionnel a lui-m\u00eame chang\u00e9.<\/p>\n<h3>Combien de temps faut-il pour reprendre un code Flutter sans documentation ?<\/h3>\n<p>Comptez l\u2019audit, puis une p\u00e9riode d\u2019appropriation o\u00f9 l\u2019\u00e9quipe corrige de vraies anomalies au lieu de lire le code. Sur une application de taille moyenne, un prestataire est g\u00e9n\u00e9ralement autonome au bout de quatre \u00e0 six semaines.<\/p>\n<h3>Le d\u00e9veloppeur initial a disparu avec le keystore Android, que faire ?<\/h3>\n<p>Si l\u2019application est inscrite \u00e0 Play App Signing, vous pouvez demander la r\u00e9initialisation de la cl\u00e9 de t\u00e9l\u00e9versement depuis la console Play et continuer \u00e0 publier. Sinon, il faut republier sous un nouvel identifiant d\u2019application, donc perdre les installations, les avis et la note. V\u00e9rifiez ce point avant toute n\u00e9gociation.<\/p>\n<h3>\u00c0 quelle fr\u00e9quence faut-il monter la version de Flutter ?<\/h3>\n<p>Une \u00e0 deux fois par an convient \u00e0 la plupart des applications de PME, en plus des correctifs de s\u00e9curit\u00e9. L\u2019objectif n\u2019est pas d\u2019\u00eatre sur la derni\u00e8re version, mais de ne jamais se retrouver \u00e0 plus de deux versions majeures de retard.<\/p>\n<h3>Un forfait mensuel est-il n\u00e9cessaire, ou peut-on payer \u00e0 l\u2019intervention ?<\/h3>\n<p>Le paiement \u00e0 l\u2019intervention fonctionne tant que rien d\u2019urgent n\u2019arrive. Le jour o\u00f9 une publication est refus\u00e9e, la file d\u2019attente du prestataire passe avant vous. Un forfait, m\u00eame minimal, ach\u00e8te d\u2019abord un d\u00e9lai de prise en charge.<\/p>\n<p>Chez Arrowlancer, \u00e0 Casablanca, notre \u00e9quipe mobile reprend des applications Flutter et React Native existantes : audit de reprise d\u2019abord, puis maintenance avec mont\u00e9es de SDK planifi\u00e9es, suivi des packages et publications sur les deux stores. Le d\u00e9tail figure sur la page de nos <a href=\"https:\/\/arrowlancer.ma\/fr\/#services\">services<\/a>. Si votre application n\u2019a plus de mainteneur, \u00e9crivez-nous via le <a href=\"https:\/\/arrowlancer.ma\/fr\/#contact\">formulaire de contact<\/a> avec l\u2019acc\u00e8s au d\u00e9p\u00f4t et le nom sur le store : nous vous dirons ce qui se r\u00e9pare et ce qui se remplace.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Les mises \u00e0 jour du SDK Flutter et la d\u00e9rive des packages pub.dev cassent le code autrement. Prix 2026 de la TMA Flutter au Maroc et audit de reprise.<\/p>\n","protected":false},"author":0,"featured_media":202,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27],"tags":[770,209,766,768,764],"class_list":["post-200","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cost_and_planning","tag-budget-it-2026","tag-flutter","tag-maintenance-application-mobile","tag-prestataire-mobile-maroc","tag-tma-flutter"],"_links":{"self":[{"href":"https:\/\/arrowlancer.ma\/blog\/wp-json\/wp\/v2\/posts\/200","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arrowlancer.ma\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/arrowlancer.ma\/blog\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/arrowlancer.ma\/blog\/wp-json\/wp\/v2\/comments?post=200"}],"version-history":[{"count":1,"href":"https:\/\/arrowlancer.ma\/blog\/wp-json\/wp\/v2\/posts\/200\/revisions"}],"predecessor-version":[{"id":203,"href":"https:\/\/arrowlancer.ma\/blog\/wp-json\/wp\/v2\/posts\/200\/revisions\/203"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/arrowlancer.ma\/blog\/wp-json\/wp\/v2\/media\/202"}],"wp:attachment":[{"href":"https:\/\/arrowlancer.ma\/blog\/wp-json\/wp\/v2\/media?parent=200"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arrowlancer.ma\/blog\/wp-json\/wp\/v2\/categories?post=200"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arrowlancer.ma\/blog\/wp-json\/wp\/v2\/tags?post=200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}