【问题标题】:Use non-system ruby to execute ruby scripts within macOS App使用非系统 ruby​​ 在 macOS App 中执行 ruby​​ 脚本
【发布时间】:2018-01-26 14:46:50
【问题描述】:

我正在构建一个 macOS 应用程序,它需要执行一个用 ruby​​ 编写的框架。目前使用 macOS High Sierra 10.13.x 系统 ruby​​ 版本仅为 2.3.3。我正在使用 brew / rvm (取决于)安装最新版本。

当尝试使用Process 运行/usr/local/bin/ruby 或~/.rvm/rubies/ruby-2.5.0/bin/ruby 时,Xcode 会抛出Operation is not permitted 的错误。

当将/usr/bin/ruby 用作launchPath 时,这可以正常工作。

有没有办法从 /usr/local/bin/ruby 或 ~/.rvm/rubies/ruby-2.5.0/bin/ruby 或任何其他自定义路径执行 ruby​​?

对于当前版本的 macOS,也无法将 /usr/bin/ruby 的符号链接更新为不同的二进制文件。

这是我目前的实现:

let myScript = Bundle.main.path(forResource: "myScript", ofType: "command")

let task = Process()    
task.launchPath = "/bin/sh"
task.arguments = myScript, basePath
taks.launch()

这里是myScript 内容:

#!/bin/sh -l

BASE_PATH="$1"
cd "${BASE_PATH}"

/usr/local/bin/ruby my_ruby_script.rb

当我启动任务时,我收到了这条消息:

 /usr/local/bin/ruby: Operation not permitted

或

~/.rvm/rubies/ruby-2.5.0/bin/ruby: Operation not permitted

希望你有解决办法。

【问题讨论】:

  • “/usr/local/bin/ruby”是你拥有读取和执行权限的可执行文件吗?你可以在终端中执行/usr/local/bin/ruby my_ruby_script.rb 吗?
  • 是的。
  • 沙盒激活了吗?
  • 太棒了!是的,这就是问题所在。谢谢你。在开发过程中我会停用它,稍后我会寻找合适的解决方案。

标签: ruby swift xcode macos nstask


【解决方案1】:

由于Martin R's help 我能够解决这个问题。 现在我在项目功能中停用了 macOS 沙盒。

现在我可以使用任何我想要的红宝石了。

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-17
    • 2020-08-06
    • 2015-08-29
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2013-06-19
    • 2012-08-31
    相关资源
    最近更新 更多