checkApp

L'App Store ou Google Play a refusé votre build ?

Déposez le .ipa, .apk ou .aab dans la vérification gratuite et voyez, dans votre navigateur, ce que les stores refuseraient. Si vous préférez nous le confier, l'audit de conformité aux stores confronte aussi les formulaires de votre fiche au build.

190 € · 2 jours ouvrés si vous préférez nous le confier

Codes de rejet

CodeSignification
ITMS-91053API à justification obligatoire utilisée sans raison déclarée
ITMS-90683Ressource protégée sans texte d'usage dans Info.plist
90068iOS minimum inférieur à 15 : avertissement aujourd'hui, refus à partir du printemps 2027
ITMS-90208Un framework déclare un iOS minimum plus ancien que son binaire
ITMS-90809Une référence à UIWebView, désormais obsolète
ITMS-90685Deux bundles de l'app partagent le même identifiant
Que signifie le rejet ITMS-91053 ?
C'est le rejet d'Apple pour l'appel d'une API à justification obligatoire sans raison déclarée dans un privacy manifest. Il tombe à l'envoi, nomme les API trouvées, et aucun build ne reçoit d'avertissement avant. L'audit de conformité aux stores porte essentiellement sur ce type de problème. Comment corriger
Que signifie le rejet ITMS-90683 ?
C'est le refus d'Apple pour un build qui peut accéder à la caméra, à la localisation, aux contacts ou à une autre ressource protégée sans qu'une phrase dans Info.plist explique pourquoi. Il découle du binaire, pas de ce que fait l'app : un plugin qui lie la caméra impose l'exigence même si rien ne l'ouvre jamais, si bien qu'un build qui tourne parfaitement sur un téléphone n'atteint jamais TestFlight. Nous nommons la clé et le plugin qui l'a introduite. Comment corriger
Que signifie l'avertissement 90068 ?
App Store Connect l'envoie quand la MinimumOSVersion d'une app est inférieure à iOS 15. Aujourd'hui, le build est tout de même livré et l'avertissement arrive ensuite par e-mail ; à partir du printemps 2027, l'envoi sera refusé. Un projet Flutter reste à 13.0 tant que personne ne l'a modifié, si bien que la plupart des équipes le rencontrent sans avoir rien fait de travers. Comment corriger
Que signifie le rejet ITMS-90208 ?
C'est le refus d'Apple quand un framework de l'app déclare, dans son propre Info.plist, un iOS minimum plus ancien que celui pour lequel son binaire a été compilé. Avant Flutter 3.41, le coupable habituel était App.framework, dont l'Info.plist était copié depuis ios/Flutter/AppFrameworkInfo.plist et gardait une ancienne MinimumOSVersion. Depuis la 3.41, le build écrit lui-même cette clé, et mettre Flutter à jour règle le problème ; sur une version plus ancienne, renseignez-y la version pour laquelle le binaire a été compilé. Comment corriger
Que signifie le rejet ITMS-90809 ?
C'est le refus d'Apple pour toute référence à UIWebView. Les nouvelles apps sont refusées depuis avril 2020, les mises à jour depuis décembre 2020. Une référence suffit, même si aucune web view n'est jamais affichée ; elle vient presque toujours d'un ancien SDK, et la solution consiste à mettre à jour ou à retirer ce SDK. Comment corriger
Que signifie le rejet ITMS-90685 ?
C'est le refus d'Apple quand deux bundles de l'app partagent le même CFBundleIdentifier : en général une extension qui a reçu l'identifiant de l'app elle-même, ou un framework intégré dans l'app puis à nouveau dans une extension. Donnez à chaque extension son propre identifiant, placé sous celui de l'app, et n'intégrez chaque framework qu'une seule fois. Comment corriger

Tenu à jour

Échéances App Store et Google Play, 2026–2027

Les deux stores font évoluer leurs exigences chaque année, et une checklist écrite l'an dernier cesse discrètement d'en être une. Voici ce qui s'applique aujourd'hui. La date ci-dessous indique quand ce tableau a été confronté pour la dernière fois à ce qu'Apple et Google publient réellement.

ExigenceCe qui se passeDepuis / à partir de
Privacy manifest, API à justification obligatoireEnvoi refuséEn vigueur
Textes d'usage pour la caméra, la localisation, les contactsEnvoi refuséEn vigueur
Suppression de compte dans l'appRejet à la reviewEn vigueur
« Se connecter avec Apple » à côté d'une connexion tierceRejet à la reviewEn vigueur
Google Play : API 36 pour les mises à jour, 35 pour rester visibleMise à jour refusée, app masquée31 août 2026
Play Billing Library 8Nouvelles apps et mises à jour refusées31 août 2026
Google Play : déclaration pour la localisation préciseDéclaration obligatoire27 janvier 2027
Bibliothèques natives sur des pages mémoire de 16 KoMise à jour refusée1er février 2027
MinimumOSVersion 15.0Avertissement 90068 aujourd'hui, refus plus tardPrintemps 2027
SDK iOS 27 pour les envoisEnvoi refuséAvril 2027

Dernière confrontation aux exigences publiées par Apple et Google le 16 septembre 2026. Quand un niveau change, les vérifications suivent, et chaque rapport indique quelles vérifications ont été exécutées et lesquelles ne l'ont pas été.

Ce que vérifie l'audit de conformité aux stores

  • Un privacy manifest absent, ou un SDK livré sans le sien
  • Des API à justification obligatoire appelées sans raison déclarée — le rejet ITMS-91053, qui tombe sans avertissement
  • Un plugin qui accède à la caméra, à la localisation ou aux contacts sans …UsageDescription dans Info.plist — ITMS-90683, qui bloque l'envoi avant TestFlight, souvent pour une fonction que l'app n'utilise jamais
  • Une icône App Store avec de la transparence, un framework qui déclare le mauvais iOS minimum (ITMS-90208), ou aucune réponse sur le chiffrement, ce qui laisse chaque build en attente avec le statut « Missing Compliance »
  • Un plugin qui s'inscrit aux notifications push sans l'entitlement, si bien que les notifications n'arrivent jamais, une référence à UIWebView (ITMS-90809), ou deux bundles qui partagent le même identifiant (ITMS-90685)
  • Une connexion tierce sans option équivalente à côté (règle 4.8)
  • Aucun moyen de supprimer son compte depuis l'app (règle 5.1.1(v), et la politique de suppression des données de Google, qui exige en plus un accès hors de l'app)
  • Un niveau d'API cible que Google Play n'accepte plus
  • Des bibliothèques natives qui ne se chargent pas sur des pages mémoire de 16 Ko — Google Play cesse de publier ces mises à jour le 1er février 2027, et les plugins qui contiennent du code précompilé en sont la cause habituelle
  • Une release signée avec la clé de debug, un build débogable, ou une Play Billing Library antérieure à la version 8
  • Les autorisations que Google Play réserve à certaines catégories d'apps — localisation en arrière-plan, photos et vidéos, toutes les apps installées, tous les fichiers — et celles qu'il faut déclarer, dont la localisation précise à partir du 27 janvier 2027
  • Une étiquette de confidentialité ou un formulaire Data safety qui en dit moins que le build
  • Une URL d'assistance ou de confidentialité dans la fiche qui ne répond plus

Les normes et les règles des stores qui servent de référence à nos audits

App Store Review Guidelines
4.8 · 5.1.1(v) · 1.5, et les motifs de rejet à la review
PrivacyInfo.xcprivacy
obligatoire depuis le 1er mai 2024 — le fichier derrière ITMS-91053
MinimumOSVersion
avertissement 90068 aujourd'hui, refus à partir du printemps 2027
SDK iOS 27
obligatoire pour les envois à partir d'avril 2027
Niveau d'API cible Play
36 depuis le 31 août 2026 · 35 pour rester visible
Play Data safety
et suppression de compte dans l'app

Envoyez un build. Recevez un rapport par e-mail.

Ce que chaque format permet de vérifier
Ce que vous envoyezVérifications storesAccessibilité
.apk — AndroidComplètesComplète
.app — build simulateur iOSComplètesComplète
.ipa — build appareil iOSComplètesImpossible
Invitation TestFlightComplètesÀ la main, +60 %

Prix

L'audit de conformité aux stores coûte 190 €, en 2 jours ouvrés. Pour un rejet précis, ou une question avant de développer, une consultation coûte 90 €/heure.

Demander un audit

Envoyez un build par e-mail. Recevez un prix fixe et une date.

Écrivez à hello@checkapp.dev avec le build, ou un lien vers celui-ci, et une ligne sur votre besoin : un audit d'accessibilité, une vérification stores, ou les deux. Vous recevez un prix fixe et une date dans la même journée ouvrée.