Gestion des pods privés avec CocoaPods

La plupart d'entre nous utilisons quotidiennement des bibliothèques open source. Avec CocoaPods, la gestion des dépendances dans un projet Cocoa est pratiquement indolore. Dans certaines situations, cependant, un projet dépend d'une bibliothèque ou d'un framework qui est une source fermée, non accessible au public. Vous pouvez toujours utiliser CocoaPods dans de telles situations. CocoaPods fonctionne très bien pour les bibliothèques open source et fermées.

Pour que cela fonctionne, vous devez créer un référentiel de spécifications privé. Une fois que vous en avez configuré un, vous ne remarquez même pas la différence entre les dépendances publiques et privées, car CocoaPods s’occupe des détails les plus importants pour vous. Dans ce tutoriel, vous apprendrez à configurer un référentiel de spécifications privé pour gérer des bibliothèques privées..

1. Introduction

Si vous avez uniquement utilisé CocoaPods pour la gestion de pods publics, vous ne savez peut-être pas que CocoaPods peut gérer plusieurs référentiels de spécifications. Si aucun référentiel de spécifications n'est spécifié dans le projet Podfile, CocoaPods revient au référentiel de spécifications maître.

Si vous spécifiez une dépendance dans le projet Podfile, CocoaPods recherche par défaut dans le référentiel de spécifications maître. Jetez un coup d'œil aux deux exemples suivants. Les deux exemples génèrent le même résultat. La différence est que nous spécifions explicitement la source du référentiel de spécifications dans la seconde Podfile.

plate-forme: ios, '8.0' cible 'Testing' do pod 'AFNetworking', '2.6.0' pod 'SVProgressHUD', '~> 1.1' fin
source 'https://github.com/CocoaPods/Specs.git' plateforme: ios, cible '8.0' 'Test' du pod 'AFNetworking', du pod '2.6.0' de 'SVProgressHUD', '~> 1.1' fin

Si vous n'avez jamais créé ou contribué à un pod, vous vous demandez peut-être ce qu'est un référentiel de spécifications? Un référentiel de spécifications n’est rien de plus qu’un référentiel contenant une collection de spécifications de pod, des fichiers avec .podspec ou .podspec.json extension.

Comme son nom l'indique, le référentiel de spécifications ne contient pas les fichiers source des pods. Vous pouvez parcourir le référentiel de spécifications de base de CocoaPods sur GitHub. Si CocoaPods est installé sur votre ordinateur, une copie du référentiel de spécifications principal est déjà présente sur votre ordinateur..

Au cours du processus d'installation, CocoaPods clone le référentiel de spécifications principales dans votre dossier personnel. Vous pouvez le trouver à ~ / .cocoapods / repos / master.

2. Créer un référentiel de spécifications

J'utilise généralement GitHub pour l'hébergement de référentiels Git, c'est donc la plate-forme que j'utiliserai pour ce tutoriel. Peu importe où vous hébergez le référentiel de spécifications tant qu'il est accessible à tous les membres de votre équipe..

Vous pouvez créer un compte gratuit GitHub, mais gardez à l'esprit que vous ne pouvez créer que des référentiels publics avec un compte gratuit. Si vous souhaitez ouvrir une bibliothèque sur une bibliothèque, il est recommandé de publier la spécification du pod dans le référentiel des spécifications principal, qui est géré par l'équipe CocoaPods. Vous ne gagnez rien en créant un référentiel de spécifications public séparé.

La première chose à faire est de créer un référentiel privé sur GitHub pour les spécifications privées que nous allons ajouter plus tard. J'ai nommé le mien tutspods. GitHub suggérera de cloner le référentiel sur votre machine, mais ce n'est pas nécessaire. CocoaPods clone le référentiel de spécifications pour vous une fois que vous l'avez ajouté à CocoaPods. C'est ce que nous ferons à l'étape suivante.

3. Ajouter le référentiel à CocoaPods

La prochaine étape consiste à informer CocoaPods du référentiel de spécifications que nous venons de créer. Vous faites cela en exécutant la commande suivante à partir de la ligne de commande.

pod repo ajouter des tutspods https://github.com/bartjacobs/tutspods.git

Vous remarquerez peut-être que la commande est similaire à l’ajout d’une télécommande à un référentiel Git. Assurez-vous de vous rappeler le nom que vous donnez au référentiel de spécifications, tutspods dans ce cas. Nous en aurons besoin un peu plus tard.

Chaque fois que vous ajoutez un référentiel de spécifications, CocoaPods le clone sur votre ordinateur. Vous pouvez le vérifier en allant à ~ / .cocoapods / repos. Le répertoire doit maintenant contenir deux référentiels de spécifications, le maîtriser référentiel de spécifications et le tutspods référentiel de spécifications. En dehors d'un .git dossier, le tutspods le répertoire est vide car nous n'avons pas encore ajouté de spécifications.

4. Créer un pod privé

Il n'y a pas si longtemps, Andy Obusek a écrit un excellent tutoriel sur la création de votre premier pod. Si vous n'avez jamais créé de pod public ou privé, je vous recommande de lire d'abord l'article d'Andy. Je ne répéterai pas ce qu'Andy a écrit dans ce tutoriel.

Par exemple, j'ai créé une petite bibliothèque, TSPTableView, qui contient une spéciale UITableView sous-classe. Pour créer une spécification de pod pour la bibliothèque, exécutez la commande suivante à la racine de la bibliothèque..

pod créer spec TSPTableView

En exécutant la commande ci-dessus, CocoaPods crée un fichier nommé TSPTableView.podspec. Ouvrez le fichier dans un éditeur de texte et remplissez les champs obligatoires. Quand tu as fini, cours charpie pour valider la spécification de pod. Si les spécifications du pod ne passent pas la validation, vous ne pourrez pas les transférer dans le référentiel de spécifications..

5. Transférer la spécification dans le référentiel de spécifications

Si la spécification du pod réussit la validation, il est temps de l'installer dans le référentiel de spécifications privé que vous avez créé précédemment. Vous faites cela en exécutant la commande suivante à partir de la ligne de commande.

pod repo push tutspods TSPTableView.podspec

Il est essentiel que vous utilisiez le même nom que vous avez précédemment utilisé pour ajouter le référentiel de spécifications privé à CocoaPods. Le dernier argument est le chemin d'accès aux spécifications du pod que vous insérez dans le référentiel de spécifications.

6. Utilisation du pod privé

Nous pouvons maintenant utiliser TSPTableView dans un nouveau projet. Créez un projet dans Xcode et ajoutez un Podfile à la racine du projet en exécutant pod init à partir de la ligne de commande. C'est ce que le Podfile pourrait ressembler quand vous avez fini.

plateforme: ios, '8.0' cible 'MyAmazingApp' do pod 'TSPView' fin

Courir installation de pod depuis la ligne de commande pour installer les dépendances répertoriées dans le projet Podfile. Avez-vous également rencontré un problème? Je vois l'erreur suivante.

installation du pod Mise à jour des référentiels de spécifications locales Analyse des dépendances [!] Impossible de trouver une spécification pour 'TSPTableView'

La sortie nous indique que CocoaPods met d'abord à jour les référentiels de spécifications locaux. Cela signifie que les référentiels de la ~ / .cocoapods / repos répertoire sont mis à jour, en prenant en compte les modifications.

CocoaPods fait cela pour s'assurer qu'il dispose de la dernière version des spécifications stockées dans les référentiels. Si on regarde le ~ / .cocoapods / repos / tutspods répertoire, nous pouvons voir que la spécification de pod pour le TSPTableView pod est là comme on s'y attendait. Pourquoi CocoaPods ne trouve-t-il pas la spécification de pod pour TSPTableView?

La solution est simple Au sommet de la Podfile, nous devons spécifier les référentiels de spécifications que CocoaPods cherche pour résoudre les dépendances répertoriées dans le projet. Podfile. C'est ce que le Podfile devrait ressembler à remédier à notre problème.

source 'https://github.com/bartjacobs/tutspods.git' source 'https://github.com/CocoaPods/Specs.git' plateforme: fin, ios, '8.0' cible 'MyAmazingApp' do pod 'TSPTableView'

Courir installation de pod une fois de plus pour installer les dépendances listées dans le projet Podfile. La commande doit maintenant se terminer correctement, comme indiqué ci-dessous. J'utilise actuellement CocoaPods 0.38.2 de sorte que la sortie peut être légèrement différente si vous utilisez une version différente de CocoaPods.

installation du pod Mise à jour des référentiels de spécifications locales Analyse des dépendances Téléchargement des dépendances Installation de TSPTableView (0.0.1) Génération du projet de pods Intégration du projet client [!] Veuillez fermer toutes les sessions Xcode en cours et utiliser "MyAmazingApp.xcworkspace" pour ce projet à partir de maintenant..

Notez que l’ordre dans lequel vous listez les référentiels de spécifications dans Podfile est important. Par exemple, si vous avez créé un pod public, l'avez modifié et créé un pod privé pour le fork du même nom, vous aurez une collision de noms..

Ce n'est pas un problème pour CocoaPods, car il utilisera le premier pod qu'il peut trouver avec le nom spécifié. En général, vous devriez placer le référentiel de spécifications privées en haut pour vous assurer que CocoaPods effectue la recherche en premier, en revenant au référentiel de spécifications public si nécessaire..

Conclusion

CocoaPods est un excellent outil sans lequel je ne pourrais pas travailler. J'espère que ce tutoriel vous a montré à quel point CocoaPods est puissant et à quel point il est facile de créer et de gérer des pods privés avec CocoaPods.