Skip to main content
Devin peut archiver une application iOS, la signer, la téléverser vers TestFlight et ajouter le build à un beta group. Il exécute xcodebuild sur une VM macOS et s’authentifie à l’aide d’une API key App Store Connect que vous stockez sous forme de secrets Devin. Avant que Devin puisse téléverser un build, vous devez :
  1. Configurer votre application dans App Store Connect.
  2. Créer une API key App Store Connect.
  3. Ajouter la clé et votre Team ID à Devin sous forme de secrets.
  4. Vérifier que Devin peut joindre les serveurs d’Apple.
Le téléversement vers TestFlight nécessite des sessions macOS. Si vous utilisez un déploiement Dedicated SaaS, contactez votre account team pour activer les VM macOS.

Prérequis

Configurer App Store Connect

Effectuez ces étapes dans le portail Apple Developer et dans App Store Connect. Devin ne peut pas les réaliser à votre place : la plupart nécessitent un Account Holder ou un Admin, et certaines requièrent l’authentification à deux facteurs sur l’Apple Account d’une personne.
1

Accepter les derniers contrats

L’Account Holder se connecte à App Store Connect et accepte les contrats en attente dans Business. Les téléversements échouent tant qu’un contrat requis reste en attente.
2

Enregistrer le bundle ID

Dans le portail Apple Developer, allez dans Certificates, Identifiers & Profiles → Identifiers et enregistrez un App ID correspondant au bundle ID de la cible de votre application. Ignorez cette étape si l’identifiant existe déjà.
3

Créer la fiche de l'application

Dans App Store Connect, allez dans Apps, cliquez sur +, puis sélectionnez New App. Choisissez la plateforme, le nom, la langue principale, le bundle ID de l’étape précédente et un SKU. Les téléversements TestFlight échouent si aucune fiche d’application n’existe pour ce bundle ID.
4

Créer un beta group

Ouvrez l’application, allez dans TestFlight et créez un groupe :
  • Internal testing : les testeurs doivent être des utilisateurs de votre équipe App Store Connect. Les builds sont disponibles dès la fin du traitement.
  • External testing : les testeurs peuvent être n’importe quelle personne disposant d’une adresse e-mail ou d’un lien public. Renseignez d’abord les Test Information (description de l’application bêta, e-mail de retour et coordonnées du contact de review). Le premier build de chaque version passe par la Beta App Review.
5

Répondre à la conformité à l'exportation

Chaque build doit répondre à la question de conformité à l’exportation avant que les testeurs puissent l’installer. Pour éviter cette question à chaque build, définissez ITSAppUsesNonExemptEncryption dans le fichier Info.plist de votre application. Réglez-le sur NO si l’application n’utilise que du chiffrement exempté, comme HTTPS.

Créer une API key App Store Connect

Devin s’authentifie avec une API key App Store Connect, et non avec un Apple Account. Cette clé ne nécessite pas d’authentification à deux facteurs.
1

Activer l'accès à l'API

Dans App Store Connect, rendez-vous dans Users and Access → Integrations → App Store Connect API. Si l’accès à l’API n’est pas encore activé, l’Account Holder doit cliquer sur Request Access et accepter les conditions.
2

Générer une clé d'équipe

Sous Team Keys, cliquez sur +. Saisissez un nom, par exemple Devin TestFlight, puis sélectionnez le rôle App Manager. Le rôle Admin est requis pour générer une clé. Si Xcode ne parvient pas à créer un certificat de distribution avec une clé App Manager, générez plutôt une clé avec le rôle Admin.
3

Télécharger la clé privée

Cliquez sur Download à côté de la nouvelle clé pour enregistrer AuthKey_<KEY_ID>.p8. Apple n’autorise qu’un seul téléchargement de ce fichier. Si vous le perdez, révoquez la clé et générez-en une nouvelle.
4

Copier l'Issuer ID et le Key ID

L’Issuer ID s’affiche au-dessus du tableau des clés. Le Key ID figure sur la ligne de la clé.
5

Trouver votre Team ID

Dans le portail Apple Developer, ouvrez Membership details et copiez le Team ID. Il s’agit d’une chaîne de 10 caractères, par exemple A1B2C3D4E5.
Toute personne disposant du fichier .p8 peut téléverser des builds et gérer TestFlight pour l’ensemble des applications de votre team. Stockez-le uniquement dans les secrets Devin et ne le committez jamais dans un repository.

Ajouter des secrets à Devin

Ajoutez les valeurs suivantes en tant que secrets bruts sur la page Secrets : Pour copier la clé privée sur un Mac, exécutez :
Choisissez un périmètre pour les secrets :
  • Organization : toutes les sessions de votre organisation peuvent utiliser la clé. Utilisez ce périmètre lorsque la Team livre des builds avec Devin.
  • Personal : seules les sessions que vous lancez peuvent utiliser la clé.
Les secrets ne sont disponibles que dans les sessions lancées après leur ajout. Pour en savoir plus sur les périmètres, consultez Secrets.

Autoriser l’accès réseau

La VM macOS de Devin doit pouvoir joindre les serveurs d’Apple pour signer et téléverser les builds. Si votre organisation applique une politique réseau restrictive, ajoutez api.appstoreconnect.apple.com ainsi que les autres hôtes Apple utilisés par xcodebuild pour la signature et les téléversements. Autoriser *.apple.com suffit à tous les couvrir. Un hôte bloqué se manifeste généralement par une erreur d’authentification, et non par une erreur réseau. Consultez la section Dépannage.

Téléverser un build

Démarrez une session macOS et demandez à Devin de téléverser un build :
Devin utilise les secrets pour effectuer les opérations suivantes :
  1. Écrire ASC_PRIVATE_KEY dans ~/.appstoreconnect/private_keys/AuthKey_$ASC_KEY_ID.p8 avec les autorisations 0600.
  2. Vérifier le dernier numéro de build via l’API App Store Connect et en choisir un plus élevé.
  3. Archiver l’application avec xcodebuild archive.
  4. Signer et téléverser le build avec xcodebuild -exportArchive.
  5. Attendre la fin du traitement, puis ajouter le build au beta group via l’API App Store Connect.
L’étape d’export utilise un fichier plist d’options d’export dont le paramètre destination est défini sur upload :
Ainsi que ces commandes :
-allowProvisioningUpdates permet à Xcode de créer le certificat de distribution et le profil de provisioning à l’aide de l’API key : la VM n’a donc pas besoin que les ressources de signature y soient installées. Si votre repository dispose déjà d’un script de release, comme une lane fastlane ou une cible make, demandez à Devin de l’utiliser. fastlane accepte la même clé via app_store_connect_api_key.

Enregistrer les étapes dans votre blueprint

Pour éviter de répéter les instructions dans chaque prompt, ajoutez-les à la section knowledge du blueprint de votre repository :

Troubleshooting

No Accounts with App Store Connect Access ou Failed to Use Accounts lors de l’export. Vérifiez d’abord l’accès réseau. Si la VM ne parvient pas à joindre les serveurs d’Apple, xcodebuild signale cette erreur même lorsque la clé est valide. Recherchez ITunesConnectFoundationErrorDomain Code=-1003 dans les lignes qui précèdent. Si le réseau fonctionne, vérifiez que la clé dispose du rôle App Manager. No profiles for '<bundle ID>' were found. Le bundle ID n’est pas enregistré pour la team indiquée dans APPLE_TEAM_ID, ou aucune fiche d’application ne lui correspond dans App Store Connect. The provided entity includes an attribute with a value that has already been used. Le numéro de build a déjà été utilisé pour cette version. Téléversez à nouveau avec un numéro de build supérieur. Le build est téléversé, mais les testeurs ne peuvent pas l’installer. Vérifiez le build dans App Store Connect → TestFlight. Il est peut-être encore en cours de traitement, les informations de conformité à l’exportation manquent peut-être, ou il est en attente de Beta App Review. Xcode ne parvient pas à créer un certificat de distribution. Le rôle de la clé ne permet pas de gérer les certificats. Générez une clé avec le rôle Admin, ou demandez à un Admin de créer le certificat de distribution dans le portail Apple Developer. Les variables d’environnement sont vides dans la session. Les secrets ne sont disponibles que dans les sessions démarrées après leur ajout. Démarrez une nouvelle session.