Rechercher dans le guide

Compiler une app iOS de A à Z

Codez sous Windows ou Linux, puis compilez votre app iOS sur un Mac cloud. Connectez-vous, vérifiez les outils, puis configurez les dépendances et la signature.

Vous avez déjà une commande ? Vérifiez l’état de l’instance et les informations de connexion dans le portail. Vos identifiants de paiement ne sont pas des mots de passe de connexion.

Configurer l’environnement

Ces trois étapes servent à vérifier l’accès et les outils. Pour l’instant, n’importez pas de certificat de production et ne mettez pas toutes les dépendances à niveau d’emblée.

  1. Vérifier les informations de connexion

    Connectez-vous au portail, puis ouvrez la commande et les détails de l’instance concernée. Vérifiez le nœud, son état et l’adresse, le port et les identifiants de connexion indiqués.

    L’adresse de connexion n’est pas le numéro de commande. Si l’instance est encore en cours de configuration, vérifiez son état. En cas d’erreur, joignez le numéro de commande à votre demande d’assistance au lieu de réinitialiser la configuration à répétition.

  2. Se connecter à macOS

    Dans votre client VNC local, saisissez séparément l’adresse, le port et le mot de passe. Pour la première connexion, choisissez une résolution modeste et vérifiez que le clavier, la souris et les fenêtres fonctionnent correctement.

    Pour utiliser la ligne de commande, connectez-vous en SSH avec les informations fournies pour l’instance. Lors de la première connexion, vérifiez l’empreinte de l’hôte. Si elle a changé de façon inattendue, n’entrez pas vos identifiants avant d’en avoir vérifié la cause.

    Un bureau qui ralentit ne signifie pas que la compilation est arrêtée. Vérifiez d’abord votre réseau local, puis réduisez la résolution. Pour une compilation sans interface graphique, utilisez SSH.

  3. Vérifier les outils de développement

    Vérifiez que Xcode est installé au complet et ouvrez-le une fois pour initialiser ses composants. Les outils en ligne de commande doivent pointer vers la version de Xcode utilisée pour cette compilation, et non simplement vers le répertoire des outils autonomes.

    xcode-select -p
    xcodebuild -version
    xcodebuild -showsdks

    S’il manque le SDK iOS, installez les composants Xcode nécessaires. Traitez les demandes d’acceptation de licence uniquement si elles apparaissent ; ne changez pas de répertoire pour masquer l’absence réelle du SDK.

Avec Flutter

Commencer par doctor

Transférez sur le Mac le projet, les fichiers de verrouillage des dépendances et les ressources nécessaires. Gardez la version de Flutter utilisée par le projet : éliminez d’abord les problèmes d’environnement avant de modifier le code métier.

Installer les prérequis

Préparez le SDK Flutter, Xcode complet et CocoaPods. Si le projet impose une version de Flutter ou une chaîne d’outils Ruby, installez-les selon les consignes du dépôt pour éviter que votre environnement local et celui de compilation utilisent des versions différentes.

Lancez le diagnostic, puis traitez les alertes de la chaîne d’outils iOS une par une. Un avertissement sur la connexion d’un appareil n’empêche pas forcément l’archivage ; en revanche, l’absence de Xcode, du SDK ou de la configuration de signature doit être résolue au préalable.

Distinguer les deux types de vérification

Pour vérifier uniquement que la compilation aboutit, commencez par une compilation release sans signature. Elle ne remplace pas un paquet signé et ne peut pas être distribuée telle quelle.

Pour exporter un fichier .ipa, vérifiez dans Signing & Capabilities de Xcode le Team, le Bundle Identifier, le certificat et le profil de provisionnement, puis lancez la compilation finale.

Exécuter dans l’ordre

flutter --version
flutter doctor -v
flutter pub get
flutter build ios --release --no-codesign
flutter build ipa --release

La dernière commande nécessite une configuration de signature complète. L’emplacement de sortie et la méthode d’export dépendent de la version de Flutter et du résultat de la commande. Une fois la compilation terminée, téléchargez le fichier et vérifiez-le localement.

Identifiez d’abord l’étape en échec avant de vider le cache
Indice d’erreur Première vérification À éviter en premier
CocoaPods not installed Vérifiez que CocoaPods est installé et que la commande pod est accessible depuis le terminal actuel. Ne supprimez pas d’emblée tout le projet iOS.
No profiles / signing Vérifiez que le Bundle Identifier, le Team et le type d’export correspondent, puis contrôlez la période de validité du profil de provisionnement. Ne confondez pas les erreurs de dépendances et les erreurs de signature.
Deployment target Comparez les exigences des extensions, harmonisez la version minimale d’iOS dans le projet et le Podfile, puis installez les dépendances. Ne modifiez pas un seul target avant de relancer l’archivage.

Avec React Native

Verrouiller les versions des dépendances

Commencez par consulter les versions de Node, Ruby et du gestionnaire de paquets indiquées dans le dépôt. Conservez les fichiers de verrouillage afin que la machine de compilation reproduise l’environnement de l’équipe au lieu de choisir de nouvelles versions.

Installer d’abord les dépendances JS

Choisissez npm, Yarn ou le gestionnaire déjà utilisé par le projet, selon son fichier de verrouillage. Les commandes ci-dessous conviennent à un projet npm avec package-lock.json ; pour les autres projets, utilisez la commande d’installation prévue.

Si le dépôt contient un Gemfile, utilisez Bundler pour fixer la version de CocoaPods. Sans Gemfile, utilisez directement la version de pod demandée par le projet. Ne mélangez pas les outils installés globalement avec ceux du projet.

Ouvrir ensuite le workspace

Après l’installation des Pods, ouvrez le fichier .xcworkspace du répertoire iOS, et non le seul .xcodeproj. Choisissez le scheme de l’app concernée et archivez avec la configuration Release.

Avant l’archivage, vérifiez les numéros de version et de build ainsi que la signature. Après l’archivage, exportez depuis Organizer selon que le fichier est destiné aux tests ou à la distribution. Un build pour simulateur ne remplace pas un paquet installable sur appareil.

Reproduire l’environnement du projet

node --version
ruby --version
npm ci
bundle install
cd ios
bundle exec pod install

Les deux commandes Bundler supposent que le projet inclut un Gemfile. Si l’installation échoue, conservez la première erreur et les versions concernées avant d’essayer de corriger le problème.

Vérifier Hermes séparément

En cas d’échec de compilation de Hermes, vérifiez d’abord la compatibilité entre les versions de React Native, le fichier de verrouillage des Pods, Xcode et les dépendances natives. Si le journal indique que le script ne trouve pas Node, vérifiez le chemin Node utilisé par le script de compilation. Ne désactivez pas Hermes et ne supprimez pas tous les fichiers de verrouillage en premier : cela modifierait le comportement du projet et les dépendances obtenues.

Avec Unity

Migrer le projet exporté

Continuez à développer le jeu sous Windows, puis compilez-le et signez-le dans Xcode sur un Mac cloud. Transférez l’intégralité du répertoire exporté, pas seulement un fichier de projet.

Vérifier d’abord les modules

Vérifiez que la version et le mode d’installation de Unity permettent d’exporter un projet iOS sur votre machine, et que le module iOS Build Support correspondant est installé. Si l’export local est impossible, transférez le projet Unity sur le Mac et compilez-le avec la même version de l’éditeur.

Avant l’export, vérifiez le Bundle Identifier, le backend de script, la version minimale du système et les réglages de plateforme des extensions. Enregistrez la configuration utilisée.

Transférer le répertoire complet

Compressez et transférez le projet Xcode exporté avec ses ressources, extensions natives et scripts de compilation. Après extraction, vérifiez l’arborescence pour éviter d’oublier des configurations cachées ou de ne transférer que le .xcodeproj.

Si une extension dépend de CocoaPods, exécutez d’abord les étapes d’installation requises, puis ouvrez le workspace généré. Ne compilez pas directement depuis un répertoire temporaire extrait d’une archive.

Diagnostiquer par couche

En cas d’échec IL2CPP ou de l’éditeur de liens, examinez la première erreur de compilation et vérifiez l’architecture des bibliothèques natives, les références aux frameworks et la version des extensions. Une fois la compilation réussie, vérifiez les éventuelles incompatibilités entre le certificat et le profil de provisionnement.

Pour les grands lots de ressources, envisagez l’offre Pro : M4 Pro / 64 Go / SSD 2 To. Vérifiez d’abord la taille des ressources et l’espace disponible ; ne choisissez pas la configuration en fonction du nom du projet.

Une nouvelle exportation du projet Unity peut écraser les modifications manuelles apportées dans Xcode. Notez les réglages nécessaires et intégrez au processus de compilation du projet toute modification pouvant être automatisée, afin d’éviter de la refaire à chaque compilation.

Comprendre ces termes

La connexion, le matériel et la signature sont des sujets distincts. En connaître les termes vous aidera à gagner du temps lorsque vous signalerez un problème.

Nœud physique
Matériel Mac sur lequel macOS s’exécute réellement. L’emplacement du nœud choisi influe sur le parcours de connexion à distance et de transfert des fichiers, mais ne change pas les exigences de signature du projet.
Dédié
Machine physique dédiée qui vous est attribuée pendant la période de location : ce n’est pas une machine virtuelle et son CPU et sa mémoire ne sont pas partagés. Vous restez responsable de la gestion des accès au projet et des identifiants de compilation.
VNC
Méthode permettant de visualiser et de contrôler le bureau graphique distant. Pratique pour configurer Xcode pour la première fois et vérifier un archivage. La réactivité dépend de votre réseau local et de la résolution.
self-hosted runner
Exécuteur CI installé sur une machine que vous gérez. Les compilations s’exécutent sur ce Mac ; votre équipe doit configurer les jetons d’enregistrement, les permissions des tâches et les règles de nettoyage.
Mémoire unifiée
Mémoire partagée entre le processeur et les tâches graphiques sur Apple Silicon. La taille du projet, les compilations parallèles et les outils ouverts simultanément consomment tous cette ressource.
Certificat de signature
Identité utilisée pour signer une app. La signature nécessite généralement aussi la clé privée associée. Importer le certificat sans sa clé privée correspondante peut empêcher la signature.
Provisioning Profile
Profil qui associe l’identifiant de l’app, les autorisations de signature et le type de distribution. Il doit correspondre au certificat, au Team, aux capacités de l’app et au type d’export.
.ipa
Paquet d’app destiné aux appareils iOS. La création du fichier ne garantit pas qu’il pourra être installé sur n’importe quel appareil : les possibilités d’installation ou de distribution dépendent de la signature et du mode d’export.

Vérifications après la compilation

Récupérez les fichiers générés et planifiez aussi la durée de location et la gestion des données. Fermer le bureau à distance n’arrête pas la location.

Je n’ai pas fini : comment prolonger ?

Avant l’échéance, ouvrez le portail pour consulter l’option de renouvellement, la facture et la date d’expiration du service. Vérifiez la durée et le montant, puis effectuez le paiement et confirmez la mise à jour de la période de service. Si le paiement a été soumis mais que l’état n’a pas changé, joignez le numéro de commande et la preuve de transaction à une demande d’assistance. Une capture d’écran du paiement ne suffit pas à confirmer le renouvellement.

J’ai fini la compilation : comment arrêter la location ?

Le service est prépayé à la journée, à la semaine, au mois ou au trimestre. Il s’arrête à l’échéance s’il n’est pas renouvelé. Si vous avez terminé plus tôt, exportez d’abord vos fichiers, puis vérifiez la période de service et les options disponibles dans le portail. Quitter VNC, fermer SSH ou éteindre manuellement la machine ne remplace pas la vérification de l’état de facturation de la commande et ne donne pas automatiquement droit à un remboursement.

Mes fichiers seront-ils conservés après l’échéance ?

Les données sont supprimées après l’arrêt du service à l’échéance, conformément aux conditions du service. Ne comptez pas sur une machine arrêtée comme espace de sauvegarde. Avant l’échéance, exportez le code source, le fichier .ipa, l’Archive, les dSYM et les configurations nécessaires, puis vérifiez localement que les fichiers sont lisibles. Sauvegardez les certificats et clés privées de façon sécurisée, conformément aux règles de votre équipe. Supprimez les identifiants sensibles de la machine distante lorsque vous n’en avez plus besoin. Ne partez pas du principe que vous pourrez vous reconnecter ou récupérer vos fichiers après l’échéance.

Quels moyens de paiement sont acceptés pour le renouvellement ?

Seuls USDT-TRC20 et Visa / Mastercard / Amex (via Stripe) sont acceptés. Tous les paiements sont réglés en dollars américains (USD) ; les moyens réellement disponibles dépendent de la réponse de l’interface de paiement. En cas de problème de paiement, indiquez le numéro de commande, le moyen de paiement et l’état de la transaction. N’envoyez jamais votre numéro de carte complet, son cryptogramme, votre mot de passe ou une clé privée par e-mail ou dans une demande d’assistance.

Décrire clairement l’erreur

Pour une commande existante, ouvrez une demande d’assistance dans le portail. Avant de commander, ou si vous ne pouvez temporairement pas vous connecter, consultez la page Contact pour connaître les options par e-mail. Les demandes sont traitées dans l’ordre de réception ; aucun délai de réponse n’est garanti sans confirmation.

Indiquer comment reproduire le problème

Précisez le numéro de commande, les versions du framework et de Xcode, les étapes suivies et l’heure de l’échec avec le fuseau horaire. Pour un problème de compilation, fournissez la première erreur et les lignes de journal qui la précèdent et la suivent ; ne vous contentez pas d’une capture de la dernière ligne « échec ».

Retirer les informations sensibles

Masquez les mots de passe, jetons, clés privées et informations client dans les journaux. Pour une demande liée à la disponibilité, indiquez également la période concernée. Pour un problème de paiement, fournissez l’identifiant de transaction sans joindre de code source sans rapport avec le problème.

En cas de coupure de connexion, indiquez si VNC et SSH ont été touchés tous les deux et ce qui s’est passé après le changement de réseau local. Cela nous aidera à distinguer un problème d’accès d’un problème de compilation.

Vous êtes bloqué à quelle étape ?

Indiquez le numéro de commande et la première erreur : nous reprendrons le diagnostic à partir de là.