2013-03-18 10 views
7

Fuori da Xcode Io uso una versione specifica di Ruby, usando RVM per gestire più installazioni Ruby.Usa rvm per forzare Ruby specifico in Xcode Run Script build phase

Gli strumenti dev della riga di comando di Apple installano Ruby a /usr/bin/ruby ed è la versione 1.8.7.

Io uso 1.9.3 tramite RVM.

C'è un modo per forzare Xcode a utilizzare la mia installazione 1.9.3 quando si eseguono le fasi di compilazione di Run Script?

Ho già provato a impostare il percorso Shell sul percorso completo del mio specifico Ruby, ma ciò non sembrava fare la differenza, con il quale intendo che le Gems particolari che ho installato nel mio 1.9.3 non erano disponibile/visibile allo script quando viene eseguito all'interno di Xcode.

Se eseguo il mio progetto tramite xcodebuild sulla riga di comando, la fase Esegui script utilizza il mio Ruby specifico perché viene eseguito dall'interno dell'ambiente della shell (anche se il percorso Shell nel file di progetto è impostato su /usr/bin/ruby, è ancora usa il mio 1.9.3).

Cosa posso fare per fare in modo che l'IDE utilizzi l'installazione di Ruby 1.9.3?

+0

Non sarebbe la creazione di un collegamento simbolico fare il trucco? Per esempio: 'ln -s $ HOME/.rvm/bin/rvm-auto-ruby/usr/bin/ruby' – fmendez

+0

Suppongo che potrebbe, ma voglio lasciare l'installazione di default intatta se possibile - e mi piacerebbe una soluzione che avrebbe funzionato su un'altra macchina senza dover fare confusione con la sua installazione di default (ovviamente l'installazione di RVM sarebbe richiesta, ma se posso lasciare l'installazione/usr/bin da sola è l'ideale) – Jasarien

risposta

3

Prova questo, all'inizio dello script in Xcode:

source "$HOME/.rvm/scripts/rvm" 
2

Ho avuto lo stesso (beh, peggio) problema, e il codice che segue ha funzionato per me. La cosa fondamentale da capire è che, nella riga di comando, si utilizza <something>/bin/rvm, ma in uno script di shell, in modo che rvm di cambiare che ambiente, è necessario utilizzare una funzione, ed è necessario prima carico quella funzione per lo script della shell chiamando source <something>/scripts/rvm. Altro su tutto questo here.

Questo codice è anche gisted.

#!/usr/bin/env bash 

# Xcode scripting does not invoke rvm. To get the correct ruby, 
# we must invoke rvm manually. This requires loading the rvm 
# *shell function*, which can manipulate the active shell-script 
# environment. 
# cf. http://rvm.io/workflow/scripting 

# Load RVM into a shell session *as a function* 
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then 

    # First try to load from a user install 
    source "$HOME/.rvm/scripts/rvm" 

elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then 

    # Then try to load from a root install 
    source "/usr/local/rvm/scripts/rvm" 
else 

    printf "ERROR: An RVM installation was not found.\n" 
    exit 128 
fi 

# rvm will use the controlling versioning (e.g. .ruby-version) for the 
# pwd using this function call. 
rvm use . 

Come PROTIP, trovo incorporare codice shell in un file project.pbxproj schifo. Per tutti, ma le cose più banali, il mio attuale istruzione di script di esecuzione è di solito solo una sola linea di chiamare a uno script esterno:

enter image description here

Problemi correlati