Le Managed Package est le format de distribution obligatoire pour toute application vendue sur AppExchange. Contrairement à un package non managé, il protège votre propriété intellectuelle (code masqué chez le client), autorise les mises à jour contrôlées, et impose une discipline architecturale stricte dès le premier jour. Voici les bonnes pratiques qui font la différence entre un package fragile et un package pérenne.
Salesforce propose deux générations de packaging managé :
sfdx-project.json qui décrit la structure.Pour tout nouveau projet, 2GP managé est fortement recommandé : il s'intègre nativement aux pipelines CI/CD et facilite grandement la gestion des dépendances entre packages (unlocked packages internes, package de base + extensions).
Toute API exposée (objets, champs, classes Apex globales, composants LWC exposés) est préfixée par votre namespace. Quelques règles à suivre :
public ou private.global ne peut plus jamais être retiré de l'API sans casser la compatibilité ascendante — réfléchissez avant d'exposer.// Une classe globale devient un contrat public permanent
global class FactureService {
global static Decimal calculerTotal(Id factureId) {
// implémentation
}
}
Un package managé peut dépendre d'un autre package (interne ou tiers). Documentez explicitement ces dépendances dans sfdx-project.json et évitez les références circulaires. Pour les intégrations avec des API standard Salesforce, privilégiez toujours les interfaces publiques documentées plutôt que des contournements non supportés qui casseront lors des releases saisonnières (Spring, Summer, Winter).
Pour la configuration propre à chaque client, distinguez bien :
Ne stockez jamais de secrets (clés API, identifiants) dans des Custom Settings ou Custom Metadata en clair : utilisez des Custom Metadata protégés combinés à des Named Credentials, ou un stockage chiffré dédié.
Votre package cohabite dans un org avec d'autres applications et le code natif du client. Quelques précautions essentielles :
Un packaging managé bien conçu se reconnaît à sa capacité à évoluer sans casser les clients existants. Cela commence dès l'architecture initiale : namespace soigné, API publique minimale et volontairement restreinte, dépendances documentées. Revenir sur ces choix après la première publication est toujours plus coûteux que de les poser correctement dès le départ.
Notre équipe DevToSpace développe et publie des applications AppExchange de bout en bout, de l'idée à la Security Review.
Parler à un expert