使用rvm在Xcode运行脚本构建阶段强制特定Ruby

使用rvm在Xcode运行脚本构建阶段强制特定Ruby,ruby,xcode,rvm,Ruby,Xcode,Rvm,在Xcode之外,我使用特定版本的Ruby,使用RVM管理多个Ruby安装 苹果的命令行开发工具在/usr/bin/Ruby安装Ruby,版本为1.8.7 我使用1.9.3至RVM 在运行其运行脚本构建阶段时,有没有办法强制Xcode使用我的1.9.3安装 我已经尝试将Shell路径设置为特定Ruby的完整路径,但这似乎没有什么区别,我的意思是,我在1.9.3中安装的特定Gems在Xcode中运行时,脚本无法使用/无法看到 如果我在命令行上通过xcodebuild运行我的项目,运行脚本阶段将使用

在Xcode之外,我使用特定版本的Ruby,使用RVM管理多个Ruby安装

苹果的命令行开发工具在
/usr/bin/Ruby
安装Ruby,版本为1.8.7

我使用1.9.3至RVM

在运行其运行脚本构建阶段时,有没有办法强制Xcode使用我的1.9.3安装

我已经尝试将Shell路径设置为特定Ruby的完整路径,但这似乎没有什么区别,我的意思是,我在1.9.3中安装的特定Gems在Xcode中运行时,脚本无法使用/无法看到

如果我在命令行上通过
xcodebuild
运行我的项目,运行脚本阶段将使用我的特定Ruby,因为它是在我的shell环境中运行的(即使项目文件中的shell路径设置为
/usr/bin/Ruby
,它仍然使用我的1.9.3)


如何使IDE使用我的1.9.3 Ruby安装?

在Xcode中的脚本开头尝试以下内容:

source "$HOME/.rvm/scripts/rvm"
我也有同样的问题(好吧,更糟),下面的代码对我来说很有效。 需要了解的关键是,在命令行上,您正在使用
/bin/rvm
,但在shell脚本中,为了让rvm更改该环境,您必须使用函数,并且必须首先通过调用
源代码/scripts/rvm
将该函数加载到shell脚本中。更多关于这一切

这段代码也是

作为protip,我发现在
project.pbxproj
文件中嵌入shell代码很恶心。除了最琐碎的东西外,我的实际运行脚本步骤通常只是对外部脚本的一行调用:


创建一个符号链接难道不起作用吗?例如:
ln-s$HOME/.rvm/bin/rvm auto ruby/usr/bin/ruby
我想它可以,但是如果可能的话,我想保留默认安装的完整性——我想要一个解决方案,它可以在另一台机器上工作,而不必干扰默认安装(安装RVM显然是必需的,但如果我可以不安装/usr/bin,这很理想)非常有用,如果没有您添加的链接(更多详细信息),我会花很长时间来解决这个问题“$HOME/.rvm/scripts/rvm”]]和&source“$HOME/.rvm/scripts/rvm”``所以我在我的代码中添加了以下内容:````````将rvm作为函数[[-s“$HOME/.rvm/scripts/rvm”]]和&source“$HOME/.rvm/scripts/rvm”\\\\处理以用户身份安装的rvm[-s”/usr/local/rvm/scripts/rvm”]]&&source”/usr/local/rvm/scripts/rvm/rvm“#将rvm作为sudo安装```
#!/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 .