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 ?


 


 


o:)


Réponses

  • colas_colas_ Membre
    mars 2016 modifié #2

    Je suis toujours à  la 0.39 mais je suis preneur de ton retour d'expérience (quand tu auras migré).


  • AliGatorAliGator Membre, Modérateur
    Je ne sais pas où tu as trouvée cette procédure et ce post de l'année dernière, mais la plupart de tout ce qui y est décrit est totalement inutile aujourd'hui. Il l'était peut-être pour une version spécifique où on a eu un problème GIT (ou plutôt où GitHub a eu un problème qui corrompait les caches des gros repos git comme celui de CocoaPods), mais c'était ponctuel et n'est pas utile pour une procédure de mise à  jour classique.

    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.
  • chatonSauvagechatonSauvage Membre
    mars 2016 modifié #4

    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 :



    ERROR: While executing gem ... (Errno::EPERM)
    Operation not permitted - /usr/bin/pod 

    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 :   



    sudo gem install -n /usr/local/bin cocoapods -v 1.0.0.beta.5

    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


    
    Error loading the plugin `cocoapods-try-1.0.0.beta.3`.

    NameError - uninitialized constant Pod::Command::Try::RepoUpdate
    /Library/Ruby/Gems/2.0.0/gems/cocoapods-try-1.0.0.beta.3/lib/pod/command/try.rb:10:in `<class:Try>'
    /Library/Ruby/Gems/2.0.0/gems/cocoapods-try-1.0.0.beta.3/lib/pod/command/try.rb:9:in `<class:Command>'
    /Library/Ruby/Gems/2.0.0/gems/cocoapods-try-1.0.0.beta.3/lib/pod/command/try.rb:6:in `<module:Pod>'
    /Library/Ruby/Gems/2.0.0/gems/cocoapods-try-1.0.0.beta.3/lib/pod/command/try.rb:5:in `<top (required)>'
    /Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    /Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    /Library/Ruby/Gems/2.0.0/gems/cocoapods-try-1.0.0.beta.3/lib/cocoapods_plugin.rb:1:in `<top (required)>'
    /Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    /Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    /Library/Ruby/Gems/2.0.0/gems/claide-1.0.0.beta.3/lib/claide/command/plugin_manager.rb:95:in `block in safe_activate_and_require'
    /Library/Ruby/Gems/2.0.0/gems/claide-1.0.0.beta.3/lib/claide/command/plugin_manager.rb:95:in `each'
    /Library/Ruby/Gems/2.0.0/gems/claide-1.0.0.beta.3/lib/claide/command/plugin_manager.rb:95:in `safe_activate_and_require'
    /Library/Ruby/Gems/2.0.0/gems/claide-1.0.0.beta.3/lib/claide/command/plugin_manager.rb:31:in `block in load_plugins'
    /Library/Ruby/Gems/2.0.0/gems/claide-1.0.0.beta.3/lib/claide/command/plugin_manager.rb:30:in `map'
    /Library/Ruby/Gems/2.0.0/gems/claide-1.0.0.beta.3/lib/claide/command/plugin_manager.rb:30:in `load_plugins'
    /Library/Ruby/Gems/2.0.0/gems/claide-1.0.0.beta.3/lib/claide/command.rb:326:in `block in run'
    /Library/Ruby/Gems/2.0.0/gems/claide-1.0.0.beta.3/lib/claide/command.rb:325:in `each'
    /Library/Ruby/Gems/2.0.0/gems/claide-1.0.0.beta.3/lib/claide/command.rb:325:in `run'
    /Library/Ruby/Gems/2.0.0/gems/cocoapods-1.0.0.beta.5/lib/cocoapods/command.rb:48:in `run'
    /Library/Ruby/Gems/2.0.0/gems/cocoapods-1.0.0.beta.5/bin/pod:44:in `<top (required)>'
    /usr/local/bin/pod:22:in `load'
    /usr/local/bin/pod:22:in `<main>'
    Setting up CocoaPods master repo

    CocoaPods 1.0.0.beta.6 is available.
    To update use: `sudo gem install cocoapods --pre`
    [!] This is a test version we'd love you to try.

    For more information, see https://blog.cocoapods.org and the CHANGELOG for this version at https://github.com/CocoaPods/CocoaPods/releases/tag/1.0.0.beta.6

    Setup completed

    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   B)  Mon podfile n'est pas 'basic' je dirais


  • AliGatorAliGator Membre, Modérateur

    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 :


    ERROR: While executing gem ... (Errno::EPERM)
    Operation not permitted - /usr/bin/pod 
    nouvelle commande -->  sudo gem install -n /usr/local/bin cocoapods

    C'est en effet à  cause de SIP (Software Integrity Protection), qui assure la sécurité de ton système et t'empêche de pourrir /usr/bin (sauf que historiquement, c'est là  que OSX était configuré avant El Cap pour installer les gems Ruby quelles qu'elles soient...

    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.


    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 :   


    sudo gem install -n /usr/local/bin cocoapods -v 1.0.0.beta.5

    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.



    Après : pod setup  :

    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 ?  ::)


Connectez-vous ou Inscrivez-vous pour répondre.