Le code semble accepté, mais l’application n’ouvre pas les fonctions réservées aux abonnés.

La méthode la plus sûre consiste à tester d’abord la logique d’achat avec StoreKit Testing dans Xcode, puis à valider l’échange réel avec un code Sandbox créé dans App Store Connect. Un achat local réussi ne prouve pas qu’un code d’offre a été correctement échangé.

Cet article s’adresse aux développeurs indépendants qui ajoutent un parcours de code d’offre à un abonnement et doivent séparer simulation locale et validation Sandbox.

Il convient aussi aux équipes qui configurent leurs offres dans App Store Connect ou qui contrôlent le traitement des transactions et l’ouverture des droits.

Choisir le bon test pour le bon responsable

Un parcours de code d’offre mobilise plusieurs parties du produit. La personne qui travaille sur l’interface d’achat n’a pas nécessairement accès à la configuration de l’offre ou au traitement serveur ; il faut donc savoir précisément ce que chaque environnement permet de conclure.

StoreKit Testing sert à éprouver la logique de l’application dans Xcode à l’aide d’une configuration StoreKit. Le Sandbox sert à vérifier un parcours de test lié aux achats App Store, avec une offre et un compte de test préparés à cet effet. Apple décrit ces frontières dans sa documentation de configuration StoreKit Testing dans Xcode et dans son guide des achats intégrés avec Sandbox.

Responsabilité du projet Vérification adaptée Ce que le résultat ne démontre pas
Logique d’achat et interface Configuration locale StoreKit dans Xcode, achats simulés et réaction de l’app Qu’un code Sandbox a été accepté par le système
Configuration d’offre Abonnement, offre et code de test préparés dans App Store Connect Que l’app ouvre les droits après la transaction
Échange sur appareil Parcours Sandbox correspondant à l’entrée système ou à l’entrée intégrée Que la réception serveur et l’état du compte sont corrects
Droits et services Traitement de la transaction et cohérence entre app et serveur Que chaque autre parcours de code ou état d’abonnement fonctionne

Cette séparation évite trois erreurs coûteuses : déclarer une fonctionnalité terminée après une simulation locale, confondre l’acceptation d’un code et l’activation des droits, ou mélanger les données Sandbox avec les achats de production. Elle aide aussi à assigner chaque anomalie au bon propriétaire : interface, configuration App Store Connect, traitement StoreKit ou service d’abonnement.

Valider la logique d’achat sans prétendre tester l’échange

Pour la personne qui implémente l’achat

Dans Xcode, associez au projet une configuration StoreKit adaptée au produit et aux scénarios que l’application doit gérer. Apple indique que StoreKit Testing permet de simuler les achats à partir d’une configuration locale ou synchronisée ; la procédure et les réglages se consultent dans la documentation officielle de configuration.

L’intérêt est de vérifier tôt le comportement applicatif sans dépendre d’un code distribué ni d’une configuration Sandbox prête. La personne chargée du parcours peut observer si l’écran présente l’état attendu, si le code métier réagit à une transaction simulée et si les fonctions réservées apparaissent ou disparaissent selon l’état d’abonnement mis à disposition par le test.

Il faut toutefois maintenir une frontière nette dans les comptes rendus. Un scénario local peut prouver qu’une logique applicative traite un état d’achat simulé ; il ne prouve ni la création d’un code dans App Store Connect, ni l’échange par un compte Sandbox, ni le comportement du système d’achat sur l’appareil ciblé.

Évitez également de laisser entendre qu’un test local reproduit toutes les conditions d’un appareil relié au Sandbox. Les environnements ont des rôles différents : le premier sert au développement et à la vérification de la logique, le second à l’essai d’achats App Store dans un contexte de test.

Liste de contrôle pour le test local

  • [ ] La configuration StoreKit est associée au bon projet et aux produits concernés.
  • [ ] Le scénario déclenché correspond bien à l’état d’abonnement que le code doit traiter.
  • [ ] L’application réagit au résultat de l’achat sans dépendre d’une simple animation ou d’un message d’interface.
  • [ ] L’état des fonctions réservées est vérifié séparément de l’affichage de l’écran d’achat.
  • [ ] Le résultat est consigné comme un test local, et non comme une validation d’échange Sandbox.
  • [ ] Les personnes qui réalisent la recette savent quel scénario local a été exécuté et quelle preuve il apporte.

Préparer une offre et des codes de test distincts

Pour la personne qui gère App Store Connect

Avant de lancer le test, vérifiez que l’abonnement visé existe et que l’offre correspond au parcours à vérifier. Les codes d’offre sont configurés dans App Store Connect ; Apple détaille les étapes et les conditions dans son guide de configuration des codes d’offre d’abonnement.

Ne confondez pas un code préparé pour un essai Sandbox avec un code destiné à être communiqué aux clients. Conservez un repère interne explicite pour les éléments de test, limitez leur diffusion à l’équipe chargée de la recette et évitez de les inclure dans une campagne commerciale, une documentation publique ou des captures réutilisées en production.

Pour le compte, suivez le processus Apple de création d’un compte Apple Sandbox. Utilisez un compte réservé aux essais, puis vérifiez que la session et l’appareil correspondent au parcours voulu. Un compte ordinaire utilisé pour les achats réels ne doit pas servir de raccourci pour conclure qu’un essai Sandbox est représentatif.

Élément à préparer Contrôle avant essai Risque en cas d’oubli
Abonnement et offre Confirmer dans App Store Connect que l’offre et le produit correspondent au scénario ciblé Tester un produit ou un avantage différent de celui attendu
Code d’essai Identifier clairement les codes destinés au Sandbox et les garder hors des supports clients Diffuser accidentellement un code de test comme une promotion réelle
Compte de test Suivre les consignes Apple pour créer et employer un compte Sandbox Attribuer à tort un résultat à la configuration de l’offre
Appareil et app Vérifier la version installée et le parcours d’échange à tester Confondre une limitation d’interface avec un problème de code
Trace de recette Noter l’offre, le compte de test utilisé et le résultat observable sans exposer d’identifiants Ne pas pouvoir reproduire ni attribuer l’échec

Le tableau sert à répartir le travail, pas à transformer la recette en validation automatique. La configuration correcte rend le scénario testable ; elle ne signifie pas que l’app a reçu la transaction ou que le compte a obtenu les fonctions attendues.

Vérifier l’échange système et l’entrée intégrée séparément

Pour la personne qui teste sur appareil

Commencez par le parcours que l’application est effectivement censée prendre en charge. Si la validation porte sur un échange depuis le système, utilisez le point d’entrée prévu par Apple dans l’environnement Sandbox et consignez ce que l’appareil affiche, ce que l’application reçoit ensuite et ce qui change dans le compte.

L’échange depuis l’application est un parcours distinct. Il ne faut pas déduire qu’il fonctionne parce que le code a été accepté dans une interface système. L’équipe doit avoir implémenté la prise en charge StoreKit correspondante ; Apple explique les prérequis et le comportement dans sa documentation sur la prise en charge des codes d’offre dans une app.

Pour un test attribuable, conservez une trace du contexte : parcours utilisé, offre concernée, résultat présenté par le système, puis résultat visible dans l’application. N’incluez pas le code complet ni les données d’accès au compte dans un rapport partagé sans contrôle. Si le code est refusé, notez l’état observé et vérifiez d’abord la configuration et le contexte du test avant de conclure à un défaut du code métier.

Une distinction est particulièrement utile lors du diagnostic : « code soumis » ne signifie pas « transaction traitée », et « transaction traitée » ne signifie pas automatiquement « droits affichés correctement ». Chaque étape doit avoir sa propre preuve. Pour l’achat externe à l’application, consultez également les indications Apple sur les achats réalisés hors de l’app, sans assimiler ce parcours à l’entrée intégrée.

Étapes de recette sur l’appareil

  • [ ] Confirmer que l’essai est mené dans le contexte Sandbox prévu et non avec un compte d’achat de production.
  • [ ] Choisir explicitement l’entrée système ou l’entrée intégrée à l’application ; ne pas les traiter comme un seul parcours.
  • [ ] Utiliser uniquement un code réservé au test correspondant à l’offre configurée.
  • [ ] Consigner le résultat affiché après la soumission, sans le prendre seul comme preuve d’activation.
  • [ ] Revenir dans l’app et contrôler l’état d’abonnement et l’accès aux fonctions protégées.
  • [ ] Si l’app gère une entrée de code intégrée, refaire la vérification sur ce parcours précis.
  • [ ] En cas d’écart, isoler la configuration, l’interface, la transaction et les droits avant de recommencer.

Contrôler transaction, droits et notifications côté service

Pour la personne qui maintient l’abonnement

Après l’échange, contrôlez la transaction que l’app reçoit et la façon dont le projet l’interprète. Apple expose les informations de transaction dans la documentation StoreKit sur Transaction. Dans la recette, le point essentiel est de relier une preuve de transaction à l’état effectivement accordé au compte, plutôt que de considérer qu’un changement d’écran constitue une preuve suffisante.

Si le produit s’appuie sur un serveur, vérifiez que le traitement côté serveur aboutit au même état que celui présenté par l’app. Cela peut inclure le rapprochement entre l’identité de l’utilisateur de l’app, les données d’abonnement qu’il conserve et les informations de transaction qu’il traite. La vérification doit rester propre au projet : les règles d’accès peuvent différer selon la façon dont les droits sont modélisés.

Lorsque l’application reçoit les notifications App Store Server, séparez clairement les événements d’essai des enregistrements de production. Apple décrit l’activation et la configuration des notifications dans son guide App Store Server Notifications. Vérifiez la destination Sandbox retenue pour les essais et assurez-vous que les événements de test ne déclenchent pas des opérations commerciales réelles, telles qu’un courriel client ou une écriture non isolée dans les données de production.

La séparation n’est pas seulement une précaution de recette : elle réduit le risque de confondre un abonnement simulé ou Sandbox avec une souscription réelle, et facilite l’analyse lorsqu’une notification arrive après l’action visible sur l’appareil. Notez les traces utiles avec un identifiant de test, en masquant les informations qui ne doivent pas circuler dans les rapports.

Pour le responsable de la validation avant publication

La recette doit distinguer trois verdicts. Réussi signifie que le parcours réellement visé a été exécuté et que la preuve de transaction concorde avec les droits attendus. Échoué désigne un résultat reproductible où le code, la transaction ou les droits ne suivent pas le comportement attendu. À compléter signifie qu’un maillon reste non vérifié, par exemple l’échange intégré alors que seul l’échange système a été essayé.

Un seul achat local ne permet donc pas de déclarer l’ensemble de la fonctionnalité conforme. De même, un message positif après soumission du code ne valide ni le traitement serveur, ni l’accès accordé, ni l’isolation des événements Sandbox. Le rapport de recette doit nommer les parcours testés et ceux qui restent à couvrir.

FAQ sur StoreKit et les codes d’offre

Une configuration locale StoreKit permet-elle de tester un code d’offre ?

Elle permet de simuler des achats et de vérifier la réaction de l’application, mais ne remplace pas un échange de code dans Sandbox. Employez-la pour isoler la logique d’achat, puis préparez un code et un compte Sandbox afin d’évaluer le parcours App Store. Dans le rapport, indiquez séparément le résultat local et celui de l’échange réel en environnement de test.

Où créer et utiliser un code Sandbox ?

La préparation commence dans App Store Connect, sur l’abonnement et l’offre concernés, puis l’essai utilise un compte Sandbox selon les consignes Apple. La création du code et son échange sont deux opérations distinctes. Gardez les codes de test identifiables en interne et ne les insérez pas dans une campagne destinée aux clients ou dans des documents de lancement public.

Comment tester la saisie d’un code directement dans l’application ?

Commencez par confirmer que l’application a implémenté la prise en charge StoreKit du parcours intégré. Exécutez ensuite l’essai en Sandbox sur un appareil adapté, et enregistrez séparément l’écran de résultat, la transaction traitée et l’état d’accès obtenu. Un échange réussi dans une interface système ne valide pas automatiquement le champ ou le flux ajouté dans l’app.

Quelle preuve confirme l’ouverture des droits après échange ?

Il faut rapprocher le résultat de l’échange de la transaction traitée et de l’état d’abonnement utilisé par l’application. Si un service serveur gère les droits, vérifiez également la trace correspondante dans l’environnement de test. Un message de confirmation seul n’établit pas que les données ont été traitées ni que l’accès est disponible au bon compte.

Évaluer le rôle d’un Mac distant sans confondre les validations

Un Mac distant peut servir à ouvrir le projet Xcode, modifier la configuration StoreKit, compiler l’app et exécuter les essais qui relèvent de cet environnement. Il peut aider une équipe sans Mac local à partager un environnement macOS, mais le fait qu’une compilation aboutisse ne démontre pas qu’un code Sandbox a été échangé sur un appareil ni que le service a correctement activé les droits.

La recette Sandbox dépend toujours du compte, du parcours de test et des conditions de l’appareil. Il faut donc organiser ces éléments avec l’équipe, documenter qui réalise l’échange et récupérer des preuves qui distinguent bien les environnements. Le Mac distant facilite une partie du travail Xcode ; il ne remplace pas les vérifications spécifiques au Sandbox.

Pour décider si ce mode de travail correspond à votre projet, vous pouvez consulter la présentation de RUVCLOUD et comparer les modalités proposées sur la page des tarifs. Une location est surtout à considérer lorsqu’il faut disposer temporairement d’un environnement macOS pour compiler ou collaborer sans acheter de machine. Si le projet exige un appareil physique précis, des connexions matérielles particulières ou une charge continue et prévisible, un Mac dédié peut être plus adapté. À l’inverse, une configuration locale StoreKit qui répond déjà au besoin ne justifie pas forcément la location.

Avant de clore la recette, la personne responsable peut vérifier que le dossier contient :

  • [ ] le résultat du test local StoreKit, identifié comme tel ;
  • [ ] la configuration d’offre et le code Sandbox employés ;
  • [ ] la preuve du parcours d’échange réellement testé ;
  • [ ] la transaction observée et le compte auquel elle correspond ;
  • [ ] l’état des droits dans l’app et, le cas échéant, dans le service ;
  • [ ] la séparation des traces Sandbox et des données de production ;
  • [ ] une liste explicite des parcours encore à tester.

Le critère de clôture est simple : annoncer « validé » uniquement pour les parcours réellement exercés, avec une transaction et des droits cohérents. StoreKit Testing accélère la vérification de la logique ; l’échange Sandbox complète la recette du code d’offre. Si un Mac manque pour les tâches Xcode, RUVCLOUD peut fournir un environnement de travail distant, mais l’équipe doit conserver ses propres conditions de test Sandbox et appareil.