FigmaGen: Style Automation dans iOS App


Aujourd'hui, de nombreuses équipes systématisent la conception de leurs applications. Nous avons décidé d'aller plus loin et d'automatiser la synchronisation du code avec notre bibliothÚque de composants.


Le fait est qu'en hh, le service Figma bien connu est utilisé pour concevoir l'interface utilisateur, qui, parmi ses autres avantages, dispose d'une API ouverte. Et cela, à son tour, ouvre de grandes opportunités pour les développeurs, que nous avons décidé d'utiliser.


L'idée du projet FigmaGen est donc née - un outil qui synchronise le code avec la bibliothÚque de composants de Figma. Au début, cela ressemblait à une expérience spécifique à notre produit, mais une solution plus universelle s'est avérée, et dans cet article, nous partagerons les premiers fruits de notre développement.


Comment ça marche


Figma vous permet de crĂ©er une bibliothĂšque de composants et de styles qui peuvent ĂȘtre rĂ©utilisĂ©s globalement. IdĂ©alement, si ces composants sont regroupĂ©s et se trouvent dans un fichier sĂ©parĂ©, il sera plus facile pour les concepteurs de travailler avec eux, et les dĂ©veloppeurs recevront une source unique de connaissances pour implĂ©menter ces entitĂ©s dans le code.


Nous avons préparé un petit fichier de démonstration dans Figma pour les styles, qui est disponible par référence et ressemble à ceci:



FigmaGen reçoit ces fichiers Figma Ă  l'aide de son API , puis il extrait toutes les donnĂ©es nĂ©cessaires et les restitue Ă  l'aide de modĂšles Stencil dans le code source. Toutes ces Ă©tapes peuvent ĂȘtre configurĂ©es dans le fichier de configuration, puis pour dĂ©marrer la gĂ©nĂ©ration, il vous suffit d'exĂ©cuter la commande:


figmagen generate 

Actuellement, FigmaGen prend en charge la gĂ©nĂ©ration de styles de couleur et de texte, qui peuvent en consĂ©quence ĂȘtre utilisĂ©s comme suit:


 titleLabel.attributedText = "Hello world".styled( .title2, textColor: Colors.imperial ) view.backgroundColor = Colors.whiteSmoke 

Tout le code gĂ©nĂ©rĂ© peut ĂȘtre facilement personnalisĂ© Ă  l'aide de ses propres modĂšles de gabarit. Par consĂ©quent, il n'y a aucune restriction sur les plates-formes, il suffit d'implĂ©menter un modĂšle pour la langue correspondante et d'indiquer le chemin d'accĂšs Ă  celui-ci dans la configuration. Un bonus supplĂ©mentaire est l'utilisation du framework StencilSwiftKit dans FigmaGen , qui ajoute des filtres et des balises utiles aux modĂšles.


L'installation


L'installation de FigmaGen est standard pour ces outils, et il existe plusieurs méthodes de base:


  • CocoaPods : ajoutez la ligne de pod 'FigmaGen' au Podfile et exĂ©cutez la commande pod install --repo-update .
  • Homebrew : exĂ©cutez la commande brew install hhru/tap/FigmaGen .
  • TĂ©lĂ©chargez et dĂ©compressez manuellement l'archive zip de la derniĂšre version du rĂ©fĂ©rentiel .

Dans le cas d'une installation à l'aide de CocoaPods, la commande de génération doit inclure le chemin d'accÚs au Pods/FigmaGen :


 Pods/FigmaGen/figmagen generate 

L'installation à l'aide de CocoaPods est la méthode recommandée, car elle vous permet de corriger la version de FigmaGen sur toutes les machines de l'équipe.

La configuration


Pour configurer FigmaGen, vous devez créer le fichier .figmagen.yml dans le dossier racine du projet. Si nécessaire, vous pouvez spécifier un chemin différent dans le paramÚtre --config de la commande de génération, par exemple:


 figmagen generate --config 'MyFolder/figmagen.yml' 

Le fichier de configuration lui-mĂȘme est au format YAML et est divisĂ© en plusieurs sections:


  • base : paramĂštres de base applicables Ă  toutes les autres sections. Tout paramĂštre de cette section peut ĂȘtre remplacĂ© pour configurer la sous-commande de gĂ©nĂ©ration elle-mĂȘme.
  • colors : options pour la sous-commande de gĂ©nĂ©ration de couleurs.
  • textStyles : options pour la sous-commande de gĂ©nĂ©ration de style de texte.

Cependant, si une section de la sous-commande de génération manque dans la configuration, cette sous-commande sera ignorée.


ParamĂštres de base


Afin de ne pas dupliquer certains champs dans la configuration, nous les avons sélectionnés dans une section de base distincte, qui contient les paramÚtres pertinents pour chaque sous-commande de génération:


  • accessToken : chaĂźne avec jeton d'accĂšs Figma.
  • fileKey : ligne avec l'identifiant de fichier Figma.

Ces paramÚtres sont utilisés par les sous-commandes de génération pour lesquelles ils ne sont pas définis, par exemple:


 base: accessToken: 27482-71b3313c-0e88-481b-8c93-0e465ab8a868 colors: fileKey: ZvsRf99Ik11qS4PjS6MAFc textStyles: fileKey: D1rfFI220qwaG8fD8iBqWa 

Dans ce cas, les couleurs et les styles de texte seront gĂ©nĂ©rĂ©s Ă  partir de diffĂ©rents fichiers Figma, mais en utilisant le mĂȘme jeton d'accĂšs.


Jeton d'accĂšs


Pour recevoir le fichier Figma, une autorisation est requise, qui s'effectue en transfĂ©rant un jeton d'accĂšs personnel. Un tel jeton peut ĂȘtre crĂ©Ă© en quelques Ă©tapes simples:


  • Ouvrez les paramĂštres du compte dans Figma.
  • Cliquez sur le bouton "CrĂ©er un nouveau jeton d'accĂšs personnel" dans la section "Jetons d'accĂšs personnels".
  • Saisissez une description du jeton en cours de crĂ©ation (par exemple, «FigmaGen»).
  • Copiez le jeton crĂ©Ă© dans le presse-papiers.


Ensuite, vous devez insérer le jeton reçu dans le champ accessToken de la configuration. Si ce jeton permet d'accéder à tous les fichiers Figma qui apparaissent dans la configuration, alors il suffit de le définir uniquement dans la section de base .


Pour des raisons de sécurité, il est recommandé d'utiliser un jeton utilisateur spécialement créé qui dispose de droits en lecture seule sur le fichier Figma.

Fichiers Figma


FigmaGen demande le fichier Figma par son identifiant standard, qui peut ĂȘtre obtenu Ă  partir de l'URL dans la barre d'adresse du navigateur.



En général, cette URL a le format suivant:


 https://www.figma.com/file/<>/<>?node-id=<  > 

AprĂšs avoir reçu l'identifiant du fichier, il doit ĂȘtre spĂ©cifiĂ© dans le champ fileKey de la configuration. Semblable Ă  un jeton d'accĂšs, si pour toutes les sous-commandes de gĂ©nĂ©ration un seul fichier est utilisĂ©, vous pouvez dĂ©terminer l'identifiant uniquement dans la section de base .


ParamÚtres de génération


En plus des paramÚtres de base, pour chaque sous-commande de génération, il est nécessaire de déterminer les paramÚtres suivants:


  • destinationPath : chemin pour enregistrer le fichier gĂ©nĂ©rĂ©.
  • templatePath : chemin d'accĂšs au fichier de modĂšle de gabarit. Si le paramĂštre est omis, le modĂšle standard sera utilisĂ©.
  • includingNodes : identifiants de trame Ă  utiliser lors de la gĂ©nĂ©ration du code. Si ce paramĂštre est omis, tous les nƓuds du fichier seront utilisĂ©s.
  • excludingNodes : identifiants des trames Ă  ignorer lors de la gĂ©nĂ©ration du code. Si ce paramĂštre est omis, toutes les trames de fichier spĂ©cifiĂ©es dans le champ includingNodes seront utilisĂ©es.

Par exemple, les paramĂštres de gĂ©nĂ©ration des styles de texte peuvent ĂȘtre les suivants:


 textStyles: destinationPath: Sources/Generated/TextStyle.swift templatePath: Templates/TextStyles.stencil includingNodes: - 7:24 - 3:19 ... 

Avec cette configuration, seuls les styles de texte générés qui sont dans des cadres avec des identificateurs "7:24" et "3:19" seront générés.


Filtrage des nƓuds


Notre bibliothĂšque de projets contient des composants spĂ©cifiques Ă  des plateformes spĂ©cifiques. Par exemple, la police est diffĂ©rente dans les styles de texte: dans iOS, c'est San Francisco , et dans Android, c'est Roboto . Afin de ne pas gĂ©nĂ©rer de code supplĂ©mentaire, le filtrage de ces styles est nĂ©cessaire, mais, hĂ©las, les outils Figma standard ne suffisent pas ici, et nous avons envisagĂ© quelques options pour sa mise en Ɠuvre:


  • SystĂ©matisation des noms de styles et de composants: dans ce cas, le nom de chaque Ă©lĂ©ment contiendrait des mĂ©ta-informations, qui ont Ă©tĂ© traitĂ©es en consĂ©quence dans FigmaGen.
  • Filtrage par identifiants de trame: tous les styles sont regroupĂ©s en trames distinctes par type et par plate-forme, et les identifiants de ces trames sont fixĂ©s dans la configuration FigmaGen.

À ce stade, nous avons choisi la deuxiĂšme mĂ©thode, car nous ne voulions pas changer les processus de l'Ă©quipe de conception pour l'automatisation du cĂŽtĂ© du dĂ©veloppement. Ainsi, dans les paramĂštres includingNodes et excludingNodes vous pouvez rĂ©pertorier les identificateurs de trame, qui doivent ĂȘtre inclus ou exclus, respectivement, pour les sous-commandes de gĂ©nĂ©ration.


Vous pouvez Ă©galement utiliser la barre d'adresse du navigateur pour obtenir les identifiants eux-mĂȘmes. Pour ce faire, sĂ©lectionnez la trame souhaitĂ©e dans Figma, et l'URL aura son identifiant dans la valeur du paramĂštre node-id . Les identifiants blindĂ©s et non blindĂ©s peuvent ĂȘtre insĂ©rĂ©s dans la configuration.



Peut-ĂȘtre, pour la mise en Ɠuvre de la nouvelle fonctionnalitĂ©, le filtrage des trames par leurs identifiants sera encore insuffisant pour nous. Dans ce cas, nous Ă©tendrons certainement les capacitĂ©s de FigmaGen si Ă  ce moment une solution standard de Figma n'apparaĂźt pas, par exemple, sous la forme de balises pour les composants.


Génération


Dans un rĂ©fĂ©rentiel sĂ©parĂ©, il y a un projet de dĂ©monstration prĂȘt pour la bataille, vous pouvez le tĂ©lĂ©charger et n'hĂ©sitez pas Ă  l'expĂ©rimenter. Dans ce document, FigmaGen est installĂ© Ă  l'aide de CocoaPods, vous devez donc d'abord exĂ©cuter la commande pod install . Pour plus de commoditĂ©, un appel Ă  la commande de gĂ©nĂ©ration a Ă©tĂ© ajoutĂ© Ă  la phase de gĂ©nĂ©ration et chaque exĂ©cution met Ă  jour tous les fichiers gĂ©nĂ©rĂ©s.


AprÚs avoir joué avec le code des styles de la bibliothÚque de démonstration , vous pouvez copier son fichier sur votre compte Figma en cliquant sur le bouton "Dupliquer sur vos brouillons".



Cela vous permettra de modifier les styles et de mieux comprendre comment leur code est généré. Il vous suffit de reconfigurer FigmaGen en spécifiant les données du nouveau fichier.


En outre, le projet de dĂ©monstration est parfait comme terrain de jeu pour personnaliser les modĂšles de gabarits situĂ©s dans le dossier ModĂšles. Vous pouvez les modifier directement dans Xcode et vĂ©rifier l'exactitude des modĂšles eux-mĂȘmes et du code qu'ils gĂ©nĂšrent en une seule exĂ©cution de la construction du projet.


Intégration de projet


Il est recommandé d'exécuter divers outils de génération de code ( SwiftGen , R.Swift ) dans la phase de construction du projet, car ils utilisent des ressources locales qui peuvent changer pendant le développement. Dans ce cas, une telle intégration garantit que le code le plus récent pénÚtre toujours dans l'assembly.


FigmaGen n'utilise pas de ressources locales, toutes les donnĂ©es pour la gĂ©nĂ©ration sont dans Figma, par consĂ©quent, cela n'a aucun sens de l'appeler pour chaque assemblage. Il est prĂ©fĂ©rable de gĂ©nĂ©rer du code une fois et de le mettre Ă  jour pĂ©riodiquement lorsque de nouvelles versions de la bibliothĂšque de composants apparaissent, ou lors de la mise Ă  jour de la version de FigmaGen elle-mĂȘme.


Maintenant dans notre projet, le dĂ©veloppeur en service est engagĂ© dans la mise Ă  jour du code gĂ©nĂ©rĂ©. Dans les prochaines versions de FigmaGen, il est prĂ©vu d'ajouter la prise en charge de la gestion des versions des fichiers Figma, puis il sera peut-ĂȘtre possible d'automatiser cette procĂ©dure, mais c'est une tout autre histoire.



Pour résumer


Ce ne sont que nos premiÚres étapes vers la création d'un outil puissant qui permettra aux développeurs d'automatiser autant que possible l'ensemble de la routine associée au systÚme de conception.


La partie la plus difficile du projet est terminĂ©e: l'architecture est dĂ©finie, les principaux nƓuds rĂ©utilisĂ©s sont formĂ©s et l'infrastructure est configurĂ©e. Cela nous permet d'augmenter rapidement la nouvelle fonctionnalitĂ© FigmaGen, et nous avons encore beaucoup de plans intĂ©ressants:


  • versionner des fichiers Figma
  • automatisation d'image
  • prise en charge des thĂšmes clairs et sombres
  • gĂ©nĂ©ration de code pour les dĂ©gradĂ©s, les ombres, les traits, etc.

Et pour sûr, de nouvelles versions avec ces fonctionnalités apparaßtront trÚs bientÎt, restez à l'écoute dans le référentiel FigmaGen.


C’est tout. Nous apprĂ©cions les commentaires dans les commentaires. Salut!

Source: https://habr.com/ru/post/fr478542/


All Articles