Si vous avez suivi les précédents articles, vous avez pu apercevoir que je me suis positionné sur une méthode bien particulière de développement de mes applications iOS.
En effet, je n’utilise pas de storyboards, j’utilise Snapkit pour créer et gérer mes contraintes et pour construires mes interfaces utilisateurs grâce au code, j’utilise SwiftLint pour suivre des règles de développement et ainsi m’assurer d’avoir un code propre et lisible, j’ai créer des extensions utiles qui me suivent de projet en projet, bref, tant de choses que je dois faire et refaire à chaque nouveau projet.
Aujourd’hui, je vais vous montrez comment j’ai créer un template d’applications sur Github afin de le réutiliser tout le temps dans le but d’éviter de répéter sans cesse les mêmes actions.
La création du projet
Je vais commencer par créer un projet Xcode tout ce qu’il y a de plus banal que je vais nommer SwiftTemplate
et retirer le storyboard principal comme je vous l’ai montré dans un précédent article (Démarrer un projet sans storyboard).
Les Pods
Depuis un terminal, je vais à présent créer un Podfile
pour nos futurs Pods avec la commande suivante:
pod init
Ensuite je vais ajouter les Pods Snapkit (voir les librairies pour des meilleures contraintes) et SwiftLint en ajoutant les lignes suivantes dans mon Podfile
`
pod 'SnapKit'
pod 'SwiftLint'
Et je les installe avec la commande suivante:
pod install
Les Pods sont maintenant installés.
Configuration de SwiftLint
Je vais maintenant définir mes règles SwiftLint afin de conserver un code lisible et propre, je configure alors mon fichier comme il suit:
excluded:
- Pods
line_length: 130
nesting:
type_level:
warning: 3
Vous pouvez voir que je mets par défaut assez peu de règles car celles configurées par défaut par SwiftLint me conviennent parfaitement. J’ajouterai peut-être des exceptions concernant certains noms de variables par la suite (voir les bonnes pratiques en Swift).
Configuration des git hooks
Pour résumer simplement, les git hooks sont des actions qui peuvent être réalisées en fonctions des actions git. Par exemple, on peut executer un script shell à chaque fois que quelqu’un commit quelque chose.
Dans mon cas, j’aimerai forcer SwiftLint à vérifier que je n’ai pas commis d’erreur avant chaque commit.
Pour ce faire, je créer un fichier nommé pre-commit
et le placer dans le dossier .git/hooks
.
Ne pas oublier de lui donner les droits d’excution avec la commande
chmod
Ce fichier étant générique je ne vais pas posté son contenu ici, vous pourrez le retrouver à la fin de cet article.
Configuration du .gitignore
Pour les non-initiés, le fichier .gitignore
permet de préciser les fichiers qui ne devront pas être push sur le repo git. J’utilise personnellement un template de .gitignore
proposé par Github que je modifie à ma guise (Notamment pour le dossier Pods, voir Faut-il push le dossier Pods) que vous pouvez retrouver ici.
Les extensions
Je vais maintenant ajouter les extensions que j’utilise régulièrement dans mon projet (voir quelques extensions Swift utiles), et je vais en profiter pour créer une belle arborescence de fichiers que vous verrez par la suite.
Le template
Notre projet est maintenant basique, mais fonctionnel, nous avons mis ensemble les bases qui pourront servir à tous nos nouveaux projets.
Je vais maitenant vous montrez comment créer un template sur Github.
Pour ce faire, nous allons nous rendre dans les paramètres du repo et de cocher la case Template repository
située sous le nom du repo (voir Creating a template repository).
La fin ?
Parfait, notre repo template est maintenant terminé, un bouton Use this template
est maintenant apparu à côté du bouton Clone
sur la page de notre repo, mais est-ce finit pour autant ?
Et bien la réponse est.. oui et non. Oui parce que vis-à-vis du template nous n’avons plus rien à faire. Non parce que lorsqu’un utilisateur va vouloir utiliser ce template, il va se retrouver avec un beau projet tout propre, mais nommé SwiftTemplate
, et ça c’est par forcément l’idéal..
Le setup
L’utilisateur aura donc deux choix, soit il va devoir renommer tous les endroits où il est mentionné SwiftTemplate
, soit il utilisera un script, un script que j’ai donc du créer.
Je ne vais pas poster le code du script ici car cela n’est pas très important, mais je vais vous résumer tout ce que celui-ci effectue.
Le script s’execute de la manière suivante:
./setup.swift LeNomDuProjetQueLonSouhaite
-
Il va commencer par vérifier que toutes les dépendances nécéssaires sont installés sur l’ordinateur de l’utilisateur, comme Cocoapods par exemple.
-
Supprimer le dossier Pods, car ceux-ci sont générés en fonction du nom du projet, et comme nous allons le renommer, nous les génererons plus tard.
-
Il va ensuite renommer tous les fichiers contenant
SwiftTemplate
, en remplaçantSwiftTemplate
par le nom désiré. -
Par la suite il va remplacer les occurences de
SwiftTemplate
par le nom du projet à l’intérieur de tous les fichiers. -
Il va ensuite procéder à la réinstallation des Pods.
-
Il va remettre en place les
git hooks
sur le repo actuel. -
Ensuite, le script va ouvrir le projet dans Xcode.
-
Pour finir, le script va s’auto-détruire et se supprimer lui-même.
Et voilà !
Conclusion
Tout est terminé, maintenant, dès que je voudrai créer un nouveau projet, je n’aurai que deux petites étapes à effectuer:
-
Cliquer sur le bouton
Use this template
-
Lancer le script
setup.swift
Et c’est tout, un gain de temps considérable !
Pour ceux d’entre vous qui seraient interéssés, vous pouvez retrouver le template ici.
C’est tout pour aujourd’hui. J’ajouterai que j’aimerai beaucoup que Github permette d’éxecuter un script juste après qu’un utilisateur appuie sur Use this template
afin que tout se fasse de manière automatique et d’éviter à l’utilisateur de lancer manuellement notre script.