Command mettre à jour Ruby

Bonjour à tous,


J'ai quelque chose de surprenant...

Je travaille sur une application iOs avec React Native. J'ai un ancien macbook Intel avec Ventura 13.7


Quand je lance la commande


npm run ios


Il essaie d'installer cocopad et j'ai le message d'erreur


Command `pod install` failed.

└─ Cause: pod install --repo-update --ansi exited with non-zero code: 1

/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- ffi_c (LoadError)

from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /Library/Ruby/Gems/2.6.0/gems/ffi-1.17.0-arm64-darwin/lib/ffi.rb:5:in `rescue in <top (required)>'
from /Library/Ruby/Gems/2.6.0/gems/ffi-1.17.0-arm64-darwin/lib/ffi.rb:2:in `<top (required)>'


Ce qui est intéressant dans ce message c'est la version de ruby: 2.6.


Si je tape la commande ruby -v, il m'affiche



ruby 3.4.5 (2025-07-16 revision 20cda200d3) +PRISM [x86_64-darwin22]


si je vais dans


pierrot:/System/Library/Frameworks/Ruby.framework/Versions$ ll
total 0
drwxr-xr-x 4 root wheel 128 5 Sep 2024 .
drwxr-xr-x 5 root wheel 160 5 Sep 2024 ..
drwxr-xr-x 5 root wheel 160 5 Sep 2024 2.6
lrwxr-xr-x 1 root wheel 3 5 Sep 2024 Current -> 2.6


Comment est-ce que je peux faire de l'ordre. Je suis que pour résoudre mon problem d'installation de cocpad, il faut la version 3.x


Il semble bien que je l'ai, mais il va voir une ancienne version


Si je regarde mon history, pour voir ce que j'ai fait, je lis ceci


/Documents/GitHub/ReactN/iot-charts$ history |grep ruby
386 ruby -v
390 brew link --overwrite ruby --force
391 ruby -v
392 brew install ruby
393 ruby -v
394 brew link --overwrite ruby --force
395 ruby -v
396 echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> /Users/pierrot/.bash_profile
397 ruby -v
399 echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> /Users/pierrot/.bash_profile
400 ruby -v
401 brew link --overwrite ruby --force


et si je regarde mon fichier.bash_profile, je vois ca


eval "$(/usr/local/bin/brew shellenv)"
export PATH="/usr/local/opt/node@22/bin:$PATH"
export ANDROID_HOME=$HOME/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/platform-tools
export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home
export PATH="/usr/local/opt/ruby/bin:$PATH"
export PATH="/usr/local/opt/ruby/bin:$PATH"


Bon je vois une ligne de trop.


Mais si je comprends, bien, j'ai une version dans /usr/local/opt/ruby/ et dans /System/Library/Frameworks/Ruby.framework/.


Ma question c'est comment mettre de l'ordre.


Je pourraus revenir en arrière


brew uninstall ruby


Mais comment mettre à jour ma version dans /System/Library/Frameworks/Ruby.framework/ car c'est là ou est mon erreur et npx va chercher la dedans.


Merci beaucoup pour vos lumières

MacBook Pro 13″

Publiée le 29 juil. 2025 à 10h41

Répondre
Question marquée comme Réponse la mieux classée

Publiée le 29 juil. 2025 à 11h47

Perso, je te recommande vraiment d’opter pour rbenv ou rvm. Tu évites de casser ton Ruby système et tu bosses avec les dernières versions en toute sécurité.


Je te propose une solution 100% fonctionnelle, déjà testée sur des configurations similaires à la tienne.


Sur macOS 13.7 (Ventura), même avec sudo, certaines parties du système comme /usr/bin sont protégées par SIP (System Integrity Protection). Ce mécanisme empêche l’écriture, même en root, sur certains dossiers système critiques, dont /usr/bin.


Donc utiliser sudo ne suffit pas pour écrire dans /usr/bin sur macOS 13+.


C’est pour ça que tu obtiens : ERROR: While executing gem ... (Gem::FilePermissionError)

You don't have write permissions for the /usr/bin directory.



Ce qu’il faut faire (solution recommandée) :


Installe une version utilisateur de Ruby (sans toucher au système) avec rbenv (gestionnaire de versions Ruby) :



Étapes simples :


1) Installe rbenv :

brew install rbenv ruby-build


2) Initialise rbenv :

echo 'eval "$(rbenv init - bash)"' >> ~/.zprofile

source ~/.zprofile


3) Installe une version récente de Ruby (ex : 3.2.2) :

rbenv install 3.2.2

rbenv global 3.2.2


4) Vérifie que Ruby pointe bien vers celle installée :

ruby -v


5) Installe CocoaPods :

gem install cocoapods


Tout ça s’installe dans ton dossier utilisateur (~/.rbenv/versions/...) et aucun sudo n’est nécessaire.

Tu contournes les protections SIP proprement et sans casser ton système.

11 réponses
Question marquée comme Réponse la mieux classée

Le 29 juil. 2025 à 11h47 en réponse à pierrot10

Perso, je te recommande vraiment d’opter pour rbenv ou rvm. Tu évites de casser ton Ruby système et tu bosses avec les dernières versions en toute sécurité.


Je te propose une solution 100% fonctionnelle, déjà testée sur des configurations similaires à la tienne.


Sur macOS 13.7 (Ventura), même avec sudo, certaines parties du système comme /usr/bin sont protégées par SIP (System Integrity Protection). Ce mécanisme empêche l’écriture, même en root, sur certains dossiers système critiques, dont /usr/bin.


Donc utiliser sudo ne suffit pas pour écrire dans /usr/bin sur macOS 13+.


C’est pour ça que tu obtiens : ERROR: While executing gem ... (Gem::FilePermissionError)

You don't have write permissions for the /usr/bin directory.



Ce qu’il faut faire (solution recommandée) :


Installe une version utilisateur de Ruby (sans toucher au système) avec rbenv (gestionnaire de versions Ruby) :



Étapes simples :


1) Installe rbenv :

brew install rbenv ruby-build


2) Initialise rbenv :

echo 'eval "$(rbenv init - bash)"' >> ~/.zprofile

source ~/.zprofile


3) Installe une version récente de Ruby (ex : 3.2.2) :

rbenv install 3.2.2

rbenv global 3.2.2


4) Vérifie que Ruby pointe bien vers celle installée :

ruby -v


5) Installe CocoaPods :

gem install cocoapods


Tout ça s’installe dans ton dossier utilisateur (~/.rbenv/versions/...) et aucun sudo n’est nécessaire.

Tu contournes les protections SIP proprement et sans casser ton système.

Le 29 juil. 2025 à 11h12 en réponse à pierrot10

Bonjour 👋


Voici une solution qui devrait t’aider 😀


# 1. Installer Homebrew (si pas encore installé)


which brew || /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"


# 2. Installer une version propre de Ruby


brew install ruby


# 3. Ajouter Ruby dans le PATH (version Intel)


echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.zshrc

source ~/.zshrc


# Si tu utilises bash au lieu de zsh :


# echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.bash_profile

# source ~/.bash_profile


# 4. Installer CocoaPods avec la bonne version de Ruby


gem install cocoapods


# 5. Aller dans le dossier iOS de ton projet

cd ios


# 6. Nettoyer les anciens Pods (facultatif mais recommandé)


rm -rf Pods Podfile.lock


# 7. Réinstaller les pods


pod install --repo-update


# 8. Revenir à la racine du projet et lancer l'app


cd ..

npm run ios

Le 29 juil. 2025 à 12h57 en réponse à pierrot10

Merci pour ton retour 🙂 Tu poses les bonnes questions ;)


Oui, tu dois suivre la deuxième version :

rbenv install 3.2.2


Et pas brew install ruby, car cette commande installe Ruby au niveau système, ce qui peut créer d’autres problèmes sur macOS Ventura à cause des protections système (SIP, /usr/bin, etc.).


Ensuite Est-ce que npm run ios saura utiliser la bonne version de Ruby (celle de rbenv) ?


👉 Oui, à condition que tu aies bien activé rbenv dans ton profil terminal.


Pour ça, il faut faire (une seule fois) dans le terminal :

echo 'eval "$(rbenv init - zsh)"' >> ~/.zprofile
source ~/.zprofile


Ensuite, redémarre ton terminal.


Teste :

which ruby
# → /Users/ton_nom/.rbenv/shims/ruby

which pod
# → /Users/ton_nom/.rbenv/shims/pod


Si tu vois bien ces chemins, alors npm run ios utilisera automatiquement le bon Ruby et CocoaPods (installé via gem install cocoapods).


J’espère avoir été suffisamment clair.

Le 29 juil. 2025 à 14h33 en réponse à pierrot10

Solution recommandée (pour Mac Intel) : utiliser zsh proprement


1) Bascule vers zsh (si ce n’est pas encore fait) (à faire une seule fois)

chsh -s /bin/zsh


2) Ferme puis rouvre ton terminal (tu seras automatiquement dans un shell zsh)


3) Configure rbenv dans zsh

echo 'eval "$(rbenv init - zsh)"' >> ~/.zprofile
source ~/.zprofile


4) Ajoute aussi Homebrew au shell (pour Mac Intel)

echo 'eval "$(/usr/local/bin/brew shellenv)"' >> ~/.zprofile
source ~/.zprofile


5) Pour tester si tout fonctionne :

which ruby

# ➜ /Users/ton_user/.rbenv/shims/ruby

ruby -v
# ➜ La version installée avec rbenv (ex : 3.2.2)

which pod
# ➜ /Users/ton_user/.rbenv/shims/pod


Il y a cela qui m'interpelle


eval "$(/usr/local/bin/brew shellenv)"


Elle dit à ton terminal où trouver les outils installés avec Homebrew (comme node, ruby, rbenv, etc.).


En détails :


brew shellenv affiche des instructions pour ajouter les bons chemins (PATH, etc.).

Le eval exécute ces instructions dans ton terminal actuel.


Sans cette ligne :


Ton terminal ne saura pas où chercher les outils installés avec Homebrew.

Par exemple, ruby, node, ou rbenv pourraient ne pas fonctionner.


Le 30 juil. 2025 à 14h15 en réponse à pierrot10

Ou mais attends, tu m'as donné deux versions différentes


2) Initialise rbenv :

echo 'eval "$(rbenv init - bash)"' >> ~/.zprofile
source ~/.zprofile


et


echo 'eval "$(rbenv init - zsh)"' >> ~/.zprofile
source ~/.zprofile


Je suppose que si je reste avec bash:

echo 'eval "$(rbenv init - bash)"' >> ~/.bash_profile
source ~/.bash_profile


et je switch sur zsh


echo 'eval "$(rbenv init - zsh)"' >> ~/.zprofile
source ~/.zprofile

Le 29 juil. 2025 à 11h04 en réponse à pierrot10

J'ai essayé ceci sans succès


sudo gem update --system


Updating rubygems-update
Fetching rubygems-update-3.7.1.gem
ERROR: Error installing rubygems-update:
There are no versions of rubygems-update (= 3.7.1) compatible with your Ruby & RubyGems
rubygems-update requires Ruby version >= 3.2.0. The current ruby version is 2.6.10.210.
ERROR: While executing gem ... (NoMethodError)
undefined method `version' for nil:NilClass


Au passage j'ai déinstallé


brew uninstall ruby

Le 29 juil. 2025 à 11h27 en réponse à Fernando.N

Merci beaucoup pour ta proposition très intéressante.

Mais ca serait pas mieux de mettre à jour Ruby?

Si j'install cocopad avec une vielle version de Ruby, ca ne risque pas de créer d'autres prpblèmes?


J'ai vu dans des forum que la mise a jour de Ruby résoudrait mon probème


J'ai essayé ceci, sans succès


sudo gem update --system 3.2.2


Updating rubygems-update
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /usr/bin directory.


Si je suis en sudo comment est-ce possible que je ne peux pas ércire dans /usr/bin/ ????


Le 29 juil. 2025 à 12h15 en réponse à Fernando.N

Je te remercie pour tes propositions et j'en tiens compte ;)


Permets moi juste d'insister dans ma curiosité.


Quand je lance la commande


npm run ios


Il tente d'installer cocopad parce qu'il cherche la version de Ruby qui est dans le systeme mais l'installation se plante


Si je suis ta recommandation est-ce qu'il va faire la différence? Est-ce qu'il sait que Ruby est installé dans mon profile


Aussi, tu me donne deux verisons


brew install ruby


et


rbenv install 3.2.2


Je suis la dexuoème?


Milles mercis

Le 29 juil. 2025 à 13h29 en réponse à Fernando.N

Je te remercie pour tout!!!


Je vais essayer la deuxième suggestion.

J'ai encore une petite quetsion


J'ai fais


cd ~
ll


et je ne trouve pas .zprofile


J'ai fais la commande


brew install rbenv ruby-build


Mais il ne l'est toujours pas.


Ne dois-je pas plus faire dans .bash_profile?


echo 'eval "$(rbenv init - zsh)"' >> ~/.bash_profile
source ~/.bash_profile


Pour info:


pierrot:~$ bash

The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`


less .bash_profile

export PS1="\[\033[1;31m\]\u:\[\033[0m\]\w$ "
alias ll='ls -laG'

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion

eval "$(/usr/local/bin/brew shellenv)"
export PATH="/usr/local/opt/node@22/bin:$PATH"
export ANDROID_HOME=$HOME/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/platform-tools
export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home


Il y a cela qui m'interpelle

eval "$(/usr/local/bin/brew shellenv)"

Le 30 juil. 2025 à 09h21 en réponse à pierrot10

J'ai encore une petite question.

J'hésite à passer sur zsh, car j'ai pas mal export pour mon projet Ract Native et Android.

J'ai peur que ca cause d'autre bug, notamment à cause de


export PATH="/usr/local/opt/node@22/bin:$PATH"
export ANDROID_HOME=$HOME/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/platform-tools
export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home

Je suppose que si je reste avec bash, je dois juste faire ceci


echo 'eval "$(rbenv init - zsh)"' >> ~/.bash_profile
source ~/.bash_profile


Ou alors je dois copier ca


export PATH="/usr/local/opt/node@22/bin:$PATH"

export ANDROID_HOME=$HOME/Library/Android/sdk

export PATH=$PATH:$ANDROID_HOME/emulator

export PATH=$PATH:$ANDROID_HOME/platform-tools

export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home


dans .zprofile

n'est-ce pas?


Je me lance après le souper :)

Cette discussion a été fermée par le système ou l’équipe de la communauté. Vous pouvez voter pour les publications que vous jugez utiles ou effectuer des recherches dans la communauté pour trouver des réponses supplémentaires.

Command mettre à jour Ruby

Bienvenue dans la Communauté d’assistance Apple
Un forum où les clients Apple s’entraident avec leurs produits. Faites vos premiers pas avec votre compte Apple.