Files
vnidrop/apple/RELEASE-TESTFLIGHT.fr.md

7.4 KiB

Publier VniDrop sur TestFlight interne — guide complet

Ce guide décrit toutes les étapes pour compiler l'application et l'envoyer sur TestFlight interne (aucune revue Apple n'est nécessaire pour les testeurs internes).

  • Bundle ID : com.vnidrop.app
  • Team ID Apple : A8A4JSMV5D
  • Branche à utiliser : feat/release-test-flight

⚠️ Point crucial : il faut compiler avec un Xcode de version finale (release), par exemple Xcode 26pas une version bêta. Un envoi construit avec un Xcode bêta est refusé par App Store Connect (« Unsupported SDK or Xcode version »).


1. Prérequis

  • Un Mac sous macOS stable (pas une bêta) avec Xcode 26 installé.
  • Un identifiant Apple (gratuit) — aucun abonnement développeur payant n'est nécessaire de votre côté. Le propriétaire du compte vous invitera sur le sien.
  • Une connexion internet.

2. Obtenir l'accès au compte développeur

Le propriétaire du compte doit vous inviter (une seule fois) :

  1. Sur App Store ConnectUtilisateurs et accèsAjouter un utilisateur.
  2. Il saisit votre identifiant Apple et vous attribue le rôle Admin (nécessaire pour gérer la signature) ou au minimum App Manager.
  3. Vous recevez un e-mail d'invitation — acceptez-le.

Ensuite, dans Xcode → menu Xcode → Settings → Accounts+ → connectez-vous avec votre identifiant Apple. L'équipe VniDrop (A8A4JSMV5D) doit apparaître.


3. Installer les outils

Dans le Terminal :

# Homebrew (si absent) : voir https://brew.sh
# Outils de génération de projet et de qualité de code
brew install xcodegen swiftlint

# Rust (pour compiler le cœur natif)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Installez aussi les Command Line Tools de Xcode si demandé :

xcode-select --install

4. Récupérer le projet

git clone <URL_DU_DEPOT> vnidrop
cd vnidrop
git checkout feat/release-test-flight

Le fichier .xcodeproj, le Local.xcconfig et le framework compilé ne sont pas versionnés : ils seront (re)générés localement aux étapes suivantes.


5. Configurer la signature

Créez le fichier apple/Local.xcconfig (ignoré par git) avec ce contenu :

DEVELOPMENT_TEAM = A8A4JSMV5D
CODE_SIGN_STYLE = Automatic
CODE_SIGNING_ALLOWED = YES

Cela active la signature sur cette machine sans modifier la configuration partagée (qui reste non signée pour l'intégration continue).


6. Compiler le cœur Rust

Depuis la racine du dépôt :

apple/scripts/build-core.sh

Cela produit apple/VnidropCore/vnidrop.xcframework (avec la tranche arm64 device requise pour TestFlight) et les liaisons Swift.

  • La compilation debug (par défaut) convient parfaitement pour TestFlight.
  • Si vous voulez une compilation release : apple/scripts/build-core.sh release. Sur macOS stable, cela devrait fonctionner. En cas d'erreur can't find crate (dylibs de macros corrompus), nettoyez et repassez en debug :
    cargo clean
    apple/scripts/build-core.sh
    

7. Incrémenter le numéro de build

Chaque envoi doit avoir un numéro de build unique et supérieur au précédent. Dans apple/project.yml, cherchez CURRENT_PROJECT_VERSION et mettez 4 (les numéros 1 à 3 ont déjà été utilisés) :

CURRENT_PROJECT_VERSION: "4"

Pour tout envoi ultérieur, augmentez encore ce nombre (5, 6, …).


8. Générer le projet Xcode

cd apple
xcodegen generate

Cela crée apple/VniDrop.xcodeproj à partir de project.yml et du Local.xcconfig.


9. Archiver dans Xcode

  1. Ouvrez apple/VniDrop.xcodeproj dans Xcode 26.
  2. En haut, sélectionnez le schéma VniDrop et la destination Any iOS Device (arm64) (surtout pas un simulateur).
  3. Menu Product → Archive.
  4. À la fin, la fenêtre Organizer s'ouvre avec votre archive.

10. Envoyer sur App Store Connect

  1. Dans l'Organizer, sélectionnez l'archive → Distribute App.
  2. Choisissez App Store ConnectUpload.
  3. Laissez les options par défaut (signature automatique) → Upload.
  4. La question sur le chiffrement ne sera pas posée (déjà réglée dans l'Info.plist).

Patientez quelques minutes : le build apparaît ensuite dans App Store Connect avec le statut « En cours de traitement », puis devient disponible.


11. Publier sur TestFlight interne (sans revue)

  1. Sur App Store Connect → l'app VniDrop → onglet TestFlight.
  2. Attendez que le build passe de « En cours de traitement » à disponible.
  3. Section Tests internes → créez un groupe (ou utilisez celui par défaut) → ajoutez les testeurs internes (ce sont des utilisateurs de l'équipe App Store Connect ; le propriétaire les ajoute via Utilisateurs et accès si besoin).
  4. Activez le build pour le groupe.
  5. Les testeurs reçoivent un e-mail, installent l'app TestFlight, acceptent, puis installent VniDrop. Aucune revue Apple n'est requise pour les tests internes.

12. Solution de repli pour la signature

Si, à l'étape 9/10, Xcode refuse de créer un certificat de distribution automatiquement (limitation possible des comptes individuels), le propriétaire du compte doit fournir les éléments de signature :

  1. Portail développeur → Certificates → créer un certificat Apple Distribution, puis l'exporter en .p12 (avec la clé privée) depuis le Trousseau (Keychain).
  2. Profiles → créer un profil de provisioning App Store pour com.vnidrop.app.
  3. Vous transmet le .p12 (+ son mot de passe) et le profil.

De votre côté :

  • Importez le .p12 dans le Trousseau (double-clic).
  • Dans Xcode, désactivez la signature automatique et sélectionnez la signature manuelle avec ce profil, puis reprenez l'archivage (étape 9).

🔒 Un .p12 de distribution permet de signer des apps au nom du propriétaire : à n'utiliser qu'entre personnes de confiance. Le certificat peut être révoqué ensuite.


13. Dépannage

  • « Unsupported SDK or Xcode version » → vous compilez avec un Xcode bêta. Utilisez Xcode 26 (release).
  • Échec de la phase SwiftLintbrew install swiftlint (obligatoire, la build échoue sinon).
  • Numéro de build déjà utilisé → augmentez CURRENT_PROJECT_VERSION puis xcodegen generate à nouveau.
  • L'app n'apparaît pas dans TestFlight → attendez la fin du « traitement » ; la conformité export est déjà déclarée, aucune action supplémentaire.
  • Le même Xcode pour le cœur Rust et l'archivage n'est pas obligatoire (le cœur est du Rust), mais l'archivage doit impérativement se faire avec Xcode 26 release.

Récapitulatif express

# 1. Outils
brew install xcodegen swiftlint

# 2. Projet
git checkout feat/release-test-flight

# 3. Signature : créer apple/Local.xcconfig (voir §5)

# 4. Cœur natif
apple/scripts/build-core.sh

# 5. Numéro de build : CURRENT_PROJECT_VERSION -> 4 dans apple/project.yml

# 6. Projet Xcode
cd apple && xcodegen generate

# 7. Xcode 26 : schéma VniDrop, destination « Any iOS Device (arm64) »,
#    Product → Archive → Distribute App → App Store Connect → Upload

# 8. App Store Connect → TestFlight → Tests internes → ajouter les testeurs