ネイティブ拡張機能を使用した rbtrace 0.4.14 のインストール Gem::Ext::BuildError: エラー: gem ネイティブ拡張機能のビルドに失敗しました

概要

Discourse をインストールしようとしているときに、これが何度か起こりました。

Cannot install rbtrace with native extensions.
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/Users/setoelka/.rbenv/versions/2.7.3/bin/$(RUBY_BASE_NAME)
extconf.rb:6:in `sys': make install failed, please report to https://github.com/tmm1/rbtrace/issues (RuntimeError)
    from extconf.rb:43:in `block (2 levels) in <main>'
    from extconf.rb:34:in `chdir'
    from extconf.rb:34:in `block in <main>'
    from extconf.rb:30:in `chdir'
    from extconf.rb:30:in `<main>'

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /Users/setoelka/.rbenv/versions/2.7.3/lib/ruby/gems/2.7.0/extensions/arm64-darwin-21/2.7.0/rbtrace-0.4.14/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /Users/setoelka/.rbenv/versions/2.7.3/lib/ruby/gems/2.7.0/gems/rbtrace-0.4.14 for inspection.
Results logged to /Users/setoelka/.rbenv/versions/2.7.3/lib/ruby/gems/2.7.0/extensions/arm64-darwin-21/2.7.0/rbtrace-0.4.14/gem_make.out

An error occurred while installing rbtrace (0.4.14), and Bundler cannot continue.
Make sure that `gem install rbtrace -v '0.4.14' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  rbtrace

誰かその問題について知っていますか?実行してみました:

gem install rbtrace -v '0.4.14' --source 'http://rubygems.org/' -- --with-cflags=-Wno-implicit-function-declaration

これまでのところ運がありません。

解決策

私は mkmf.log の内容を調べて、この問題を自分で解決しました。

TLDR; 選択した Xcode を標準の名前 (つまり Xcode.app) で使用します。

Ruby はデフォルトの Xcode のコンパイラーを使用して gem をコンパイルすることが判明しました。 Xcode の複数のバージョンがあり、xcode-select を使用してそれらを切り替えます。

問題は、Ruby セットアップは常にデフォルトの Xcode.app 命名を検索するということです。選択した Xcode に別の名前を付けると、このエラーが発生します。