
Xcode 27 beta 1 + macOS 26.4 の Xcode Cloud で bundle install が失敗する問題が再発した
以前、「Xcode 16.4 + macOS 26.0 の Xcode Cloud 環境で bundle install が失敗する問題」を紹介した。
私は現在も CocoaPods を脱却できていないアプリのメンテナンスをおこなっている。ローカル PC で Xcode 27.0 Beta (27A5194q) を使った動作確認が完了したため、Xcode Cloud で Xcode 27.0 Beta + macOS 26.4 の組み合わせでビルドしたところ、bundle install に失敗してしまった。調査の結果、前回と同じメカニズムで問題が再発していることが判明した。
本記事では、その原因と対処法を紹介する。
結論
Xcode Cloud の Xcode 27.0 Beta + macOS 26.4 の組み合わせでは bundle install が失敗する。ローカル PC で Ruby 3.x をインストールして使っている場合はシステムRuby 2.6 を参照しないためこの問題は発生しないが、Xcode Cloud のシステムRuby 2.6 を使う環境では再現する。
Xcode 27.0 Beta を使う場合は、macOS 27.0 Beta 環境でビルドするか、当面は Xcode 26.4.1 + macOS 26.4 の組み合わせを継続する必要がある。
検証環境
以下は Xcode Cloud の環境設定を指している。
- Xcode 27.0 beta 1(Build 27A5194q)
- macOS 26.4(darwin25)
- システムRuby 2.6.10
[universal.arm64e-darwin25]
- システムRuby 2.6.10
問題の詳細
Xcode Cloud で Xcode 27.0 Beta + macOS 26.4 を使い bundle install を実行すると、native extension のコンパイルに失敗し、CocoaPods がインストールできない。
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
checking for whether -std=c99 is accepted as CFLAGS... *** 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.
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:467:in
`try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
An error occurred while installing json (2.7.6), and Bundler cannot continue.
In Gemfile:
cocoapods was resolved to 1.16.2, which depends on
cocoapods-core was resolved to 1.16.2, which depends on
algoliasearch was resolved to 1.27.5, which depends on
json
エラーログ全文
2026-06-21T23:45:34.399142196Z 🔎 Ruby executable: /usr/bin/ruby
2026-06-21T23:45:34.399601656Z 🔎 Ruby: ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin25]
2026-06-21T23:45:34.932166916Z 🔎 RubyGems: 3.0.3.1
2026-06-21T23:45:51.086345354Z ✅ Bundler installed
2026-06-21T23:45:51.086728543Z Your RubyGems version (3.0.3.1) has a bug that prevents `required_ruby_version` from working for Bundler. Any scripts that use `gem install bundler` will break as soon as Bundler drops support for your Ruby version. Please upgrade RubyGems to avoid future breakage and silence this warning by running `gem update --system 3.2.3`
2026-06-21T23:45:58.219854026Z Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
2026-06-21T23:45:58.220372385Z
2026-06-21T23:45:58.220815996Z current directory: /Users/local/.gem/gems/json-2.7.6/ext/json/ext/generator
2026-06-21T23:45:58.221005949Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/ruby -I
2026-06-21T23:45:58.221313266Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0 -r
2026-06-21T23:45:58.221476121Z ./siteconf20260621-2811-o4p2gn.rb extconf.rb
2026-06-21T23:45:58.221578936Z checking for whether -std=c99 is accepted as CFLAGS... *** extconf.rb failed ***
2026-06-21T23:45:58.221665585Z Could not create Makefile due to some reason, probably lack of necessary
2026-06-21T23:45:58.221754470Z libraries and/or headers. Check the mkmf.log file for more details. You may
2026-06-21T23:45:58.221957890Z need configuration options.
2026-06-21T23:45:58.222084079Z
2026-06-21T23:45:58.222396410Z Provided configuration options:
2026-06-21T23:45:58.222526098Z --with-opt-dir
2026-06-21T23:45:58.222621136Z --without-opt-dir
2026-06-21T23:45:58.222712602Z --with-opt-include
2026-06-21T23:45:58.222825925Z --without-opt-include=${opt-dir}/include
2026-06-21T23:45:58.222918799Z --with-opt-lib
2026-06-21T23:45:58.223029767Z --without-opt-lib=${opt-dir}/lib
2026-06-21T23:45:58.223116302Z --with-make-prog
2026-06-21T23:45:58.223204453Z --without-make-prog
2026-06-21T23:45:58.223319930Z --srcdir=.
2026-06-21T23:45:58.223439281Z --curdir
2026-06-21T23:45:58.223542311Z --ruby=/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/$(RUBY_BASE_NAME)
2026-06-21T23:45:58.223674297Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:467:in
2026-06-21T23:45:58.223766972Z `try_do': The compiler failed to generate an executable file. (RuntimeError)
2026-06-21T23:45:58.223852610Z You have to install development tools first.
2026-06-21T23:45:58.223956343Z from
2026-06-21T23:45:58.224111478Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:585:in
2026-06-21T23:45:58.224264302Z `block in try_compile'
2026-06-21T23:45:58.224376931Z from
2026-06-21T23:45:58.224468196Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:532:in
2026-06-21T23:45:58.224627097Z `with_werror'
2026-06-21T23:45:58.224725563Z from
2026-06-21T23:45:58.224823680Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:585:in
2026-06-21T23:45:58.225004235Z `try_compile'
2026-06-21T23:45:58.225123869Z from
2026-06-21T23:45:58.225361089Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:649:in
2026-06-21T23:45:58.225573916Z `try_cflags'
2026-06-21T23:45:58.225692731Z from
2026-06-21T23:45:58.225817539Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:655:in
2026-06-21T23:45:58.226145301Z `block (2 levels) in append_cflags'
2026-06-21T23:45:58.226422119Z from
2026-06-21T23:45:58.226635796Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:959:in
2026-06-21T23:45:58.226807336Z `block in checking_for'
2026-06-21T23:45:58.226925652Z from
2026-06-21T23:45:58.227168052Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:361:in
2026-06-21T23:45:58.227331215Z `block (2 levels) in postpone'
2026-06-21T23:45:58.230151479Z from
2026-06-21T23:45:58.230484324Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:331:in
2026-06-21T23:45:58.230596559Z `open'
2026-06-21T23:45:58.230823930Z from
2026-06-21T23:45:58.230934729Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:361:in
2026-06-21T23:45:58.231143056Z `block in postpone'
2026-06-21T23:45:58.231287405Z from
2026-06-21T23:45:58.231396058Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:331:in
2026-06-21T23:45:58.231523626Z `open'
2026-06-21T23:45:58.231666859Z from
2026-06-21T23:45:58.231797918Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:357:in
2026-06-21T23:45:58.232067297Z `postpone'
2026-06-21T23:45:58.232596880Z from
2026-06-21T23:45:58.232800392Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:958:in
2026-06-21T23:45:58.232984564Z `checking_for'
2026-06-21T23:45:58.233124462Z from
2026-06-21T23:45:58.233277432Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:654:in
2026-06-21T23:45:58.233445432Z `block in append_cflags'
2026-06-21T23:45:58.233583835Z from
2026-06-21T23:45:58.233709471Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:653:in
2026-06-21T23:45:58.233841669Z `each'
2026-06-21T23:45:58.233943961Z from
2026-06-21T23:45:58.234098078Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:653:in
2026-06-21T23:45:58.234355046Z `append_cflags'
2026-06-21T23:45:58.234521662Z from extconf.rb:7:in `<main>'
2026-06-21T23:45:58.235091082Z
2026-06-21T23:45:58.235682925Z To see why this extension failed to compile, please check the mkmf.log which can
2026-06-21T23:45:58.236355975Z be found here:
2026-06-21T23:45:58.237348520Z
2026-06-21T23:45:58.237561033Z /Users/local/.gem/extensions/universal-darwin-25/2.6.0/json-2.7.6/mkmf.log
2026-06-21T23:45:58.237696799Z
2026-06-21T23:45:58.237844304Z extconf failed, exit code 1
2026-06-21T23:45:58.237940435Z
2026-06-21T23:45:58.238081705Z Gem files will remain installed in /Users/local/.gem/gems/json-2.7.6 for
2026-06-21T23:45:58.238205455Z inspection.
2026-06-21T23:45:58.238339972Z Results logged to
2026-06-21T23:45:58.238416153Z /Users/local/.gem/extensions/universal-darwin-25/2.6.0/json-2.7.6/gem_make.out
2026-06-21T23:45:58.238486138Z
2026-06-21T23:45:58.238645725Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/ext/builder.rb:99:in
2026-06-21T23:45:58.238776513Z `run'
2026-06-21T23:45:58.238885344Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/ext/ext_conf_builder.rb:47:in
2026-06-21T23:45:58.239577023Z `block in build'
2026-06-21T23:45:58.239738813Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/tempfile.rb:295:in
2026-06-21T23:45:58.240301587Z `open'
2026-06-21T23:45:58.240479166Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/ext/ext_conf_builder.rb:29:in
2026-06-21T23:45:58.240617028Z `build'
2026-06-21T23:45:58.240771697Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/ext/builder.rb:185:in
2026-06-21T23:45:58.240934642Z `block in build_extension'
2026-06-21T23:45:58.241142510Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/monitor.rb:235:in
2026-06-21T23:45:58.241272068Z `mon_synchronize'
2026-06-21T23:45:58.241456456Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/ext/builder.rb:181:in
2026-06-21T23:45:58.241735821Z `build_extension'
2026-06-21T23:45:58.241844233Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/ext/builder.rb:229:in
2026-06-21T23:45:58.242097182Z `block in build_extensions'
2026-06-21T23:45:58.242209848Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/ext/builder.rb:226:in
2026-06-21T23:45:58.242888230Z `each'
2026-06-21T23:45:58.243058223Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/ext/builder.rb:226:in
2026-06-21T23:45:58.243208417Z `build_extensions'
2026-06-21T23:45:58.243317447Z /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/installer.rb:830:in
2026-06-21T23:45:58.243474459Z `build_extensions'
2026-06-21T23:45:58.243571008Z /Users/local/.gem/gems/bundler-2.4.22/lib/bundler/rubygems_gem_installer.rb:76:in
2026-06-21T23:45:58.243933461Z `build_extensions'
2026-06-21T23:45:58.244113825Z /Users/local/.gem/gems/bundler-2.4.22/lib/bundler/rubygems_gem_installer.rb:28:in
2026-06-21T23:45:58.244380657Z `install'
2026-06-21T23:45:58.244670910Z /Users/local/.gem/gems/bundler-2.4.22/lib/bundler/source/rubygems.rb:203:in
2026-06-21T23:45:58.244876078Z `install'
2026-06-21T23:45:58.245134172Z /Users/local/.gem/gems/bundler-2.4.22/lib/bundler/installer/gem_installer.rb:54:in
2026-06-21T23:45:58.245282860Z `install'
2026-06-21T23:45:58.245424604Z /Users/local/.gem/gems/bundler-2.4.22/lib/bundler/installer/gem_installer.rb:16:in
2026-06-21T23:45:58.245571378Z `install_from_spec'
2026-06-21T23:45:58.245670288Z /Users/local/.gem/gems/bundler-2.4.22/lib/bundler/installer/parallel_installer.rb:130:in
2026-06-21T23:45:58.245897320Z `do_install'
2026-06-21T23:45:58.246107435Z /Users/local/.gem/gems/bundler-2.4.22/lib/bundler/installer/parallel_installer.rb:121:in
2026-06-21T23:45:58.246277107Z `block in worker_pool'
2026-06-21T23:45:58.246377142Z /Users/local/.gem/gems/bundler-2.4.22/lib/bundler/worker.rb:62:in `apply_func'
2026-06-21T23:45:58.246491318Z /Users/local/.gem/gems/bundler-2.4.22/lib/bundler/worker.rb:57:in `block in
2026-06-21T23:45:58.246597254Z process_queue'
2026-06-21T23:45:58.246780049Z /Users/local/.gem/gems/bundler-2.4.22/lib/bundler/worker.rb:54:in `loop'
2026-06-21T23:45:58.247508319Z /Users/local/.gem/gems/bundler-2.4.22/lib/bundler/worker.rb:54:in
2026-06-21T23:45:58.247747293Z `process_queue'
2026-06-21T23:45:58.248091527Z /Users/local/.gem/gems/bundler-2.4.22/lib/bundler/worker.rb:90:in `block (2
2026-06-21T23:45:58.248210729Z levels) in create_threads'
2026-06-21T23:45:58.248367334Z
2026-06-21T23:45:58.248461198Z An error occurred while installing json (2.7.6), and Bundler cannot continue.
2026-06-21T23:45:58.248546286Z
2026-06-21T23:45:58.248806161Z In Gemfile:
2026-06-21T23:45:58.249005186Z cocoapods was resolved to 1.16.2, which depends on
2026-06-21T23:45:58.249273596Z cocoapods-core was resolved to 1.16.2, which depends on
2026-06-21T23:45:58.249527227Z algoliasearch was resolved to 1.27.5, which depends on
2026-06-21T23:45:58.249671238Z json
根本原因の分析
システムRuby 2.6 は、native extension をビルドする際に現在アクティブな Xcode の macOS SDK 内の Ruby ヘッダを参照する。SDK 内の Ruby ヘッダのディレクトリ構造を比較すると理解しやすい。
# Xcode 26.4.1 の MacOSX26.0.sdk
.../ruby-2.6.0/
└── universal-darwin25/ ← macOS 26.x (darwin25) 向け ✅
# Xcode 27 beta 1 の MacOSX27.0.sdk
.../ruby-2.6.0/
└── universal-darwin26/ ← macOS 27.x (darwin26) 向けのみ ❌
macOS 26.4 は darwin25 カーネルであるため、システムRuby は universal-darwin25/ruby/config.h を探す。しかし Xcode 27 の MacOSX27.0.sdk には universal-darwin26 しか含まれておらず、universal-darwin25 が存在しないためビルドが失敗する。
Xcode のメジャーバージョンと macOS のメジャーバージョンが一致していない場合に発生する問題で、前回の記事と全く同じ構造だ。
組み合わせ別のビルド結果
| 組み合わせ | 期待されるSDK | Darwin バージョン | ビルド結果 |
|---|---|---|---|
| Xcode 26.4.1 + macOS 26.4 | MacOSX26.0.sdk | darwin25 | ✅ 成功 |
| Xcode 27.0 Beta + macOS 26.4 | MacOSX27.0.sdk | darwin25 | ❌ 失敗 |
| Xcode 27.0 Beta + macOS 27.0 Beta | MacOSX27.0.sdk | darwin26 | ✅ 成功 |
解決策
現時点では、以下のいずれかの組み合わせを使用すると良いだろう。
- Xcode 26.4.1 + macOS 26.4(既存環境を継続利用する場合)
- Xcode 27.0 Beta + macOS 27.0 Beta(最新環境へ移行する場合)
長期的な解決策:SPM への移行
前回の記事でも触れたが、この問題の根本原因は CocoaPods が Ruby のシステム依存を持つことだ。Swift Package Manager(SPM)へ移行することで Ruby 環境への依存を排除でき、この種の問題が発生しなくなる。
CocoaPods の Specs リポジトリは 2026年12月2日 に読み取り専用となる予定であり、SPM 移行は長期的な観点からも不可避だ。
まとめ
Xcode 27.0 Beta + macOS 26.4 の Xcode Cloud 環境では、MacOSX27.0.sdk に darwin25 向けの Ruby 2.6 ヘッダが含まれていないため bundle install が失敗する。Xcode と macOS のメジャーバージョンが一致していれば問題は発生しない。
Xcode 27.0 Beta に移行する際は macOS 27.0 Beta 環境でビルドするか、当面は Xcode 26.4.1 + macOS 26.4 の組み合わせを継続するのが現実的な対応だ。根本的な解決には SPM への移行が望ましく、CocoaPods を継続利用している方の参考になれば幸いだ。
求人情報: クラスメソッドでは iOSエンジニアを募集しています
スターバックスデジタルテクノロジー部では、iOSアプリ開発のできるエンジニアを募集しています。misc-iosなどで、新しいXcodeやiOSの機能についてあれこれ共有しながら一緒に働いてくれる方の応募をお待ちしております!
その他の領域でもiOS/Androidエンジニアを募集しています。一緒にモバイルアプリ開発についてお話ししましょう!









