Comment uploader un .ipa sur App Store Connect sans Xcode en 2026

Publié le : 11 juillet 2026

Read in English →

Vous avez buildé votre app sur un CI Linux. Vous êtes sur Windows. Ou vous n'avez juste pas envie d'ouvrir Xcode pour pousser un binaire. Les trois cas sont légitimes — Apple propose de vraies alternatives, utilisables en prod.

Si vous publiez aussi sur Android, la même question se pose côté Play Store : voir comment uploader un .aab sans Android Studio.


Ce qu'il faut avant toute méthode d'upload

Le .ipa doit être signé avec un certificat Distribution et un provisioning profile App Store. Le bundle ID doit correspondre à une fiche déjà créée dans App Store Connect. Le build number doit être supérieur à tout build déjà uploadé pour cette version. Le Bitcode n'est plus requis (Apple l'a déprécié), mais le binaire doit cibler une architecture supportée.

Si le .ipa échoue sur un de ces points, les cinq méthodes ci-dessous le rejettent avec la même erreur — corrigez le binaire avant de changer d'outil.


Méthode 1 : Apple Transporter (l'outil officiel, CLI et GUI)

Le chemin le plus direct — c'est l'outil qu'App Store Connect utilise en interne. Sur macOS : téléchargement gratuit depuis le Mac App Store, glissez le .ipa dans l'interface, connectez-vous avec un Apple ID ou une clé API App Store Connect (.p8), cliquez sur Deliver.

Sur Linux ou en CI, Transporter existe en image Docker :

docker pull appleinc/transporter docker run -it appleinc/transporter -u your@apple.id -p your-app-specific-password -f /path/to/YourApp.ipa -t DAV

Pour de l'automatisation, sautez l'Apple ID et utilisez une clé API App Store Connect : générez-la dans App Store Connect sous Users and Access, téléchargez le .p8, passez Issuer ID, Key ID et chemin du .p8 à Transporter. Erreurs fréquentes : ITMS-90096 (provisioning profile qui ne correspond pas), ITMS-90535 (souci de CFBundleExecutable dans Info.plist), ITMS-90725 (version de SDK trop ancienne).


Méthode 2 : altool (legacy, encore fonctionnel)

Fourni avec les Xcode Command Line Tools — donc encore besoin de les installer, même sans l'IDE complet.

xcrun altool --upload-app --type ios --file /path/to/YourApp.ipa --apiKey YOUR_KEY_ID --apiIssuer YOUR_ISSUER_ID

Apple a déprécié altool au profit de Transporter ; il finira par ne plus fonctionner du tout. Pour un nouveau pipeline, partez directement sur Transporter ou l'API App Store Connect.


Méthode 3 : l'API App Store Connect, upload binaire direct

Pour un CI/CD sur mesure : créez une réservation de build via POST /v1/builds(ou l'endpoint uploadOperations), envoyez les octets du .ipa vers l'URL S3 pré-signée renvoyée par Apple, confirmez l'upload. Plus de code qu'avec Transporter, mais un contrôle programmatique complet ; authentification par JWT signé avec la clé .p8.


Méthode 4 : Fastlane deliver

fastlane deliver --ipa "YourApp.ipa" --skip_screenshots --skip_metadata

Sous le capot, c'est Transporter. L'intérêt : combiner l'upload avec l'envoi des métadonnées et des captures dans une seule lane. Contrepartie : il faut Ruby, un Gemfile, et une configuration initiale.


Méthode 5 : un dashboard unifié (OneStore)

Gérer métadonnées, captures d'écran et upload de binaire dans trois outils séparés, ça finit par coûter du temps. OneStoreintègre Apple Transporter directement : vous uploadez le .ipa depuis le même dashboard où vous éditez titre, description et captures. La clé .p8 est stockée dans un coffre chiffré au repos en AES-256-GCM au niveau applicatif ; un accord de traitement des données (DPA) basé sur les clauses contractuelles types de l'UE est disponible sur demande sur onestore.so/dpa. Aucune compilation ne se fait sur les serveurs de OneStore — le .ipa déjà signé transite tel quel vers Apple. Le plan gratuit (3 apps, 1 siège, sans carte bancaire) inclut l'upload de binaire ; ce n'est pas une option payante à part.

Si vous publiez aussi sur Android, le .aab part vers Google Play depuis le même endroit. Pour le détail technique de ce pipeline précis (worker macOS, xcrun altool --upload-app, chiffrement du coffre), voir l'article dédié : comment OneStore envoie vos binaires.


Choisir la bonne méthode

MéthodeOSGUIClé APIIdéal pour
Apple TransportermacOS + Linux (Docker)Oui (macOS seulement)OuiLa plupart des cas
altoolmacOS uniquementNonOuiPipelines legacy
API App Store ConnectToute OSNonOuiCI/CD sur mesure
Fastlane delivermacOS + LinuxNonOuiSetup Fastlane existant
OneStoreToute OS (web)OuiOuiListing + upload unifiés

Mots de passe spécifiques aux applications vs clés API

Apple accepte encore les mots de passe spécifiques aux applications pour Transporter et altool, mais les clés API (.p8) sont le meilleur choix pour un pipeline en 2026 : elles n'expirent pas quand un mot de passe change, permettent de scoper précisément les permissions, et ne déclenchent pas de prompt 2FA en CI. À générer dans App Store Connect sous Users and Access, onglet Integrations, section App Store Connect API.


FAQ

Je peux uploader depuis une machine Windows ?

Oui — l'image Docker de Transporter avec Docker Desktop, ou l'appel direct à l'API REST App Store Connect. Aucun des deux ne nécessite macOS.

Il faut les Xcode Command Line Tools pour Transporter ?

Non — l'app Mac App Store et l'image Docker de Transporter sont indépendantes des Xcode Command Line Tools. Seul altool en a besoin.

Quelle différence entre Transporter et altool ?

Les deux envoient des binaires vers App Store Connect. Apple a déprécié altool et recommande Transporter pour toute nouvelle configuration.

Je peux uploader un .ipa React Native ou Flutter de la même façon ?

Oui — la méthode d'upload ne regarde pas le framework, tant que le .ipa est correctement signé et que le bundle ID correspond à la fiche App Store Connect.

Comment je génère une clé .p8 ?

Connectez-vous à App Store Connect, Users and Access, onglet Integrations, créez une clé sous App Store Connect API, téléchargez le .p8 immédiatement — Apple n'autorise qu'un seul téléchargement.

C'est sûr de stocker ma clé .p8 dans un outil tiers ?

Ça dépend de comment l'outil la stocke. Chez OneStore par exemple, la clé est chiffrée au repos en AES-256-GCM (chiffrement authentifié) au niveau applicatif, jamais en clair en base ou dans des logs, et un DPA basé sur les clauses contractuelles types de l'UE est disponible sur demande. Ce n'est pas un hébergement physique en UE ni une conformité RGPD générique — vérifiez toujours ce que l'outil déclare précisément avant de lui confier une clé qui peut publier en votre nom.

Mon upload a réussi mais le build n'apparaît pas dans TestFlight, pourquoi ?

Le traitement côté Apple prend en général 5 à 30 minutes. S'il n'est toujours pas là après une heure, vérifiez vos emails pour une notification d'échec de traitement — les causes fréquentes sont des questions de conformité export ou une déclaration de chiffrement manquante dans Info.plist.