使用gem安装cocoapods时出现错误

44
我正在使用macOS Mojave,当我尝试使用gem安装cocoapods时,出现以下错误。

Building native extensions. This could take a while... ERROR: Error installing cocoapods: ERROR: Failed to build gem native extension.

current directory: /Library/Ruby/Gems/2.3.0/gems/ffi-1.12.2/ext/ffi_c

/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby -r ./siteconf20200302-707-1iveybq.rb extconf.rb mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in /Library/Ruby/Gems/2.3.0/gems/ffi-1.12.2 for inspection. Results logged to /Library/Ruby/Gems/2.3.0/extensions/universal-darwin-18/2.3.0/ffi-1.12.2/gem_make.out

当我运行以下命令时,会出现此错误。
sudo gem install cocoapods

sudo gem install -n /usr/local/bin cocoapods

我已经安装了xcode命令行工具,并且当我运行xcode-select --install时,我收到以下消息:

xcode-select: 错误:命令行工具已经安装,请使用“软件更新”安装更新

我还同意了xcode许可协议,使用命令sudo xcodebuild -license

/Library/Ruby/Gems/2.3.0/extensions/universal-darwin-18/2.3.0/ffi-1.12.2/gem_make.out中的错误日志如下:

当前目录:/Library/Ruby/Gems/2.3.0/gems/ffi-1.12.2/ext/ffi_c /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby -r ./siteco$ mkmf.rb无法找到ruby头文件 /System/Library/Frameworks/Ruby.fra$处的extconf失败,退出代码为1

我该怎么解决这个问题?


你是否已经安装了 Ruby?请在命令行中尝试输入 ruby --version - Rob C
嗯,我明白了。Ruby 2.3.7p456(2018-03-28修订版63024)[universal.x86_64-darwin18]。 - Muljayan
日志文件的内容是什么?/Library/Ruby/Gems/2.3.0/extensions/universal-darwin-18/2.3.0/ffi-1.12.2/gem_make.out - Rob C
我包含了错误日志。 - Muljayan
1
我建议您查看这个链接 - Rob C
非常感谢。它起作用了。如果您能起草一个答案并链接该问题,我会选择它作为答案。 - Muljayan
11个回答

81

这个答案可以在这里找到,虽然与此问题无关。以下是最佳解决方案的摘录。

对于macOS 10.14上的Xcode 11,即使安装了Xcode并安装了命令行工具并接受了许可证,这种情况仍可能发生。

sudo xcode-select --install
sudo xcodebuild -license accept
问题在于Xcode 11使用了macOS 10.15 SDK,其中包含ruby2.6的头文件,但不包括macOS 10.14的ruby2.3。您可以通过运行以下命令来验证这是您的问题:

问题是Xcode 11使用了macOS 10.15 SDK,其中包含ruby2.6的头文件,但不包括macOS 10.14的ruby2.3。您可以通过运行以下命令来验证这是您的问题:

ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

在macOS 10.14上使用Xcode 11运行时,会打印出不存在的路径

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0

然而,Xcode 11 在 /Library/Developer/CommandLineTools/SDKs/MacOS10.14.sdk 中安装了 macOS 10.14 SDK。不必像其他答案所建议的那样安装旧的头文件来污染系统目录。相反,通过选择该 SDK,将找到适当的 ruby2.3 头文件:

sudo xcode-select --switch /Library/Developer/CommandLineTools
ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

现在应该会正确打印

/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0
同样地,当选择该SDK时,gem install 应该可以正常工作。
要切换回使用当前的Xcode 11 SDK,请使用:
sudo xcode-select --switch /Applications/Xcode.app

1
非常感谢,经过10个小时的搜索,我终于找到了你的解决方案,它真的很有帮助。 - Moumen Alisawe
@MoumenAlisawe 谢谢。很高兴能帮助 :) - Anshul Kataria
在我的10.14路径中,从11.1到10.15没有改变。我在SDK文件夹中有MacOSX10.14.sdk和MacOSX11.1.sdk。将MacOSX11.1.sdk的名称更改为MacOSX11.1.sdk.backup使其未使用,并且运行Xcode选择成功更改了路径。我不知道更改名称或删除该文件夹的任何结果,但它在短期内解决了我的问题。 - Ataberk
在 MacOS 10.15.7 和 Xcode 11.7 上也可以工作,我只需要运行 sudo xcode-select --switch /Applications/Xcode.app,因为 ruby -rrbconfig 打印了正确的路径。 - Ricardo Isidro
这个结合了xcrun,对我很有效。config.h文件在universal-darwin20/ruby/而不是ruby/中的rubyhdrdir。 - drawnonward
适用于Mac OS Monterey Beta 2和Xcode 12.5。 - andreich

23

我使用Catalina 10.15.5和Xcode 11.5。 对我来说,上述缺失的标题并不是问题所在——但安装-v 1.8.4确实奏效了,谢谢。 - O Wigley

18
sudo xcode-select --switch /Library/Developer/CommandLineTools

ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

13
运行
ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'
了解您的Ruby配置。
  • 如果输出是不存在的MacOSX10.15路径,例如:
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0
    
    那么您应该通过以下步骤来纠正配置。
  • 运行
    sudo xcode-select --switch /Library/Developer/CommandLineTools
    
    你可以运行。
    ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'
    
    再次查看路径是否已更改。
  • 输出应该类似于:
    /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0
    
    现在您可以运行gem install来安装CocoaPods!


  • 这个帖子中唯一的亮点就是你的答案!谢谢,它在我的 Big Sur 上起作用了。 - Dani Sh90
    同样适用于Big Sur。感谢您提供的逐步清晰指导! - Jed Grant

    12
    这对我非常有帮助/有效:
    # brew cleanup -d -v    
    # brew install cocoapods
    

    注:您应该已经安装了Homebrew。您可以使用以下命令来安装brew:

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    

    祝你好运 :)


    1
    在基于 ARM 的 Mac 上尝试了所有其他方法,除了这个之外都没有成功。到目前为止还没有出现任何问题。Brew 再次发挥了关键作用! - maxtuzz

    5

    在Mac OS Big Sur上尝试此操作。

    sudo gem install cocoapods -v 1.8.4
    

    1
    这是剽窃自 https://dev59.com/nFIH5IYBdhLWcg3wOrEY#63555919 的内容,比起 kb920 的旧回答,解释较少。 - Yunnosch

    3

    尝试

    1. 通过终端安装homebrew。

    2. 在成功安装homebrew后,在终端中输入以下命令:

      $ brew install cocoapods


    2

    我刚刚花了一整天的时间来找解决方案,我使用的是MacOS Big Sur Beta 8。为了用gem升级cocoapods,尝试以下步骤:

    1. 安装rbenv
    • git clone https://github.com/rbenv/rbenv.git ~/.rbenv

    • cd ~/.rbenv && src/configure && make -C src

    • 将~/.rbenv/bin添加到$PATH以便访问rbenv命令行实用程序。 请参见:https://github.com/rbenv/rbenv#basic-github-checkout

    • 确保将export PATH="$HOME/.rbenv/shims:${PATH}"添加到您的$PATH中

    1. xcode-select --switch /Applications/Xcode.app/Contents/Develope

    2. gem install cocoapods应该可以完美工作!


    1
    这是唯一有效的方法。谢谢ukiyoevega。 - andrewcar

    0

    简短的回答是:

    curl -sSL https://rvm.io/mpapis.asc | gpg --import -
    curl -sSL https://rvm.io/pkuczynski.asc | gpg --import -
    
    
    curl -sSL https://get.rvm.io | bash -s stable --ruby
    
    sudo gem install cocoapods
    

    详细信息请参考:另一篇文章的答案

    0

    我从其他帖子中复制了这些命令。在尝试了上面和其他帖子中提供的几种方法后,只有这个方法适用于我。

    1. 运行此命令,然后关闭终端

      curl -L https://get.rvm.io | bash -s stable

    2. 逐个运行这些命令或将它们全部复制并粘贴到终端中。最新版本现在是3.1.0

      rvm install ruby-3.1.0

      rvm --default use 3.1.0

      sudo gem install cocoapods


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接