Cocoapods
rhizomes
Membre
La gestion des dépendances, l'inclusion et le maintien de sources, librairies et "Frameworks" tiers, posent des problèmes délicats.
Pour les résoudre j'utilise le plus possible depuis quelques mois cocoapods.
Et vous, utilisez-vous cocoapods?
Pourriez-vous partager vos retours d'expérience ?
Pour les résoudre j'utilise le plus possible depuis quelques mois cocoapods.
Et vous, utilisez-vous cocoapods?
Pourriez-vous partager vos retours d'expérience ?
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
L'idée est qu'une appli iOS ou Mac OS a des dépendances, c'est à dire qu'elle utilise des bibliothèques tierces. Par exemple, si on crée une application client-serveur HTTP, on va sans doute utiliser AFNetworking. Une solution est d'aller sur le GitHub d'AFNetworking, le télécharger, le copier dans un répertoire près du projet Xcode, insérer les sources dans le projet et compiler.
Cette approche a deux problèmes:
Par ailleurs, AliGator te le dira, il vaut mieux créer un Workspace pour séparer les bibliothèques tierces du projet.
Voilà , pour le problème. Maintenant, pour la solution Cocoapods:
1) On crée un fichier texte dans le répertoire du projet Xcode, qui s'appelle Podfile et qui décrit les dépendances:
2) On tape
Et c'est tout!
Cocoapods va télécharger toutes les biblios, les ranger dans des répertoires, créer un workspace sous Xcode et le règler.
Par la suite, imaginons que tu veuilles passer à AFNetworking 1.2.0. Tu modifies le Podfile, puis tu tapes pod update, et c'est fait!
Il y a encore des avantages, par exemple, si ton projet est en ARC mais pas la bibliothèque, Cocoapods ajoutera tout seul les drapeaux -fno-objc-arc aux fichiers.
Le seul inconvénient est qu'il faut que quelqu'un ait préparé la biblio pour qu'elle soit listée sous Cocoapods et pour définir ses dépendances à elle.
Pour répondre à la question, je n'ai eu qu'un seul soucis lors d'un pod update. J'ai dû tout virer et refaire un pod install. Après, ça marchait nickel. Mon seul point d'inquiétude est sur son évolution quand arrivera Xcode 5 qui changera encore totalement les formats de fichiers et les concepts /cool.gif' class='bbc_emoticon' alt='8--)' />
J'en avais également parlé lors de ma présentation #12 aux CocoaHeads Rennes sur les workspaces et l'intégration de librairies tierces...
Mes librairies GitHub ont été misés sur CocoaPods par des utilisateurs à l'origine, car beaucoup voulait les utiliser avec CocoaPods (du coup je suis allé voir et depuis c'est moi qui les maintiens) et maintenant je suis contributeur du projet (voire issues 141 et 841) donc oui je suis ça de près, pour mes libs comme pour le projet.
Maintenant en pratique je n'utilise pas, pour les raisons que j'ai expliquées dans la présentation CocoaHeads, parce qu'avec les workspaces et des projets séparés pour chaque lib on maà®trise mieux l'intégration et c'est aussi simple qu'un glisser-déposer /wink.png' class='bbc_emoticon' alt=';)' />
Après avoir installé et configuré Cocoapods...
Vous créez un fichier Podfile de description des dépendances de votre projet exemple :
Vous tapez en ligne de commande : pod install'
Les librairies, sont installées xcode totalement configuré.
C'est le principe d'un gestionnaire de dépendances.
Mais sinon c'est super /smile.png' class='bbc_emoticon' alt=':)' />
Je n'en avais pas trouvé trace ... d'où ce sujet.
J'utilise les Workspaces & Librairies statiques & cie depuis longtemps, et cela n'est pas incompatible avec la notion de gestionnaire de dépendance au contraire même. Le problème de l'approche "workspace à la mano" c'est le suivi des mises à jours et des dépendances et configurations complexes.
Par contre je suis surpris de ce fonctionnement, car cela implique que toute nouvelle version d'un framework est forcément meilleure que l'ancienne. Vous faites donc du coup une confiance aveugle dans les tests réalisés par les développeurs/contributeurs des frameworks. Et les régressions ?
Je n'ai pas cette logique, je teste longuement un framework avant de décider de l'utiliser, et je le considère stable une fois inclus. Je ne décide donc de faire une mise à jour qu'en cas de besoins...
Il est tout à fait possible de fixer les versions.
Fixera la version de AFNetworking.
Déterminera qu'il convient d'utiliser une version supérieure ou égale à 1.1.0
Il suffira d'éxécuter : . gitSync.sh pour synchroniser le projet.
Cette approche fonctionne bien, il faut néanmoins importer les éventuels nouveaux fichiers dans le projet.
Elle permet par contre d'intégrer des "pull request" qui auraient été rejetées par le projet officiel.
Il est possible de faire pointer un "Podspec" vers le "clone local synchronisé".. la boucle est bouclée.
Moi je trouve ça trés génat, et meme dangereaux si le script intègre des pull request refusées.
Une autre solution que je te / vous propose également. La plupart des système de gestion de dépendance sont en général plutôt bien penser pour comme dit précédemment utilise une version X ou Y. Tellement bien penser que tu peut également spécifier un repo github, un commit.
Une lecture de la doc a cet endroit, montre qu'il est possible de spécifier un repo et donc un fork personnel d'un projet X ou Y.
http://docs.cocoapods.org/podfile.html#pod
Have Fun with it !