Mise à jour majeure de CocoaPods
AliGator
Membre, Modérateur
Bonjour à tous,
L'équipe CocoaPods (dont je fais maintenant partie) vient de sortir une mise à jour majeure (0.33.0) qui modifie pas mal de choses.
Entre autres, maintenant les podspecs publiés sur https://github.com/CocoaPods/Specs vont maintenant être associés chacun avec un (ou plusieurs) propriétaire(s) du podspec, et seul le(s) propriétaire(s) d'un podspec auront le droit de le modifier ou proposer de nouvelles versions.
La soumission d'un nouveau podspec (d'un nouveau Pod, ou d'une nouvelle version d'un Pod existant) ne se fera plus à l'aide d'une "Pull Request" sur le repo CocoaPods/Specs, mais via le terminal et la ligne de commande "pod trunk push".
Ainsi, tout un chacun pourra soumettre ses propres Pods sans être obligé de faire une Pull Request (et de polluer un peu les "issues" du repo GitHub et d'attendre qu'on ait le temps de valider ces Pull Requests).
--- POD EXISTANTS
Du coup si vous avez déjà publié vos propres Pods sur CocoaPods, je vous invite à réclamer leur propriété via ce formulaire. Plus de détails sur cet article dédié du Blog.
NB: Pendant cette période de transition, la soumission de nouveaux Pods est bloquée, le temps qu'on arrive à un état stable où tous les Pods ou presque ont été réclamés.
--- NOUVEAUX PODS
Ensuite dès qu'on aura redébloqué la soumission de nouveaux Pods, vous pourrez soumettre vous-même de nouveaux Pod ou de nouvelles versions de vos Pods existants via la commande "pod trunk push" (+ de détails dans cet article de blog).
---
NB : Tous ces changements ont également pour conséquence que les specs du repo CocoaPods/Specs vont être converties au format JSON lors de leur publication sur le repo. Cela ne devrait en rien impacter votre workflow habituel, mais étant donné que c'est un grand changement technique/interne de notre côté, il se peut que cela ait des effets de bord et introduise des bugs. Nous ne vous cachons pas qu'on s'attend à devoir publier une 0.33.1 voire une 0.33.2 dans les 24/48h vu le chantier qu'a été cette 0.33...)
L'équipe CocoaPods (dont je fais maintenant partie) vient de sortir une mise à jour majeure (0.33.0) qui modifie pas mal de choses.
Entre autres, maintenant les podspecs publiés sur https://github.com/CocoaPods/Specs vont maintenant être associés chacun avec un (ou plusieurs) propriétaire(s) du podspec, et seul le(s) propriétaire(s) d'un podspec auront le droit de le modifier ou proposer de nouvelles versions.
La soumission d'un nouveau podspec (d'un nouveau Pod, ou d'une nouvelle version d'un Pod existant) ne se fera plus à l'aide d'une "Pull Request" sur le repo CocoaPods/Specs, mais via le terminal et la ligne de commande "pod trunk push".
Ainsi, tout un chacun pourra soumettre ses propres Pods sans être obligé de faire une Pull Request (et de polluer un peu les "issues" du repo GitHub et d'attendre qu'on ait le temps de valider ces Pull Requests).
--- POD EXISTANTS
Du coup si vous avez déjà publié vos propres Pods sur CocoaPods, je vous invite à réclamer leur propriété via ce formulaire. Plus de détails sur cet article dédié du Blog.
NB: Pendant cette période de transition, la soumission de nouveaux Pods est bloquée, le temps qu'on arrive à un état stable où tous les Pods ou presque ont été réclamés.
--- NOUVEAUX PODS
Ensuite dès qu'on aura redébloqué la soumission de nouveaux Pods, vous pourrez soumettre vous-même de nouveaux Pod ou de nouvelles versions de vos Pods existants via la commande "pod trunk push" (+ de détails dans cet article de blog).
---
NB : Tous ces changements ont également pour conséquence que les specs du repo CocoaPods/Specs vont être converties au format JSON lors de leur publication sur le repo. Cela ne devrait en rien impacter votre workflow habituel, mais étant donné que c'est un grand changement technique/interne de notre côté, il se peut que cela ait des effets de bord et introduise des bugs. Nous ne vous cachons pas qu'on s'attend à devoir publier une 0.33.1 voire une 0.33.2 dans les 24/48h vu le chantier qu'a été cette 0.33...)
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
S'rait temps que j'm'y mette tiens à CocoaPod. Bon, ça attendra la rentrée.
Bon courage en tout cas.
Je me suis fait exactement la même réflexion en voyant le titre du topic.
ça a l'air plutôt pas mal même si j'ai pas pris le temps d'essayer d'en comprendre tous les tenant et aboutissants.
Bon courage pour la migration !
En bref, simplification d'imports de bibliothèques externes, gestion comme si elles étaient internes avec des imports en "<xxx/xxx.h> et surtout leurs mises à jours...
Si j'ai bien tout suivi...
Là , il s'agit surtout de rendre à César ce qui appartient à César, via de " l'authentification " d'auteurs, mais surtout pour sûrement éviter des abus d'updates foireux qui a dû avoir lieu par des personnes externes...
- Intégration facilité de bibliothèque tierces en effet comme mentionné par Larm
- Facilitation de leur Mà J également en effet
- Mais aussi (et limite *surtout*) gestion de dépendances.
1) Ainsi si tu trouves la lib A sympa, et qu'il se trouve que la lib A a besoin du framework système F (disons CoreData.framework) pour fonctionner, mais dépend aussi de 2 autres libs tierces B et C, alors CocoaPods va automatiquement t'installer dans ton projet la lib A, mais aussi la lib B et la lib C, et configurer ton projet pour qu'il importe automatiquement le framework F.
Fini les galères d'avoir à ajouter les frameworks qu'il faut
2) Plus fort encore, si la lib A dépend de la lib B en version 1.2 ou supérieur, et que la lib C dépend de la lib B en version 1.3 ou supérieur, CocoaPods va résoudre les dépendances et d'une part ne récupérer qu'une seule vois la lib B (ne pas intégrer 2x la lib B dans ton projet) mais en plus va voir qu'il faut qu'il prenne la version 1.3 de cette lib minimum pour être compatible à la fois avec A et C.
Bref, sans CocoaPods, tu vois le cauchemar que ça peut devenir que de résoudre toutes les dépendances entre tes libs, surtout si chaque lib dépend de versions différentes d'autres libs. Alors qu'avec CocoaPods il s'occupe de tout.
Et c'est surtout cet aspect "gestion de dépendances" + "gestion des versions sémantiques" qui est intéressant, ça t'évite de tout casser et d'y perdre dans les versions et dans quelle version de quelle lib tu utilises & co.
Ouais, conclusion : il faut que je m'y mette egalement :-)
Bravo pour le travail accompli par l'equipe de CocoaPods.
@Aligator
Une remarque : Pour les pod perso, on reste à une gestion type git j'imagine : à chaque nouvelle version, ajouter un dossier et le podspec dedans.
Une remarque-question : lors de la mà j, j'ai l'erreur (je l'ai déjà eue pour la 0.33) :
Apparemment, c'est dû à mavericks !! cf. http://stackoverflow.com/a/19958086/1670830
Ce lien contient aussi une solution à ce problème.
Je ne sais pas si sudo -s puis gem install cocoapods est équivalent à sudo gem install cocoapods
Donc si tu ne connaissais pas "pod push" et faisait tout à la main, c'est le moment de découvrir "pod repo push"
Donc le plus simple est d'utiliser "sudo" ("sudo gem install ...").
Tu pourrais aussi changer $GEM_HOME pour demander d'installer les Gems dans un autre répertoire que /Library/Ruby/Gems, mais plutôt un dans lequel tu as les droits (qui risque alors d'être un de tes répertoires persos, ce qui veut dire que la GEM ne serait installée que pour ton utilisateur et pas les autres...) mais il faudrait alors t'assurer que ce $GEM_HOME soit bien conservé entre 2 lancements de terminal... bref c'est plutôt une solution à conseiller pour ceux qui comprennent un peu comment marche le shell et le terminal " ce qui n'a pas forcément l'air d'être ton cas donc évitons de t'embrouiller)
Tout ça (répertoires système, utilisation de sudo pour avoir les droits admin temporairement, ...) sont des considérations qui sont génériques, venant d'UNIX, et ne sont pas directement liées avec CocoaPods, tu aurais le même problème avec une autre RubyGem, ou avec une autre commande qui cherche à installer des choses dans tes répertoires système.
---
Ce n'est pas du tout spécifique à Maverics d'ailleurs (ce que dit la réponse StackOverflow, c'est juste que depuis Maverics, Ruby a été mis à jour de 1.8.4 à 2.0.0, ce qui fait que les GEMS sont maintenant recherchées dans /Library/Ruby/Gems/2.0.0 et non plus dans /Library/Ruby/Gems/1.8.4. Donc si tu avais installé CocoaPods avant Maverics, à l'époque où tu utilisais Ruby 1.8.4, alors il aura été installé dans /Library/Ruby/Gems/1.8.4 et du coup si tu mets ensuite OSX à jour vers Maverics, Ruby 2.0.0 ne trouvera plus ces GEMS et il faudra que tu les réinstalles (ou que tu les déplaces du dossier 1.8.4 vers le dossier 2.0.0).
Mais avant Maverics et du temps de Ruby 1.8.4 il y avait exactement le même principe de permissions, /Library/Ruby/Gems étant un répertoire système, dans les 2 cas il a toujours fallu utiliser "sudo" pour pouvoir installer des choses dans les répertoires système.
Un beau projet, difficile et à vrai dire un support pas optimal.
En tout cas merci, j.espere et je pense que je profiterai bientôt de tous ces efforts.
Si tu as passé un temps fou à découper ton projet en pods, par contre ça ça sous-entend que le découpage de ton projet à la base avant même CocoaPods était mal fait et que ton projet était déjà un plat de spaghettis. Ce genre de symptôme est typique d'une architecture mal découpée et mal isolée (ne jamais oublier le principe d'encapsulation de la POO et de séparer les responsabilités de chaque classe, si toutes tes classes dépendent les unes des autres c'est sûr que tu auras du mal à faire des modules proprement indépendants )
---
Si tu as des questions n'hésite pas, on a mis à jour les guides il y a quelques temps (voir le travail de Michele) donc ça devrait être plus clair, mais même si pour un cas d'usage classique on peut s'y mettre en très peu de temps (installer CocoaPods, créer son Podfile, un pod install et boum c'est fini), il y a certainement encore pas mal à faire côté docs pour les newbies.
C'est vrai que pour commencer (pour qqun qui n'a jamais installé ni manipulé CocoaPods) le plus simple est quand même de comencer en tant qu'utilisateur/consommateur de pods (tu te crées un projet vite et tu fais juste un Podfile qui va lister des pods existants qui t'intéressent " comme AFNetworking, OHHTTPStubs, MagicalRecord, ... " et un "pod install" plus tard tu as un workspace tout prêt. Ca pour démarrer dans l'apprentissage de CocoaPods pour ceux qui n'ont jamais fait c'est nickel.
Et la création de tes propres Pods (plutôt que juste utiliser ceux existants sur le net comme AFNetworking & co) ça viendra sans doute plutôt dans un 2e temps, quand tu seras prêt à ne plus être juste un consommateur de pods mais aussi un producteur de pods, soit juste pour toi pour les garder pour tes projets persos, soit en les publiant carrément à la communauté pour que tout le monde en profiter. C'est pas bcp plus compliqué que d'être juste consommateur, mais c'est vrai que pour un nouveau venu sur CocoaPods, chaque chose en son temps
Ps : à la base je voulais créer mes propres pods en local, sans avoir besoin de faire un push vers un serveur. Je peux bien sur dans podfile faire référence à un projet en local, mais pour pouvoir profiter du versioning, j'ai l'impression qu'il faut gitter. ça a donc été l'occasion de créer des nouveaux repository, etc.
Je n'ai pas vu la nouvelle doc, mais l'ancienne était très rapide sur les sous-pods, la question des pch. Quand on a des questions, on nous dit d'aller sur SO, mais il n'y a pas forcément de réponses. A mon avis, il faudrait plus de samples de code (pas juste des lignes, mais des exemples complets), d'autant plus que le repo Spec ne va plus être dispo.
Cf le joli schéma avec le chien dans le post du blog ^^
C'est un clone de RubyGems pour Cocoa quoi !
(podfile = gemfile, pod install = bundle install)
@Ali:
Du coup, j'ai commencé à regarder un peu le site et notamment la recherche avec mon oe“il de nouveau v'nu.
Je me demande si celle-ci pourrait être améliorée...
Genre, les repo qui ont le plus de stars ? Après, c'est peut-être pour avoir un truc plus équitable, mais ceux qui commencent par les premières lettres de l'alphabets arrivent en premier...
Ou peut-être trier sur ceux qui sont au minimum passé en 1.x ?
Après, je sais, c'est peut-être pas l'intérêt de CocoaPods de faire de la recherche GitHub améliorée, voire si leur recherche le permet, mais peut-être d'indiquer le nombre d'Issues/Issues Resolved/Pull Request, ou la date de la dernière Mà J. ça permettrait de donner les signes de vie d'un pod. Pas trop envie de reprendre un truc qui est délaissé et bourré de bugs... Ou afficher une liste des derniers pods ajoutés/mis à jour.
Je parle du moteur de recherche sur CocoaPods.org.
Je t'invite alors à remonter une "issue" sur le GitHub de cocoapods.org pour remonter cette demande (en ayant pris soin de vérifier auparavant qu'il n'en existe pas déjà une à ce sujet)
https://github.com/CocoaPods/cocoapods.org/issues
A cette occasion, ils ont même produit une petite vidéo expliquant aux débutants de CocoaPods comment s'y mettre
Du coup, plus d'excuse !
(Plus d'infos sur ce sujet dédié sur le forum)