CocoaPods et Migration
Bonjour bonjour,
Bon je m'apprête à migrer les pods d'un assez gros projet de la v0.39 à la v1.
En cherchant un peu j'ai trouvé un post de l'année dernière qui disait :
Voici la procedure pour installer Cocoapods :
Ouvrir le Terminal
D'abord, lister les anciennes versions de Cocoapods deja installees : gem list --local | grep cocoapods
Selon la liste affichee, desinstaller un a un chacun des elements : sudo gem uninstall cocoapods-core...
Supprimer les fichiers de cache : rm -rf ~/.cocoapods/
Mettre a jour Ruby : sudo gem update --system
Installer Cocoapods : sudo gem install cocoapods
Finaliser l'installation de Cocoapods : pod setup
Si le message suivant s'affiche en vert, c'est bon : Setup completed
Je suppose que c'est toujours valable.
Après il faut faire les modifications décrite ici :
- http://blog.cocoapods.org/CocoaPods-1.0/
- https://github.com/CocoaPods/CocoaPods/issues/4706
Est ce que j'oublie quelque chose ?
Des personnes qui ont réalisé la migration veulent faire part de leurs expériences ?
Réponses
Je suis toujours à la 0.39 mais je suis preneur de ton retour d'expérience (quand tu auras migré).
En particulier :
- désinstaller les anciennes versions : pourquoi pas, mais ça n'est pas strictement nécessaire, et aujourd'hui je conseillerai plutôt de faire un "gem cleanup" après avoir installé une nouvelle version, qui fait cela pour toi ("gem cleanup" est une commande qui supprime les anciennes versions des gems pour ne garder que la dernière version installée au lieu de garder tout l'historique. Donc à faire APRES avoir installé la 1.0)
- Supprimer les fichiers dans "~/.cocoapods" : non seulement ce n'est pas utile, mais cela va t'obliger à re-cloner entièrement ensuite le repo de podspecs à la prochaine utilisation de CocoaPods (ce que fait la commande "pod setup" qu'on n'a à exécuter qu'une seule fois à la toute première install normalement et jamais après) ce qui prend du temps. Pas besoin de toucher à ce dossier pour rien du coup.
- Mettre à jour RubyGems, pourquoi pas c'est pas une mauvaise idée. Après, c'est pas indispensable, c'est juste que ça peut effectivement être l'occasion ou jamais de le faire.
- Du coup si tu n'as pas touché au dossier "~/.cocoapods", pas besoin de refaire un "pod setup"
En bref, juste pour mettre à jour CocoaPods, au lieu de toute cette procédure, un simple "gem update cocoapods" suffit amplement. (A précéder d'un "sudo" si ton Ruby installe ses gems sur un emplacement système, selon ta configuration). Bon puisque CocoaPods 1.0.0 n'est pas encore en version finale, il faut plutôt utiliser "gem update cocoapods --pre" pour l'autoriser à installer les pré-versions (alpha) au lieu de ne le limiter qu'aux versions finales, du moins jusqu'à ce que la 1.0.0 soit officielle (ça ne devrait plus trop tarder maintenant, la dernière alpha est très stable)Ensuite une fois que tu auras fait "gem update cocoapods --pre" effectivement il faut suivre la procédure pour mettre à jour ton Podfile pour utiliser la nouvelle syntaxe (mais ça va vite, dans 90% des cas d'un Podfile type c'est 3x rien)
Une autre alternative c'est d'utiliser l'application OSX qu'on a sorti il n'y a pas si longtemps, pour ceux qui sont moins fans du terminal et préfèrent avoir une GUI et avoir l'exécutable CocoaPods embarqué dans cette app plutôt que l'installer sur le système et par le terminal. Cette appli OSX a aussi l'avantage d'embarquer Sparkle, permettant à l'appli de proposer des mises à jour automatiques dès qu'il les détecte.
Bon je commence.
Faire le ménage des anciennes versions de pods et mettre à jour Ruby c'est fait.
Ensuite installation de la nouvelle version; pour ceux qui comme moi sont passé à El-Capitan la commande a changé sinon on à le droit à cette erreur :
nouvelle commande --> sudo gem install -n /usr/local/bin cocoapods
et il faut ajouter le numéro de version que l'on souhaite au bout sinon il reste sur la 0.39 (peut-être parce que les autre version sont marquées comme beta ??? )
donc au final la commande c'est :
Après : pod setup :
Une folie flopée d'error concernant cocoapods-try que je renseigne ici au cas où le développeur passe :P
Mais il y a tout de même le message "Setup completed" donc tout va bien (pour le moment)
Prochaine étape ... Pod install et là je crois que ça va se compliquer Mon podfile n'est pas 'basic' je dirais
Ceux qui ont installé El Capitan avec une fresh install (et pas une migration) n'ont pas le problème car une install from scratch de El Cap configure bien le Ruby fourni avec OSX pour maintenant s'installer hors de la zone protégée par SIP. Ceux qui comme toi ou moi ont fait une migration auront cet emplacement historique qui les embêtera (pour n'importe quelle gem Ruby d'ailleurs, CocoaPods, Jekyll, Pry, ou n'importe quelle autre que vous utilisez). Du coup soit tu précises "-n" à chaque fois que tu installes une gem, soit tu re-configure le RubyGems de ton OSX pour qu'il s'installe ailleurs une fois pour toute pour refaire une configuration propre de RubyGems et pour qu'ensuite quelle que soit la gem que tu installes tu n'aies plus à préciser "-n" à chaque fois. Perso c'est ce que j'ai fait, on en a déjà parlé dans un autre post il me semble.
C'est effectivement, comme je l'ai déjà expliqué dans le post précédent, parce que la 1.0.0 est encore estampillée "beta" pour l'instant. Or quand tu demandes "gem install" ou "gem update", RubyGems n'installe pas les versions beta par défaut mais que les versions stables... sauf si tu lui demandes avec "--pre" pour autoriser à installer les "pré-versions".
Donc au final soit tu précises explicitement la version avec "-v" comme tu as fait... soit tu précises juste "--pre" comme j'avais indiqué plus haut pour autoriser RubyGems à choisir une version beta.
Encore une fois si tu n'avais pas forcé à supprimer `~/.cocoapods` avant de mettre à jour (je ne vois pas pourquoi tu as tout supprimé pour tout réinstallé au lieu de juste mettre à jour) tu n'aurais même pas eu à faire ce "pod setup" dont le rôle est surtout de recréer "~/.cocoapods" et de re-cloner le repo GIT entier des specs... si tu n'avais pas supprimé ce repo au début de la procédure (étape inutile) tu n'aurais pas eu à le recréer à la fin :P
Merci pour toutes ces précisions Ali. J'avais malheureusement déjà fait toutes les manips avant de lire ton post ... sinon je ne les auraient pas faites :P
Cependant je suis maintenant sur un autre problème mes projets ne builds plus à cause des bundle de Braintree.
J'ai trouvé un post avec le même problème que moi sur stackoverflow mais malheureusement sans réponse
http://stackoverflow.com/questions/36317741/errors-while-implementing-braintree-sdk-in-ios-app-swift-2-2-xcode-7-3
Une idée ? ::)