Créer un modèle de projet Xcode

Bonjour à tous, je suis Vanya - développeur iOS. Dans cet article, je vais vous expliquer comment créer des modèles de projet Xcode et comment ils ont permis de gagner du temps au début du projet.



Les développeurs iOS disposent désormais de nombreux outils pour automatiser les actions de routine. Dans Surf, nous utilisons Generamba, Fastlane, SwiftGen, SwiftLint, Jenkins. Et constamment à la recherche de moyens d'automatiser autre chose. Et si auparavant, nous avions consacré 1 à 2 jours à l'initialisation d'un nouveau projet, maintenant cela ne prend plus que 4 heures.


De quoi avez-vous besoin pour commencer à développer un grand projet?

1. Créez un référentiel.
- Configurer les droits d'accès;
- Configurer les notifications dans les développeurs de chat.


2. Créez un projet.
- Créer une structure de dossiers;
- Ajoutez divers fichiers auxiliaires comme toutes vos extensions préférées;
- Configurer CI / CD;
- Ajouter divers linter et générateurs (Generamba / SwiftLint / SwiftGen);
- resserrer la dépendance;
- ...
Après 1-2 jours de travail, vous pouvez commencer un développement à part entière.


De toute évidence, la plupart de ces étapes peuvent être automatisées. Parmi les options possibles, il y avait:
- XcodeGen;
- Modèles de projets Xcode;
- Projet Xcode de base.

Xcodegen

+ Vous permet de générer .xcodeproj à la volée en utilisant le fichier de configuration, ce qui ajoute la possibilité de se débarrasser des conflits dans le fichier de projet.
- Utilisé en conjonction avec d'autres scripts, car il ne fonctionne qu'avec le fichier de projet, sans affecter le reste des fichiers.

Modèles de projet Xcode

+ Vous pouvez générer .xcodeproj avec tous les paramètres, ainsi que tout autre fichier supplémentaire.
- Il n'y a pas de documentation officielle complète et de description des modèles en XML.

Projet Xcode de base

+ Configurez rapidement et immédiatement avec tous les fichiers et dépendances nécessaires.
- Remodeler pour un projet spécifique pendant longtemps. Et vous pouvez accidentellement sauter une étape et vous tirer une balle dans le pied.

En conséquence, nous avons opté pour l'utilisation de projets Xcode, ce qui nous a permis d'optimiser le processus et de réduire le temps de création d'un projet. Le projet Xcode de base semblait être une béquille, et nous n'avons pas besoin de la flexibilité que les scripts personnalisés apportent.


Modèles de projet Xcode


Comme je l'ai écrit ci-dessus, en utilisant des modèles Xcode, vous pouvez créer des projets iOS / macOS / tvOS / watchOS / multiplateforme et ajouter des fichiers et des paramètres. Le problème est qu'Apple ne fournit aucune documentation à ce sujet. Tout cela - quelques petits tutoriels et des exemples de différents passionnés, j'ai utilisé ce wiki.

Ce qui est hors de la boîte
Les modèles d'application IOS sont ici:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/

et pour les applications MacOS ici:
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates/Mac/

Les modèles de projet sont représentés par des fichiers .plist ordinaires. Voici à quoi ressemble l'application Single View familière.



Chaque modèle a un nom unique - "Identifiant", les modèles d'Apple ont le préfixe com.apple.dt.unit.
Les ancêtres sont les parents du modèle actuel. Les modèles prennent en charge l'héritage multiple, c'est-à-dire que l'application à vue unique hérite des propriétés de l'application Storyboard et de l'application Core Data Cocoa Touch.

Voici à quoi ressemble la hiérarchie des applications de vue unique.



Créez votre propre modèle

Les modèles personnalisés sont mieux ajoutés à la bibliothèque locale ~ / Library / Developer / Xcode / Templates, nous ne les perdrons donc pas lors de la mise à jour de Xcode. S'il n'y a pas un tel répertoire, créez-le.

J'ai préparé un petit modèle qui sera ajouté à notre projet Podfile avec des dépendances prédéfinies.

Code de modèle préparé
 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Kind</key> <string>Xcode.Xcode3.ProjectTemplateUnitKind</string> <key>Identifier</key> <string>ru.surfstudio.dt.unit.customTemplate</string> <key>Ancestors</key> <array> <string>com.apple.dt.unit.singleViewApplication</string> </array> <key>Concrete</key> <true/> <key>Description</key> <string></string> <key>Definitions</key> <dict> <key>../Podfile</key> <string>platform :ios, '11.0' pod 'Alamofire' pod 'Crashlytics' pod 'Fabric' </string> </dict> <key>Nodes</key> <array> <string>../Podfile</string> </array> </dict> </plist> 


Ici, nous avons créé la section Définitions, qui contiendra des variables et des fichiers qui peuvent être ajoutés au projet. Là et ajouté la clé Podfile. La clé indique le fichier que nous créons ou éditons. Après la clé, définissez la ligne qui sera écrite dans ce fichier. Au lieu d'écrire des lignes manuellement, nous nous référons aux fichiers du répertoire avec le modèle et les prenons à partir de là.

Prenez maintenant ce code et placez-le dans un fichier appelé TemplateInfo.plist dans le dossier CustomTemplate.xctemplate du répertoire des modèles.

Voyons ce que nous avons. Si tout s'est déroulé comme prévu, alors lors de la création d'un projet dans Xcode (Fichier-> Nouveau-> Projet (⇧⌘N)), nous verrons une nouvelle section Modèles et en elle notre nouveau modèle "CustomTemplate".



Nous le sélectionnons et créons un projet. Après la création, Prodfile sera ajouté, selon nos besoins.



Nous pompons sur le modèle

Ajoutons la génération Readme pour notre projet. Essayons maintenant de l'ajouter immédiatement avec un fichier, et de ne pas le décrire à l'intérieur du modèle.

Alors, ajoutez le fichier README.md dans notre CustomTemplate.xctemplate et le voici:

 # ___PROJECTNAME___ Description of my project 


Pour que notre modèle puisse ajouter un fichier à la section Nodes, vous devez ajouter:

 <string>../README.md</string> 


De plus, à l'intérieur de la section Définitions, ajoutez:

 <key>../README.md</key> <dict> <key>Path</key> <string>README.md</string> </dict> 

Le code du modèle complet ressemble maintenant à ceci
 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Kind</key> <string>Xcode.Xcode3.ProjectTemplateUnitKind</string> <key>Identifier</key> <string>ru.surfstudio.dt.unit.customTemplate</string> <key>Ancestors</key> <array> <string>com.apple.dt.unit.singleViewApplication</string> </array> <key>Concrete</key> <true/> <key>Description</key> <string></string> <key>Definitions</key> <dict> <key>../Podfile</key> <string> platform :ios, '11.0' pod 'Alamofire' pod 'Crashlytics' pod 'Fabric' </string> <key>../README.md</key> <dict> <key>Path</key> <string>README.md</string> </dict> </dict> <key>Nodes</key> <array> <string>../Podfile</string> <string>../README.md</string> </array> </dict> </plist> 


Vérifions ce qui en est sorti.
Essayons à nouveau de créer un projet à l'aide de notre CustomTemplate, et à la fin nous verrons que le fichier Readme a été ajouté au projet:



Les personnes attentives ont remarqué que dans README.md, nous avons ajouté ___PROJECTNAME___ à l'en-tête, et non «MyNewProject». ___PROJECTNAME___, il s'agit d'une constante prédéfinie que vous pouvez utiliser pour vos besoins.

Par exemple, afin de générer un en-tête pour un fichier avec du code, comme Xcode le fait habituellement pour nous, utilisez le modèle suivant:

 // // ___FILENAME___ // ___PACKAGENAME___ // // Created by ___FULLUSERNAME___ on ___DATE___. //___COPYRIGHT___ // 

Vous trouverez plus d'informations sur les constantes disponibles ici .

Conclusion


Aujourd'hui, nous avons appris à créer des modèles de projet simples. Nous avons maintenant un modèle qui peut ajouter des fichiers Podfile et README à notre projet.

Si vous souhaitez suivre nos traces et réduire le temps de création d'un projet, je vous recommande:

1. Choisissez la bonne solution.
En plus des modèles Xcode, il y en a d'autres: XcodeGen ou le projet de base. Dans tous les cas, avant de choisir un outil, étudiez les avantages et les inconvénients et choisissez le bon.

2. Décrivez en détail les étapes nécessaires pour créer un projet type. Les projets ne sont pas lancés très souvent, vous pouvez donc oublier certaines étapes.

3. Essayez d'automatiser les étapes à partir du point n ° 2.
Par exemple, certains d'entre eux doivent être transférés vers le modèle Xcode et d'autres vers des scripts à appeler après la création du projet.

Informations utiles: un article de synthèse sur les modèles et des quais sur les modèles

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


All Articles