2013-03-18 11 views
7

Poza Xcode używam konkretną wersję Ruby, używając RVM zarządzanie wieloma instalacjami Ruby.Zastosowanie RVM zmusić specyficzne Ruby w Xcode Run Script budować fazę

dev narzędzi wiersza polecenia Apple zainstalować Ruby w /usr/bin/ruby i jest w wersji 1.8.7.

używam 1.9.3 przez RVM.

Czy istnieje sposób zmusić Xcode użyć mojej instalacji 1.9.3 przy uruchamianiu jego Run Script budować faz?

Próbowałem już ustawić ścieżkę powłoki na pełną ścieżkę mojej konkretnej ruby, ale to nie miało znaczenia, przez co mam na myśli to, że poszczególne klejnoty, które zainstalowałem w moim 1.9.3, nie były dostępne/widoczne dla skryptu po uruchomieniu w Xcode.

Jeśli uruchamiam mój projekt przez xcodebuild w linii poleceń, faza Run Script używa mojej konkretnej Ruby, ponieważ jest uruchamiana z poziomu mojego środowiska powłoki (nawet jeśli ścieżka powłoki w pliku projektu jest ustawiona na /usr/bin/ruby, to nadal używa mojego 1.9.3).

Co mogę zrobić, aby wykorzystać mój IDE 1.9.3 Ruby zainstalować?

+0

Czy nie tworzenie dowiązania symbolicznego załatwić sprawę? Na przykład: 'ln -s $ HOME/.rvm/bin/rvm-auto-ruby/usr/bin/ruby' – fmendez

+0

Przypuszczam, że może, ale chcę pozostawić domyślną instalację nienaruszoną, jeśli to możliwe - i chciałabym rozwiązanie, które działałoby na innej maszynie, bez konieczności bałaganu z domyślną instalacją (instalacja RVM byłaby oczywiście wymagana, ale jeśli mogę zostawić idealną instalację/usr/bin) – Jasarien

Odpowiedz

3

Spróbuj na początku skryptu w Xcode:

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

miałem ten sam (dobrze, gorzej) problem, i kod, który następuje pracował dla mnie. Kluczową rzeczą, aby zdać sobie sprawę, że w linii poleceń, używasz <something>/bin/rvm, ale w skrypcie powłoki, w celu RVM zmienić że środowisko, należy użyć funkcję i należy najpierw obciążeniem, które działają w twoim skrypcie powłoki, wywołując source <something>/scripts/rvm. Więcej o tym wszystkim here.

Kod ten jest również 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 . 

Jako protip uważam osadzanie Shellcode w project.pbxproj pliku yucky. Dla wszystkich, ale najbardziej trywialne rzeczy, mój rzeczywisty krok skrypt prowadzony jest zazwyczaj tylko jedna linia wołać do skryptu zewnętrznego:

enter image description here