mirror of
https://github.com/sudosylabs/vnidrop.git
synced 2026-08-09 20:29:58 +02:00
230 lines
7.4 KiB
Markdown
230 lines
7.4 KiB
Markdown
# 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 26** — **pas** 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 Connect** → **Utilisateurs et accès** → **Ajouter 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 :
|
|
|
|
```bash
|
|
# 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é :
|
|
```bash
|
|
xcode-select --install
|
|
```
|
|
|
|
---
|
|
|
|
## 4. Récupérer le projet
|
|
|
|
```bash
|
|
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 :
|
|
|
|
```bash
|
|
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 :
|
|
```bash
|
|
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) :
|
|
|
|
```yaml
|
|
CURRENT_PROJECT_VERSION: "4"
|
|
```
|
|
|
|
> Pour tout envoi ultérieur, augmentez encore ce nombre (5, 6, …).
|
|
|
|
---
|
|
|
|
## 8. Générer le projet Xcode
|
|
|
|
```bash
|
|
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 Connect** → **Upload**.
|
|
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 SwiftLint** → `brew 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
|
|
|
|
```bash
|
|
# 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
|
|
```
|