In xcode habe ich eine 'run script' Build-Phase, die ein Ruby-Skript ausführt. Es scheint jedoch, dass xcode versucht, es mit der Standard-Mac-Version 1.8 von Ruby und nicht mit der neuesten Version auszuführen. Da das Skript ein Schmuckstück benötigt, schlägt es mit einem Fehler require fehl und der Pfad im Fehler verweist auf
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/
Offensichtlich macht mich der 1.8 in diesem Pfad misstrauisch.
Wenn ich das Terminal öffne und den Befehl ruby -v
ausführe, gibt es korrekt 2.0.0p0
zurück, das ich installiert und als Standard mit RVM gesetzt habe.
Wie kann ich Xcode dazu bringen, am richtigen Ort zu suchen? Oder interpretiere ich diesen Fehler falsch?
Aktualisierung:
Um ein wenig mehr Informationen zu geben, hier ist der genaue Fehler, den der Compiler wirft:
%Vor%Ich habe dies verwendet, um Xcode mit einem anderen Interpreter als dem Standard-Systeminterpreter auszuführen:
rvm use 2.0.0p0
open -a Xcode
Um dies zu testen, können Sie etwas in Ihren Build einfügen, das die Version des Interpreters oder verfügbare Edelsteine protokolliert.
Wenn Xcode die Umgebungsvariablen IIRC ausgibt, unterscheidet sich die von Xcode festgelegte $PATH
von der $PATH
, die Sie in einer normalen Terminalsitzung laden.
Damit haben Sie (mindestens) zwei Möglichkeiten, das Problem zu beheben:
Sie können Ihr Skript so bearbeiten, dass es direkt auf den rvm-installierten Ruby zeigt. Dies ist möglicherweise besser, wenn Ihr Skript auf mehreren Systemen funktionieren muss (auch wenn es nicht mit der Funktionsweise von rvm zu tun hat).
Laut Peter Hoseys Kommentar zu Chris Hansons Antwort in diese Frage, Sie können Umgebungsvariablen in ~/.MacOSX/environment.plist
festlegen, die für alle von Ihnen gestarteten Prozesse gelten.
Ich hatte eine ähnliche Situation, aber das Skript, das ausgeführt wurde, hatte eine Shebang-Linie, die sich auf das vom System installierte Ruby bezieht.
%Vor% Meine Lösung, die gefährlich sein könnte, war, /usr/bin/ruby
durch einen Symlink zu dem von RVM installierten Ruby zu ersetzen.
Hier sind die Schritte, die ich gemacht habe:
sudo
von Ссылка ) rvm
mit der App Einstellungen (Einstellungen & gt; Benutzer und Gruppen) hinzu. rvm
-Gruppe bin, betrifft dies das Zeug unter /usr/local/rvm
. /usr/bin/ruby
aus dem Weg und verbinden Sie den RVM-Standard-Ruby an seiner Stelle. (Dies ist der gefährliche Teil. Es kann zu Problemen führen, wenn Programme davon ausgehen, dass sie die vom System installierte Version verwenden werden.) Um den Symlink zu ersetzen, habe ich:
%Vor%Nachdem ich dies getan hatte (während Xcode nicht lief), benutzte das Skript das nächste Mal, als ich das Projekt in Xcode erstellte, den Ruby, den ich mit RVM installiert hatte.
Angenommen, Sie geben Ihre Version von rvm ruby in Ihrem Projekt an (und ich denke, Sie sollten es sein), denke ich, dass dies eine allgemeingültigere Antwort als die derzeitigen ist.
In groben Zügen sollten Sie in Ihrem Shell-Skript
verwenden %Vor%Ich beziehe mich in dieser Antwort auf diese ausführbaren Details.
Ich hatte dieses Problem auch, da ich xcpretty verwenden wollte. Am Ende mache ich folgendes, um auf den richtigen Edelstein-Ordner zu zeigen:
%Vor%welcher Edelstein Sie wollen, wird in diesem Ordner sein.
Auch wenn Sie nur wollen, dass Sie Ruby Home-Pfad:
%Vor%xcpretty war unter der ersten Option in bin / in meinem Szenario wie unten. Also für mich mache ich folgendes:
%Vor%Sie können vorher herausfinden, wo sich Ihr Ruby-Befehl befindet welches