<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Apple Store Archives - FlutterNow</title>
	<atom:link href="https://flutter-now.com/tag/apple-store/feed/" rel="self" type="application/rss+xml" />
	<link>https://flutter-now.com/tag/apple-store/</link>
	<description>Le rendez-vous des développeurs Flutter.</description>
	<lastBuildDate>Thu, 30 Oct 2025 16:42:10 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://flutter-now.com/wp-content/uploads/2025/01/cropped-logo-32x32.png</url>
	<title>Apple Store Archives - FlutterNow</title>
	<link>https://flutter-now.com/tag/apple-store/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">249724562</site>	<item>
		<title>Arborescence des screenshots multilingues – App Store &#038; Play Store</title>
		<link>https://flutter-now.com/android/arborescence-des-screenshots-multilingues-app-store-play-store/</link>
					<comments>https://flutter-now.com/android/arborescence-des-screenshots-multilingues-app-store-play-store/#respond</comments>
		
		<dc:creator><![CDATA[Geoffrey]]></dc:creator>
		<pubDate>Thu, 16 Oct 2025 09:59:34 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Fastlane]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[Apple Store]]></category>
		<category><![CDATA[Déploiement]]></category>
		<category><![CDATA[Google Play Store]]></category>
		<category><![CDATA[IOS]]></category>
		<category><![CDATA[Multilingue]]></category>
		<category><![CDATA[Screenshots]]></category>
		<guid isPermaLink="false">https://flutter-now.com/?p=265</guid>

					<description><![CDATA[<p>Les captures d’écran sont un élément essentiel de la présentation d’une application sur les stores mobiles.Elles influencent directement la conversion, la crédibilité et la qualité [&#8230;]</p>
<p>The post <a href="https://flutter-now.com/android/arborescence-des-screenshots-multilingues-app-store-play-store/">Arborescence des screenshots multilingues – App Store &amp; Play Store</a> appeared first on <a href="https://flutter-now.com">FlutterNow</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Les <strong>captures d’écran</strong> sont un élément essentiel de la présentation d’une application sur les stores mobiles.<br>Elles influencent directement la <strong>conversion</strong>, la <strong>crédibilité</strong> et la <strong>qualité perçue</strong> de ton produit.<br>Pour garantir une diffusion fluide et conforme, il est crucial d’adopter une <strong>arborescence structurée</strong>, des <strong>tailles cohérentes</strong>, et des <strong>captures localisées</strong> pour chaque langue.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1439580806237607" crossorigin="anonymous"></script>
<div class="adsense-wrapper"><ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-1439580806237607"
     data-ad-slot="1661698549"></ins></div>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2>Structure générale</h2>



<p>Chaque store a ses propres règles :</p>



<ul class="wp-block-list">
<li><strong>Play Store (Android)</strong> : captures d’écran classées par <strong>type d’appareil</strong>, avec des <strong>tailles et densités précises</strong>.</li>



<li><strong>App Store (iOS)</strong> : captures classées par <strong>format d’écran Apple</strong>, générées via les <strong>simulateurs officiels Xcode</strong></li>



<li><strong>Multilingue</strong> → chaque langue possède son propre dossier (<code>fr-FR</code>, <code>en-US</code>, <code>es-ES</code>, etc.).</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2>Play Store (Android)</h2>



<p>Arborescence type</p>



<pre class="wp-block-code"><code>/android/
├── fr-FR/
│   └── images/
│       ├── FeatureGraphic.png
│       ├── phoneScreenshots/
│       │   ├── 01_home.png
│       │   ├── 02_features.png
│       │   └── ...
│       ├── sevenInchScreenshots/
│       │   ├── 01_home.png
│       │   └── ...
│       └── tenInchScreenshots/
│           ├── 01_home.png
│           └── ...
│
└── en-US/
    └── images/
        ├── FeatureGraphic.png
        ├── phoneScreenshots/
        ├── sevenInchScreenshots/
        └── tenInchScreenshots/
</code></pre>



<h3>Le Feature Graphic</h3>



<p>Le <code>FeatureGraphic.png</code> est <strong>le visuel principal du Play Store</strong>.<br>Il s’affiche en haut de la fiche produit et dans certaines zones promotionnelles du store.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Élement</strong></td><td><strong>Taille (px)</strong></td><td><strong>Densité (dpi)</strong></td></tr><tr><td>FeatureGraphic</td><td>1024×500</td><td>160</td></tr></tbody></table></figure>



<p>C’est souvent <strong>le premier visuel vu par l’utilisateur</strong> : soigne le design, évite les textes trop petits et garde une cohérence visuelle avec tes screenshots.</p>



<h3>Tailles et densités recommandées pour les screenshots Android</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Type d’appareil</strong></td><td><strong>Dossier</strong></td><td><strong>Taille (px)</strong></td><td><strong>Densité (dpi)</strong></td><td><strong>Max screenshots</strong></td></tr><tr><td>Téléphone</td><td>phoneScreenshots/</td><td>1080×1920</td><td>420</td><td>8</td></tr><tr><td>Tablette 7&Prime;</td><td>sevenInchScreenshots/</td><td>800×1280</td><td>213</td><td>8</td></tr><tr><td>Tablette 10&Prime;</td><td>tenInchScreenshots/</td><td>1600×2560</td><td>320</td><td>8</td></tr></tbody></table></figure>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Si tu dépasses 8 captures par dossier, <strong>Google Play bloquera le déploiement</strong></p>



<h3>Nommage des fichiers</h3>



<p>Le Play Store trie les fichiers <strong>par ordre alphabétique</strong>.<br>Pour contrôler l’ordre d’affichage, <strong>numérote systématiquement les fichiers</strong></p>



<pre class="wp-block-code"><code>01_home.png
02_features.png
03_profile.png
04_settings.png</code></pre>



<p>Les préfixes numériques (<code>01_</code>, <code>02_</code>, etc.) sont <strong>obligatoires</strong> pour garantir une séquence visuelle cohérente.</p>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1439580806237607" crossorigin="anonymous"></script>
<div class="adsense-wrapper">
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-1439580806237607"
     data-ad-slot="6970817239"></ins>
</div>
<script>
  (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2>App Store (iOS)</h2>



<h3>Arborescence type</h3>



<pre class="wp-block-code"><code>/ios/
├── fr-FR/
│   └── images/
│       ├── iPhone 6.7-inch_01.png
│       ├── iPhone 6.7-inch_02.png
│       ├── iPad Pro (12.9-inch) (3rd generation)_01.png
│       ├── iPad Pro (12.9-inch) (3rd generation)_02.png
│       └── ...
│
└── en-US/
    └── images/
        ├── iPhone 6.7-inch_01.png
        ├── iPad Pro (12.9-inch) (3rd generation)_01.png
        └── ...
</code></pre>



<h3>Limites et méthode de génération</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Type d’appareil</strong></td><td><strong>Méthode recommandée</strong></td><td><strong>Taille native</strong></td><td><strong>Max screenshots</strong></td></tr><tr><td>iPhone 6.7-inch</td><td>Simulateur Xcode officiel</td><td>générée automatiquement</td><td>10</td></tr><tr><td>iPad Pro (12.9-inch) (3rd generation)</td><td>Simulateur Xcode officiel</td><td>générée automatiquement</td><td>10</td></tr></tbody></table></figure>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> N’utilise <strong>jamais de captures redimensionnées manuellement</strong> : Apple exige des fichiers générés depuis les simulateurs correspondant à la taille d’écran.</p>



<h3>Astuce</h3>



<p>Les formats <code>iPhone 6.7-inch</code> et <code>iPad Pro (12.9-inch)</code> couvrent <strong>presque tous les appareils iOS modernes</strong>.</p>



<h3>Nommage des fichiers</h3>



<pre class="wp-block-code"><code>iPhone 6.7-inch_01.png
iPad Pro (12.9-inch) (3rd generation)_01.png</code></pre>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2757.png" alt="❗" class="wp-smiley" style="height: 1em; max-height: 1em;" />Respecte scrupuleusement la casse, les espaces et les parenthèses.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2>Structure multilingue complète</h2>



<pre class="wp-block-code"><code>/screenshots/
├── android/
│   ├── fr-FR/
│   ├── en-US/
│   └── es-ES/
└── ios/
    ├── fr-FR/
    ├── en-US/
    └── es-ES/</code></pre>



<h3>Importance des screenshots localisés</h3>



<p>Les stores affichent automatiquement les images selon la <strong>langue de l’utilisateur</strong>.<br>Créer des captures <strong>localisées et traduites</strong> améliore la compréhension et la conversion.</p>



<div class="adsense-wrapper">
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-1439580806237607"
     data-ad-slot="9812796514"></ins></div>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h3>Mappage des locales (langues et dossiers)</h3>



<p>Le <strong>mappage des locales</strong> est la brique clé qui garantit que les <strong>screenshots générés automatiquement</strong> correspondent aux <strong>formats de langues réellement supportés</strong> par le store sur lequel tu publie</p>



<p><strong>Pourquoi ce mappage est essentiel</strong></p>



<ul class="wp-block-list">
<li>Il permet de <strong>convertir les locales du projet (.arb)</strong> vers les <strong>formats de locales officiels</strong> utilisés par chaque store (ex. <code>fr</code> → <code>fr-FR</code>).</li>



<li>Il sert lors de la <strong>génération automatique des dossiers de screenshots localisés</strong> pour les outils comme <strong>Fastlane</strong>, <strong>CI/CD</strong>, ou les scripts internes.</li>



<li>Il évite les erreurs de build et de déploiement dues à une langue non supportée sur la plateforme cible.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Les listes de langues supportées <strong>diffèrent entre le Play Store et l’App Store</strong>.
<ul class="wp-block-list">
<li>Par exemple :
<ul class="wp-block-list">
<li>Google Play accepte <code>es-419</code> (Espagnol Amérique latine), <strong>non supporté par Apple</strong>.</li>



<li>L’App Store supporte <code>fr-CA</code> (Français Canada), <strong>non reconnu directement par Google Play</strong>.</li>
</ul>
</li>
</ul>
</li>
</ul>



<p>Ce mappage garantit que tu génères uniquement des dossiers de langues compatibles avec <strong>le store cible</strong>.</p>



<h3>Code source complet du mappage des locales</h3>



<pre class="wp-block-code"><code>/// Bibliothèque partagée pour mapper les locales du projet aux formats
/// attendus par le Google Play Store et l'App Store Connect.
/// C'est la source de vérité unique pour la logique de mappage.

// ===========================================================================
// LOGIQUE POUR APP STORE CONNECT (IOS)
// ===========================================================================

const Map&lt;String, String&gt; _appleLocaleMapping = {
  'en': 'en-US', 'en-GB': 'en-GB', 'en-CA': 'en-CA', 'fr': 'fr-FR', 'fr-CA': 'fr-CA',
  'es': 'es-ES', 'es-MX': 'es-MX', 'de': 'de-DE', 'it': 'it',
  'pt': 'pt-PT', 'pt-BR': 'pt-BR', 'zh': 'zh-Hans', 'zh-CN': 'zh-Hans', 'zh-HK': 'zh-Hant',
  'zh-TW': 'zh-Hant', 'ja': 'ja', 'ko': 'ko', 'ru': 'ru', 'ar': 'ar-SA',
  'nl': 'nl-NL', 'sv': 'sv', 'fi': 'fi', 'da': 'da', 'no': 'no', 'tr': 'tr',
  'pl': 'pl', 'id': 'id', 'th': 'th', 'vi': 'vi', 'he': 'he', 'ms': 'ms',
  'ro': 'ro', 'cs': 'cs', 'sk': 'sk', 'hr': 'hr', 'uk': 'uk', 'hi': 'hi',
  'el': 'el', 'ca': 'ca', 'et-EE': 'et', 'uk-UA': 'uk',
};

const Set&lt;String&gt; _appStoreSupportedLocales = {
  'ar-SA', 'ca', 'cs', 'da', 'de-DE', 'el', 'en-AU', 'en-CA', 'en-GB', 'en-US',
  'es-ES', 'es-MX', 'fi', 'fr-CA', 'fr-FR', 'he', 'hi', 'hr', 'hu', 'id', 'it',
  'ja', 'ko', 'ms', 'nl-NL', 'no', 'pl', 'pt-BR', 'pt-PT', 'ro', 'ru', 'sk',
  'sv', 'th', 'tr', 'uk', 'vi', 'zh-Hans', 'zh-Hant', 'et'
};

String? toAppleLocale(String locale) {
  if (_appleLocaleMapping.containsKey(locale)) {
    final appleLocale = _appleLocaleMapping&#91;locale]!;
    return _appStoreSupportedLocales.contains(appleLocale) ? appleLocale : null;
  }
  if (_appStoreSupportedLocales.contains(locale)) return locale;
  return null;
}

// ===========================================================================
// LOGIQUE POUR GOOGLE PLAY (ANDROID)
// ===========================================================================

const Map&lt;String, String&gt; _playLocaleMapping = {
  'af': 'af', 'am': 'am', 'bg': 'bg', 'ca': 'ca','lv': 'lv',
  'hr': 'hr', 'et': 'et', 'el': 'el-GR', 'lt': 'lt', 'ms': 'ms', 'ro': 'ro',
  'sr': 'sr', 'sk': 'sk', 'sl': 'sl', 'sw': 'sw', 'fil': 'fil', 'cs': 'cs-CZ',
  'th': 'th', 'uk': 'uk', 'vi': 'vi', 'zu': 'zu', 'gu': 'gu', 'kk': 'kk', 'pa': 'pa',
  'sq': 'sq', 'ur': 'ur', 'ar': 'ar', 'id': 'id', 'in': 'id',
  'fr': 'fr-FR', 'en': 'en-US', 'es': 'es-ES', 'pt': 'pt-BR', 'zh': 'zh-CN',
  'sv': 'sv-SE', 'ta': 'ta-IN', 'te': 'te-IN', 'tr': 'tr-TR', 'de': 'de-DE',
  'fi': 'fi-FI', 'hi': 'hi-IN', 'hu': 'hu-HU', 'is': 'is-IS', 'it': 'it-IT',
  'ja': 'ja-JP', 'ko': 'ko-KR', 'nl': 'nl-NL', 'no': 'no-NO', 'pl': 'pl-PL',
  'ru': 'ru-RU', 'da': 'da-DK', 'az': 'az-AZ', 'be': 'be', 'bn': 'bn-BD',
  'eu': 'eu-ES', 'fa': 'fa-IR', 'gl': 'gl-ES', 'he': 'iw-IL', 'hy': 'hy-AM',
  'ka': 'ka-GE', 'km': 'km-KH', 'kn': 'kn-IN', 'ky': 'ky-KG', 'lo': 'lo-LA',
  'mk': 'mk-MK', 'ml': 'ml-in', 'mn': 'mn-MN', 'mr': 'mr-in', 'my': 'my-MM',
  'ne': 'ne-NP', 'si': 'si-LK', 'en-US': 'en-US', 'en-GB': 'en-GB', 'zh-HK': 'zh-HK',
  'zh-CN': 'zh-CN', 'zh-TW': 'zh-TW', 'es-419': 'es-419', 'es-ES': 'es-ES',
  'fr-CA': 'fr-CA', 'fr-FR': 'fr-FR', 'pt-BR': 'pt-BR', 'pt-PT': 'pt-PT',
};

const Set&lt;String&gt; _playSupportedLocales = {
  'be','ar','af','az','de','am','en-US','en-GB','bg','ca','zh-HK','zh-CN','zh-TW',
  'ko','hr','da','es-419','es-ES','et','fi','fr-CA','fr-FR','el','si','hi','hu','id','in',
  'is','it','ja','lv','lt','ms','nl','mk','my','ne','no','pl','pt-BR','pt-PT','ro','ru',
  'sr','sk','sl','sv','sw','ka','km','kn','ky','lo','mn','mr','fil','cs','th','tr','uk',
  'vi','zu','gu','kk','pa','sq','ta','te','ur','bn','eu','fa','gl','he','hy','ml'
};

String? toPlayLocale(String locale) {
  final normalizedLocale = locale.replaceAll('_', '-');
  if (_playLocaleMapping.containsKey(normalizedLocale)) {
    return _playLocaleMapping&#91;normalizedLocale];
  }
  if (_playSupportedLocales.contains(normalizedLocale)) {
    return normalizedLocale;
  }
  return null;
}</code></pre>



<h3>Bonnes pratiques</h3>



<ul class="wp-block-list">
<li><strong>Maintiens ton mappage des locales à jour</strong> (<code>locale_mapping.dart</code>) pour générer des screenshots uniquement dans les langues réellement supportées par chaque store.</li>



<li><strong>Respecte le format des dossiers de langues</strong> (<code>fr-FR</code>, <code>en-US</code>, etc.).</li>



<li><strong>Numérote les fichiers Android</strong> (<code>01_</code>, <code>02_</code>, etc.).</li>



<li><strong>Utilise les simulateurs Xcode officiels</strong> pour iOS.</li>



<li>Sur iOS, <strong>limite-toi à <code>iPhone 6.7-inch</code> et <code>iPad Pro (12.9-inch)</code></strong> pour couvrir la majorité des cas.</li>



<li><strong>Soigne ton Feature Graphic</strong> : c’est souvent le premier visuel vu par l’utilisateur.</li>



<li><strong>Génère des captures localisées</strong> pour chaque langue supportée.</li>



<li><strong>Ne dépasse jamais les limites</strong> :
<ul class="wp-block-list">
<li>8 images max / dossier Android</li>



<li>10 images max / format iOS</li>
</ul>
</li>



<li><strong>Teste toujours tes visuels sur les devices correspondants</strong> avant déploiement.</li>
</ul>



<div class="adsense-wrapper"><ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-1439580806237607"
     data-ad-slot="3470362404"></ins></div>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
<p>The post <a href="https://flutter-now.com/android/arborescence-des-screenshots-multilingues-app-store-play-store/">Arborescence des screenshots multilingues – App Store &amp; Play Store</a> appeared first on <a href="https://flutter-now.com">FlutterNow</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://flutter-now.com/android/arborescence-des-screenshots-multilingues-app-store-play-store/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">265</post-id>	</item>
	</channel>
</rss>
