【问题标题】:Use rvm to force specific Ruby in Xcode Run Script build phase在 Xcode Run Script 构建阶段使用 rvm 强制特定的 Ruby
【发布时间】:2013-03-06 16:13:28
【问题描述】:

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

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

我通过 RVM 使用 1.9.3。

有没有办法强制 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 安装?

【问题讨论】:

  • 创建符号链接不就行了吗?例如:ln -s $HOME/.rvm/bin/rvm-auto-ruby /usr/bin/ruby
  • 我想可以,但如果可能的话,我想保持默认安装不变 - 我想要一个可以在另一台机器上工作而不必弄乱其默认安装的解决方案(安装RVM 显然是必需的,但如果我可以单独安装 /usr/bin 那就很理想了)

标签: ruby xcode rvm


【解决方案1】:

我遇到了同样的问题(好吧,更糟),下面的代码对我有用。 要意识到的关键是,在命令行上,您使用的是<something>/bin/rvm,但在 shell 脚本中,为了让 rvm 改变 that 环境,您必须使用 函数,您必须首先通过调用source <something>/scripts/rvm 将该函数加载到您的shell 脚本中。更多关于这一切here

这个代码也是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 .

作为提示,我发现在 project.pbxproj 文件中嵌入 shell 代码很糟糕。除了最琐碎的事情之外,我的实际运行脚本步骤通常只是对外部脚本的单行调用:

【讨论】:

  • 超级有用,如果不是您添加的链接(了解更多详细信息),我需要很长时间才能弄清楚这一点。此外,FWIW,rvm 将这些行添加到人们的 bash_profile/zshrc 文件中,如下所示:``` [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" ``` 所以我把这个添加到我的代码中: ``` # 将 rvm 加载到 shell 会话中作为函数 [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # 处理作为用户安装的 rvm [[ -s "/usr/local/rvm/scripts/rvm" ]] && source "/usr/local/rvm/scripts/rvm" #处理安装为 sudo ``` 的 rvm
【解决方案2】:

在 Xcode 中的脚本开头试试这个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-15
    • 2022-10-14
    • 2021-12-16
    • 2022-12-30
    • 1970-01-01
    • 2013-10-10
    • 2011-09-11
    相关资源
    最近更新 更多