Passer à la navigation principale

Types de constructions Expliqués : De la localisation à la production

Perdus dans tous les types de constructions ? Ce guide explique tout, des constructions locales, CI, de débogage et de production, aux stratégies de signature, de distribution et de retrait.

Martin Donadieu

Martin Donadieu

Spécialiste du contenu

Types de constructions Expliqués : De la localisation à la production

Vous ouvrez un projet et voyez build:ios:dev, build:android:qa, build:staging, build:release, build:prod, plus quelques scripts de shell que personne ne veut toucher. Ensuite, quelqu'un dit, « Pouvez-vous faire une construction de mise en scène pour le client d'ici la fin de la journée ? » Si vous êtes un développeur mobile de niveau moyen, cette demande ressent souvent comme vaguement inquiétante. Quel config ? Quelle identité de signature ? Quel backend ? Quel chemin de distribution ?

Ce malentendu provient généralement du fait de considérer les types de build comme une liste plate. Ce n'est pas le cas. Ils constituent un flux de travail. Chaque build existe pour résoudre un problème spécifique à un point précis entre votre ordinateur portable et un appareil de l'utilisateur.

Un build n'est pas juste une application compilée. Il s'agit d'une version de votre application assemblée pour une finalité, un public et un environnement. Certains builds existent pour vous aider à déboguer. D'autres existent pour aider la QA à briser les choses de manière sécurisée. D'autres existent afin que l'ingénierie de lancement puisse produire un artefact fiable. D'autres existent afin que les équipes de produits puissent envoyer des modifications avec moins de risques.

Si votre configuration locale vous semble encore instable avant que tout cela ne commence, mettez d'abord cela sous contrôl’avec un setup de l'environnement local approprié CapacitorTable des matières

Le monde complexe des builds logiciels

Désenfouir le monde des constructions logicielles

La plus grande erreur que je vois est l'assomption selon laquelle les noms de construction racontent toute l'histoire. Ils ne le font pas. staging peut signifier « saveur de version de mise en production pointée vers les APIs de staging ». Dans un autre dépôt, cela peut signifier « artefact de QA déboguable avec paiements simulés ». Dans un troisième, cela peut signifier « build signé par production distribué de manière privée ».

C'est pourquoi les équipes se retrouvent enlisées. L'étiquette n'est utile que si vous comprenez la tâche que cette construction effectue.

Une façon utile de penser aux types de constructions est la suivante:

  • Les constructions locales aident un développeur individuel à se déplacer rapidement.
  • Les constructions CI créent une source partagée de vérité pour l'équipe.
  • Flavours de débogage et de production Définissent comment l'application est compilée et instrumentée.
  • Éditions de distribution Définissent qui reçoit l'application et comment.
  • Éditions signées Déterminent si la plateforme fera confiance à l'artifact.
  • Mises à jour basées sur le canal Déterminent comment les changements se déplacent après l'installation.

Ce ne sont pas des catégories concurrentes. Elles s'empilent.

Une « édition de pré-production » n'est rarement une chose unique. C'est généralement une combinaison de saveur, d'environnement, de signature et de choix de distribution.

C'est pourquoi deux équipes peuvent dire « nous avons besoin d'une édition de bêta » et vouloir des artefacts complètement différents.

Cela compte le plus sur les appareils mobiles car chaque étape ajoute de la friction. La compilation native, les secrets, la provisionnement, les pistes de l'application Store, l'accès des testeurs, la configuration de l'environnement et le retour en arrière doivent s'aligner. Si une partie est défaillante, votre processus de mise en production devient un savoir-faire tribal. Alors qu'un ingénieur part en vacances et personne ne peut livrer proprement.

Les équipes qui gèrent bien cela ne se souviennent pas de plus de scripts. Elles définissent les types de build comme des portes de qualité. Chaque porte réduit un type de risque différent : un build code cassé, une configuration incorrecte, une signature incorrecte, une mise en production incorrecte ou une récupération incorrecte.

Le Spectre des Builds Local vs Builds CI

Un build local est la version que vous créez pour vous-même. Un build CI est la version que l'équipe peut se fier.

Cela semble évident, mais une grande partie des douleurs de build commencent lorsque les équipes brouillent ces deux ensemble. Quelqu'un prouve « cela fonctionne sur mon ordinateur », puis la branche faille en CI car l'environnement local dépendait implicitement d'une dépendance en cache, d'un fichier édité manuellement ou d'un élément de signature qui n'a jamais été intégré à l'automatisation.

Un homme concentré travaillant sur son ordinateur portable dans un bureau moderne, étudiant le développement local par rapport au développement CI.

Les builds locaux

Les builds locaux sont privés, rapides et jetables. Vous les utilisez pour répondre à des questions immédiates.

Peut-on afficher l'écran ? Le plugin natif s'initialise-t-il ? La modification de Gradle ou Xcode a-t-elle brisé la compilation ? Peut-on reproduire la panne avec les journaux activés ?

Un bon build local donne la priorité à la vitesse plutôt qu'à la cérémonie. Il inclut souvent des contrôles plus souples, des journaux verbaux, des commutateurs de développeur et des instruments temporaires. C'est acceptable. Sa tâche est de fournir des retours rapides.

Ce qui ne fonctionne pas, c'est promouvoir un build local à quelque chose de plus important qu'il ne l'est. Un build local ne devrait jamais devenir l'artefact de mise en production car il s'est compilé avec succès sur un seul ordinateur portable.

Les builds CI

Les builds CI sont plus lents pour une raison. Ils suppriment l'état de la machine personnelle de l'équation et rendent le processus de build répétable.

Quand CI est en bonne santé, il fait trois choses bien :

  • Reconstruit à partir de zéro : Cela prouve que le projet peut compiler sans hypothèses locales cachées.
  • Exécute des vérifications au niveau de l'équipe : Les tests unitaires, la mise en forme et les règles de packaging se produisent dans le même endroit chaque fois.
  • Produit un artefact suivi : L'équipe peut relier un build à un commit, une branche et une exécution de pipeline.

C'est pourquoi j'aime l'analogie atelier-fabrique. Votre ordinateur portable est l'aire de travail où vous itérez. CI est la chaîne de montage qui prouve que le processus est réel.

Si votre équipe décide encore manuellement laquelle des scripts s'exécute où, centralisez cette logique dans l'automatisation. Une référence pratique est ce guide sur la gestion des builds de dev et de prod avec GitHub Actions.

Règle pratique : Si QA, produit ou support ont besoin de l'artefact, il devrait provenir de CI, et non d'une machine de développeur.

Une fois que vous acceptez cela, le reste du cycle de vie de la construction devient plus facile. La sélection de saveur, la signature, l'injection d'environnement et la distribution appartiennent tous à une pipeline que n'importe qui sur l'équipe peut inspecter.

Flavours de construction de base Débogage vs. Livraison

Il existe de nombreux étiquettes utilisées pour les constructions, mais sous toutes ces dénominations, deux saveurs importent le plus souvent : débogage et livraison.

Ils existent parce que les développeurs et les utilisateurs finaux ont besoin de choses opposées.

Une infographie de comparaison entre la construction de débogage et la construction de livraison montrant les principales différences en matière de performance et de but.

Constructions de débogage

Une construction de débogage est conçue pour aider les humains à inspecter le comportement. Elle garde généralement plus de métadonnées, facilite le dépannage et évite les optimisations agressives qui peuvent cacher les problèmes.

Il existe une analogie utile avec les spécifications de construction. Les spécifications sont généralement classées en types de construction, performances, propriétaires, et norme de référence types, et une construction de débogage se mélange bien à un approche prescriptive approche performances approche performances.

caractérisée par le résultat requis, comme indiqué dans cette analyse des types de spécifications de construction

  • Diagnostic lisibles : les traces de pile, les sorties de console et les symboles qui vous aident à trouver l'erreur.
  • Facilités pour les développeurs : les interrupteurs de simulation, les menus de test et les commutateurs de fonctionnalités qui seraient inappropriés pour les utilisateurs finaux.
  • Une itération à faible friction : les cycles d'installation et de démarrage rapides comptent plus qu'un paquet soigné.

Les builds de débogage ne sont pas « mauvais ». Ils sont conçus pour une fin spécifique.

Builds de production

Les builds de production sont conçus pour les appareils en utilisation. Cela change immédiatement les priorités.

Vous vous souciez maintenant de l'intégrité du paquet, du comportement de démarrage, d'une posture de sécurité plus serrée, de plus petits payloads et de caractéristiques de temps d'exécution prévisibles. Vous voulez également moins d'entrées accidentelles pour l'inspection ou l'utilisation abusive.

Le compromis est simple. Tout ce qui rend les builds de débogage plus faciles à inspecter tend à rendre les builds de production moins appropriés pour la production.

Voici la frontière de décision que j'utilise avec les équipes :

Saveur Idéal pour Ce qu'il optimise
Débogage Développement, test local, reproduction de problèmes Visibilité et vitesse d'itération
Lancement Distribution bêta, soumission de magasin, lancement de production Stabilité, performance et confiance

Pourquoi les équipes se trompent encore dans ce domaine

La plus grande source de confusion est la mélange de « environnement » avec « saveur ».

Un build peut être flavor de mise en production ciblant les services de mise en ligneCe n'est pas rare pour la QA car on souhaite un comportement similaire à la production avec des données non de production. Un build peut également être flavor de débogage ciblant les services de développement

pour le codage quotidien. Ce sont des axes différents.

Une grande partie de la prolifération de scripts provient des équipes qui codent toutes les combinaisons possibles dans les noms de packages au lieu de documenter la matrice.

Envoyez la flavor de mise en production lorsque les non-développeurs testent le comportement utilisateur. Gardez la flavor de débogage pour le travail d'ingénierie et la dépanneuse délibérée.

Cette règle élimine une grande partie de la complexité accidentelle.

Correspondance des builds aux environnements de distribution

La plupart des discussions sur les types de builds s'arrêtent trop tôt. Elles expliquent local, debug et release, puis ignorent la question plus difficile : où va ce build ?

A practical build workflow usually moves through several environments, each with a different audience and tolerance for risk. If you’re working on Capacitor apps, it also helps to keep a clean mental separation between Un workflow de build pratique passe généralement par plusieurs environnements, chacun avec un public différent et une tolérance pour le risque différent. Si vous travaillez sur des applications Capacitor, cela aide également à maintenir une séparation mentale claire entre le comportement d'application de développement et de production dans Capacitorcar les nombreux "bugs de build" sont en réalité des erreurs de cartographie de l'environnement.

Nightly et canary

Ces builds sont des avertissements précoce. Ils sont destinés aux ingénieurs, à la QA ou à un petit groupe interne prêt à tolérer des bords rugueux.

Un build nightly est généralement généré à un horaire ou à partir de l'état de la branch principale la plus récente. Un build canary est intentionnellement exposé à un public restreint avant un déploiement plus large. Je les traite comme des outils d'apprentissage, pas comme des promesses de stabilité.

Ils sont utiles lorsque vous avez besoin de répondre à des questions comme :

  • Intègre-t-on la branch proprement à travers les modules ?
  • Une mise à jour de dépendance native a-t-elle cassé une famille de dispositifs spécifique ?
  • Les testeurs internes peuvent-ils détecter des régressions avant une exposition plus large en bêta ?

Qu'est-ce qui ne fonctionne pas, c'est de donner des builds canary à des gens qui attendent un logiciel poli. Vous obtiendrez des retours d'information bruyants, et le mauvais public appellera la normalité un problème de mise en production.

Staging et bêta

À ce stade, la qualité du produit compte plus que la commodité de l'ingénieur.

Un build de staging ou bêta doit ressembler à ce que les utilisateurs réels obtiendront. Cela signifie généralement une saveur de mise en production, une configuration similaire à la production dans la mesure du possible, et une distribution contrôlée à l'aide d'outils de plateforme comme TestFlight ou les pistes de test Google Play.

La cible change ici :

  • Les équipes QA valident les régressions, les workflows et les critères d'acceptation.
  • Les gestionnaires de produits examinent le comportement dans un environnement de shell réaliste.
  • Les testeurs externes valident l'utilisabilité, la couverture des appareils et les cas d'extrémité.
  • Les équipes de support ou de succès peuvent prévisualiser les changements à venir.

La faute ici est de considérer la bêta comme « juste une autre version de débogage ». Si vos testeurs évaluent des flux utilisateur réels, ils ont besoin de conditions similaires à celles d'une mise en production.

Les builds de distribution privée

Certaines applications nécessitent des builds qui ne sont jamais destinés à l'audience de la boutique publique ou qui doivent atteindre un groupe plus restreint en premier.

Cela inclut les builds spécifiques au client, les applications internes pour les employés, les workflows réglementés, les outils d'opérations de terrain et les distributions uniquement pour les entreprises. Ces builds nécessitent souvent un contrôle plus strict sur qui peut installer l'application et sur le backend qu'ils atteignent.

C'est aussi là où le nommage devient dangereux. Les équipes disent souvent « build d'entreprise » quand elles veulent en réalité parler d'une des choses suivantes :

  • Une application interne signée privée
  • Une application distribuée dans la boutique avec des contrôles d'accès uniquement internes
  • un artefact personnalisé pour le client
  • un candidat de version de pré-production destiné à la revue des parties prenantes

Ils s'agit de différents modèles opérationnels. Gardez-les séparés dans votre pipeline et vos noms.

Production

Les builds de production sont l'engagement public. Ils sont destinés à l'App Store, à la Play Store ou au canal approuvé équivalent pour vos utilisateurs.

À ce stade, le build devrait être banal. C'est un compliment.

Vous souhaitez que le build de production soit réproducible, signé correctement, testé dans des conditions de mise en production et lié à un plan de reversion. Vous ne voulez pas d'ajustements manuels à la dernière minute, de hacks spécifiques à la machine ou de compromis sur « nous allons le corriger dans le prochain build ».

Voici la version à vue d'œil.

Types de builds et leurs caractéristiques

Type de build Public cible context : Page/zone : Page de produit/prix pour entreprises. Rôle : Étiquette de l'interface. Clé de message `enterprise_audience_label` (Étiquette de public cible pour entreprises). Distribution de méthode
Développeur local Développeur individuel Généralement debug, itération rapide, paramètres d'environnement local Installation directe à partir de la machine locale
Validation CI Équipe d'ingénierie Construction automatisée répétitive, vérifications partagées Stockage d'artefact CI
Nightly ou canary Testeurs internes, membres sélectionnés de l'équipe État d'intégration précoce, déploiement limité Outils de distribution internes
Étape de pré-production ou bêta QA, produit, testeurs externes Environnement de cartographie non public, généralement similaire à une version de production TestFlight, Play testing tracks, liens privés
Ad-hoc ou entreprise Employés internes, clients, groupes restreints Configuration contrôlée, signature spécifique au destinataire Canaux de distribution privés
Production Utilisateurs publics Configuration de version finale, signature prête pour les magasins App Store ou Google Play

Le bon type de build est celui qui correspond à la tolérance du public au risque. La plupart des erreurs de mise en production se produisent lorsque les équipes ignorent cette alignement.

Le rôle critique de la signature de Code

Un fichier de build par lui-même n'a pas beaucoup de sens sur les appareils mobiles. La plateforme a besoin de preuves qu'il provient d'une source fiable et qu'il n'a pas été modifié après sa création. Ces preuves sont la signature de code.

Si vous avez déjà eu un build qui s'est compilé parfaitement mais qui a refusé d'installer, d'envoyer, ou de lancer correctement, la signature était probablement le problème.

A computer screen displaying Python source code for Blender with a Code Signing overlay text.

Ce que la signature prouve réellement

Pour une équipe mobile, la signature de code fait trois choses.

  • Authenticité : elle lie l'application au développeur ou à l'organisation qui l'a produite.
  • Intégrité : ce processus aide à prouver que l'artefact n'a pas été modifié depuis la signature.
  • Authorization : sur les plateformes Apple en particulier, il contrôl’également où et comment l'application est autorisée à s'exécuter.

C'est ce troisième point qui confond beaucoup de développeurs. La signature n'est pas seulement une identité. C'est aussi une autorisation.

Par conséquent, le même application code peut nécessiter différents matériaux de signature en fonction de l'endroit où vous souhaitez l'exécuter, la distribuer aux testeurs, la déployer en interne ou la soumettre à la boutique.

Comment la signature change en fonction de l'endroit

C'est ce modèle mental qui maintient le processus sain : la signature suit la distribution.

Une installation locale de développeur utilise un ensemble d'identités et d'autorisations. Une version bêta envoyée via TestFlight utilise un autre. Un chemin de distribution interne peut nécessiter des profils différents à nouveau. Une mise en ligne publique dans une boutique a ses propres attentes de signature et de packaging compatible avec les revues.

C'est pourquoi « re-signifiez simplement la build » est rarement une petite demande. Une fois que la signature change, les destinations autorisées de l'artefact peuvent changer avec elle.

Une mise en place disciplinée comprend généralement :

  • Les actifs de signature stockés dans CI : pas sur les ordinateurs portables personnels.
  • Séparation claire par cible : développement, test privé, entreprise, mise en magasin.
  • Contrôles d'accès et rotation : surtout lorsque des sous-traitants ou plusieurs équipes de produits partagent l'infrastructure.
  • Auditabilité : vous devez savoir quel pipeline a utilisé quelle identité de signature.

Si votre équipe envoie des mises à jour web à l'intérieur d'une application Capacitor, il y a une deuxième couche de signature à prendre en compte également. Cette vue d'ensemble de la sécurité de bout en bout pour le Capacitor mises à jour __CAPGO_KEEP_1__ signature end-to-end security for Capacitor updater code signing Les problèmes de signature ne viennent généralement pas de la cryptographie. Ils viennent de la propriété floue, du traitement manuel et des pipelines de construction qui masquent quelle identité a été appliquée.

Traitez les matériaux de signature comme de l'infrastructure de production, car c'est ce qu'ils sont.

Si votre équipe envoie des mises à jour web à l'intérieur d'une application __CAPGO_KEEP_0__, il y a une deuxième couche de signature à prendre en compte également. Cette vue d'ensemble de la sécurité de bout en bout pour le __CAPGO_KEEP_0__ mises à jour __CAPGO_KEEP_1__ signature

Orchestrer les sorties avec CI/CD et les canaux de mise à jour

À l'époque où une équipe se développe, le défi n'est pas de connaître les types de builds. C'est de les coordonner sans avoir recours à l'intuition humaine.

C'est là que CI/CD entre en jeu.

Capture d'écran de https://capgo.app

Votre pipeline est le contrat de build

Un pipeline fiable devrait répondre aux mêmes questions à chaque fois :

  • à quoi sert cette build
  • quelle est la variante utilisée
  • quels sont les valeurs de l'environnement qu'elle reçoit
  • quels tests elle doit passer
  • à quelle identité de signature s'applique
  • où l'artifact est livré

Ce schéma reflète une bonne spécification technique. Une bonne spécification devrait inclure le but et la portée, les exigences fonctionnelles, les exigences de conception, les normes techniques, les exigences de test, les exigences de livraison et les exigences de support ou de maintenance, comme décrit dans ce guide de spécification technique. Cette même discipline rend le CI/CD plus facile à raisonner car la pipeline cesse d'être un sac de scripts et devient une politique de lancement exécutable.

In practice, la pipeline devrait décider, et non l'ingénieur qui la lance manuellement. Les règles de branchement, les étiquettes, les étapes d'approbation, le contexte de signature et les cibles de déploiement devraient tous être codés.

Ce qui fonctionne :

  • L'intention basée sur la branchement : main, branches de version et étiquettes déclenchent différents workflows.
  • L'étiquetage explicite des artefacts : saveur, environnement et cible sont visibles dans la sortie.
  • La promotion au lieu de la reconstruction manuelle : avancer plutôt que de recréer les artefacts validés ad hoc.

Ce qui ne fonctionne pas de manière consistante est l'approche d'un script flexible unique où tout le monde passe des drapeaux personnalisés et espère qu'ils correspondent à ce que les magasins ou les testeurs nécessitent.

Les canaux ajoutent un contrôl’après que le binaire a été expédié.

Les builds natifs sont encore grossièrement granulaires. Une fois que la mise à jour est dans le magasin, changer le contenu web à l'intérieur d'une application Capacitor n'a pas toujours besoin d'un nouveau binaire complet.

C'est là que les canaux de mise à jour deviennent utiles. Ils permettent aux équipes de cibler les mises à jour d'actifs web vers un sous-ensemble d'utilisateurs à l'intérieur d'un binaire de production installé. Pour les équipes Capacitor, une option est Capgoqui publie des ensembles web signés vers des canaux ciblés afin que vous puissiez pousser des modifications de JavaScript, CSS, copie, configuration et actifs sans reconstruire la coquille native à chaque fois.

Un modèle pratique ressemble à ceci :

  • Création, signature et distribution de l'application native dans CI/CD : Attribution de canal :
  • Association d'utilisateurs ou d'environnements à des flux de beta, de pré-production, de production ou de canaux spécifiques pour les clients. Attribution de canal :
  • Rollout sélectif : envoyer les modifications web à un groupe avant une exposition plus large.
  • Voie de reversion : empêcher ou rétablir une mise à jour incorrecte sans attendre la revue de la boutique.

Si vous n'avez pas configuré ce modèl’encore, ce guide de marche sur la création et la suppression de canaux de mise à jour dans Capacitor rend les mécanismes concrets.

Un court démonstration peut aider si vous n'avez pas vu les canaux en action :

C'est le changement stratégique dont ont besoin de nombreux équipes mobiles. Les types de construction ne sont pas seulement des artefacts. Ils sont des points de contrôle. Les CI/CD contrôlent comment les binaires sont produits. Les canaux contrôlent comment les modifications post-installation sont exposées.

Meilleures Pratiques pour un Flux de Construction Moderne

Un système de construction sain est opiné. Il ne laisse pas chaque développeur improviser le comportement de la mise en production.

Les meilleures configurations dont j'ai travaillé partagent quelques habitudes :

  • Distinguez clairement les axes : Le goût, l'environnement, la cible de signature et la cible de distribution ne doivent pas être mélangés dans une étiquette vague.
  • Laissez la CI produire des artefacts destinés à l'équipe : Les builds locaux sont pour le développement, pas pour la confiance des parties prenantes.
  • Testez dans des conditions similaires à la mise en production tôt : Les QA et les testeurs bêta devraient voir un comportement qui se rapproche le plus possible de l'application réelle.
  • Conservez les actifs de signature hors des ordinateurs portables : Les secrets appartiennent à l'infrastructure contrôlée avec un accès restreint.
  • Nommez les artefacts de telle sorte que les humains puissent les lire : S'il est impossible à quelqu'un d'identifier à quoi sert un fichier en quelques secondes, la nomination est mauvaise.
  • Préférez la promotion à la reconstitution : Lorsqu'un artefact est validé, déplacez-le vers l'avant dans le flux de travail au lieu de le reconstruire manuellement.
  • Le rôle de reversion avant le lancement : La reversion du magasin est lente et opérationnellement lourde. La reversion de la couche web pour les mises à jour de Capacitor peut être beaucoup plus rapide, mais seulement si vous avez planifié les canaux et les politiques avant.

La plus grande modification de mentalité est celle-ci : ne demandez pas « quel script de construction devrais-je exécuter ? » Demandez-vous « quel risque gère-t-on à cette étape ? » Cette question produit de meilleurs systèmes de construction.

Si votre flux de travail répond clairement à cette question, votre processus de mise en production devient plus facile à gérer, plus facile à auditer et beaucoup moins dépendant d'un ingénieur senior qui se souvient de la bonne incantation.


Si votre équipe expédie des applications Capacitor et souhaite un contrôle plus serré sur les flux de travail de mise en production Capgo est digne d'évaluation comme partie de ce stack. Il gère les mises à jour ciblées en temps réel pour les actifs web à l'intérieur des applications Capacitor, prend en charge les ensembles de fichiers signés, les lancements basés sur les canaux et les contrôles de reversion, ce qui le rend utile lorsque vous avez besoin de correctifs plus rapides sans remplacer votre pipeline de construction natif.

Mises à jour instantanées pour les applications Capacitor

When a web-layer bug is live, ship the fix through Capgo instead of waiting days for app store approval. Users get the update in the background while native changes stay in the normal review path.

assistance humaine de Martin

Commencez maintenant

Dernières actualités de notre Blog

Capgo vous donne les meilleures informations dont vous avez besoin pour créer une application mobile vraiment professionnelle.