Une application macOS pour importer, comparer, analyser et exporter des design tokens depuis Figma vers Xcode.
Aperture Tokens Manager est l'application compagnon du plugin Figma Multibrand Token Exporter. Elle permet de créer une chaîne complète de design tokens depuis Figma jusqu'à votre projet iOS/macOS.
- Figma → Utiliser le plugin Multibrand Token Exporter pour exporter vos design tokens
- Import → Glisser-déposer ou sélectionner les fichiers JSON générés
- Comparaison → Comparer deux versions pour voir les changements
- Analyse → Scanner vos projets Swift pour détecter l'utilisation des tokens
- Export → Générer les fichiers Xcode (Colors.xcassets + Swift extensions)
- Statistiques : Aperçu de votre base de design system (tokens, groupes)
- Actions rapides : Accès direct aux fonctionnalités principales
- Historique unifié : Timeline de vos imports et comparaisons récentes
- Filtres d'historique : Tout / Imports / Comparaisons
- Drag & Drop : Glissez simplement vos fichiers JSON dans l'app
- Sélection de fichiers : Interface native macOS pour choisir vos exports
- Métadonnées : Affichage des informations d'export (date, version, générateur)
- Recherche : Filtrage en temps réel avec Cmd+F et auto-expansion des groupes
- Historique : Accès rapide aux imports précédents
- Base de référence : Définir un fichier comme "base" pour comparaisons
- Vue par onglets : Vue d'ensemble, Ajoutés, Supprimés, Modifiés
- Détection automatique : Identifie les tokens ajoutés, supprimés et modifiés
- Suggestions intelligentes : Fuzzy matching pour suggérer des remplacements
- Score de confiance : Couleur indicative (vert >70%, orange 50-70%, gris <50%)
- Diff visuel des couleurs : Badge cliquable montrant l'amplitude du changement (Minimal/Subtil/Modéré/Majeur) avec détails HSL
- Export Notion : Génération de Markdown pour documentation
- Scan de projets : Analyser plusieurs dossiers Swift
- Tokens utilisés : Liste avec occurrences (fichier, ligne, contexte)
- Tokens orphelins : Tokens non utilisés groupés par catégorie
- Progression en temps réel : Barre de progression avec nombre de fichiers scannés
- Annulation : Possibilité d'annuler un scan en cours
- Scan parallélisé : Performance optimisée avec TaskGroup
- Persistance : Les dossiers scannés sont mémorisés entre les sessions
- Patterns détectés :
.tokenName,Color.tokenName,.color(.tokenName)
- Colors.xcassets : Génération automatique des color sets Xcode
- Extensions Swift : Création d'extensions Color avec vos tokens
- Structure hiérarchique : Respect de l'organisation de vos tokens
- Support multi-thèmes : Gestion des variantes (legacy, newBrand × light, dark)
- Filtrage intelligent : Exportez uniquement les tokens activés
- Filtres d'export : Configurer les exclusions (tokens #, _hover, groupe Utility)
- Historique : Limiter le nombre d'entrées conservées (5-50)
- Données : Accès au dossier de stockage, reset complet
- Logs : Journal d'activité consultable et exportable
- À propos : Informations sur l'application et accès au tutoriel
- Guide de démarrage : Tutoriel interactif en 5 étapes au premier lancement
- Animations fluides : Transitions élégantes entre les étapes
- Lien plugin Figma : Accès direct à Multibrand Token Exporter
- Réaccessible : Bouton "?" dans la toolbar ou via Paramètres
- macOS 26 ou supérieur
- Xcode 17+ (pour le développement)
git clone https://github.com/your-org/ApertureTokensManager.git
cd ApertureTokensManager
open ApertureTokensManager.xcodeproj- Ouvrez l'onglet "Importer"
- Glissez votre fichier JSON ou cliquez sur "Sélectionner un fichier"
- Explorez vos tokens dans l'arborescence (recherche avec Cmd+F)
- Activez/désactivez les tokens à exporter
- Cliquez sur "Exporter Design System" pour générer les fichiers Xcode
- Ouvrez l'onglet "Comparer"
- Importez votre ancienne version (Old)
- Importez votre nouvelle version (New)
- Cliquez sur "Confirmer la comparaison"
- Explorez les changements détectés par onglet
- Consultez les suggestions de remplacement pour les tokens supprimés
- Optionnel : Exportez vers Notion pour documentation
- Ouvrez l'onglet "Analyser"
- Ajoutez les dossiers de votre projet Swift à scanner
- Cliquez sur "Lancer l'analyse"
- Consultez les tokens utilisés avec leurs occurrences
- Identifiez les tokens orphelins à potentiellement supprimer
Cette application est conçue pour fonctionner avec le plugin Figma Multibrand Token Exporter qui :
- Extrait automatiquement tous vos design tokens depuis Figma
- Génère des fichiers JSON structurés avec métadonnées
- Supporte les variables Figma et les modes
- Maintient la hiérarchie et l'organisation de vos tokens
{
"metadata": {
"exportedAt": "2026-01-28 14:30:45",
"timestamp": 1737982245000,
"version": "1.2.0",
"generator": "Multibrand Token Exporter"
},
"tokens": [
{
"id": "token-id",
"name": "primary-blue",
"path": "colors/primary/blue",
"value": "#007AFF",
"isEnabled": true,
"modes": {
"legacy": {
"light": "#007AFF",
"dark": "#0A84FF"
},
"newBrand": {
"light": "#0066CC",
"dark": "#3399FF"
}
}
}
]
}- SwiftUI + TCA : Interface moderne avec The Composable Architecture
- OSLog : Système de logging structuré par catégorie
- Actor-based Services : Gestion thread-safe des opérations async
- @Shared State : Persistance avec le pattern Sharing de TCA
- Swift Testing : Suite de tests avec le nouveau framework
ApertureTokensManager/
├── App/ # Point d'entrée
├── Components/ # Composants UI réutilisables
│ ├── ActionCard.swift # Carte d'action avec Liquid Glass
│ ├── ColorPreviewComponents.swift # Prévisualisation des couleurs
│ ├── DropZone.swift # Zone de drag & drop
│ ├── HistoryRow.swift # Ligne d'historique
│ ├── RecentHistoryView.swift # Historique récent
│ ├── SearchField.swift # Champ de recherche avec Cmd+F
│ ├── SectionComponents.swift # Composants de section
│ ├── StatCard.swift # Carte de statistique
│ ├── TokenTree.swift # Arborescence de tokens
│ ├── UnifiedHistoryView.swift # Timeline d'historique
│ └── ViewModifiers.swift # Modificateurs (Liquid Glass adaptatif)
├── Extensions/ # Extensions Swift
│ ├── Color+Hex.swift # Conversion hex ↔ Color + ColorDelta
│ ├── SharedKeys.swift # Clés @Shared pour persistance
│ ├── String+Date.swift # Formatage de dates
│ └── UTType+Extensions.swift # Types de fichiers supportés
├── Features/ # Features TCA
│ ├── App/ # Coordination des onglets
│ ├── Home/ # Accueil avec stats et historique
│ ├── Import/ # Import et export de tokens
│ ├── Compare/ # Comparaison de versions
│ ├── Analysis/ # Analyse d'utilisation
│ ├── Settings/ # Paramètres de l'application
│ ├── TokenBrowser/ # Navigation dans les tokens
│ └── Tutorial/ # Tutoriel de démarrage
├── Helpers/ # Utilitaires
│ ├── AnalysisReportFormatter.swift # Formatage des rapports
│ ├── FuzzyMatchingHelpers.swift # Algorithmes de similarité
│ ├── TokenHelpers.swift # Manipulation de tokens
│ └── TokenUsageHelpers.swift # Détection d'usages Swift
├── Models/ # Modèles de données
│ ├── Constants.swift # Constantes UI et métier
│ ├── DesignSystemBase.swift # Base du design system
│ ├── HistoryEntry.swift # Entrées d'historique
│ ├── PreviewData.swift # Données pour les previews
│ ├── TokenComparison.swift # Résultats de comparaison
│ ├── TokenExport.swift # Format d'export Figma
│ ├── TokenNode.swift # Structure d'un token
│ └── UsageAnalysis.swift # Rapport d'analyse
└── Services/ # Services métier
├── FileService/ # Lecture de fichiers JSON
├── ExportService/ # Export XCAssets + Swift
├── ComparisonService/ # Comparaison de tokens
├── SuggestionService/ # Suggestions de remplacement
├── UsageService/ # Analyse d'utilisation
├── HistoryService/ # Gestion de l'historique
└── LoggingService/ # Logging OSLog centralisé
Chaque feature suit une structure cohérente :
Feature/
├── FeatureName.swift # State + Actions + Reducer
├── FeatureName+View.swift # Vue SwiftUI avec @ViewAction
└── Actions/
├── FeatureName+ViewActions.swift # Actions utilisateur
├── FeatureName+InternalActions.swift # Résultats async
└── FeatureName+AnalyticsActions.swift # Logging séparé
enum Action: BindableAction, ViewAction {
case binding(BindingAction<State>)
case analytics(Analytics) // Logging séparé
case `internal`(Internal) // Résultats async
case view(View) // Actions utilisateur
case delegate(Delegate) // Communication cross-feature
}L'application supporte des filtres persistants pour l'export :
- Tokens commençant par # : Exclut les tokens de type primitive
- Tokens finissant par _hover : Exclut les états hover
- Groupe Utility : Exclut le groupe utilitaire complet
# Lancer tous les tests
xcodebuild test -scheme ApertureTokensManager
# Tests disponibles (81 tests)
- FuzzyMatchingHelpersTests (24 tests)
- TokenUsageHelpersTests (18 tests)
- TokenHelpersTests (17 tests)
- SuggestionServiceTests (9 tests)
- ComparisonServiceTests (11 tests)L'application utilise Liquid Glass (macOS 26) :
.buttonStyle(.glass(.regular.tint(.blue)))pour les boutons.glassEffect()pour les conteneurs- Design moderne et cohérent avec macOS
Les contributions sont les bienvenues ! N'hésitez pas à :
- Ouvrir des issues pour signaler des bugs
- Proposer des améliorations
- Soumettre des pull requests
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
Made with ❤️ for designers and developers who believe in a better design-to-code workflow.