Skip to content

Xcode 15 での DT_TOOLCHAIN_DIR から TOOLCHAIN_DIR への移行

問題の概要

Xcode 14 では正常に動作していたプロジェクトが、Xcode 15 と macOS Sonoma (v14) にアップグレードした後に以下のエラーが発生する現象が報告されています:

Firebase - DT_TOOLCHAIN_DIR cannot be used to evaluate LIBRARY_SEARCH_PATHS, use TOOLCHAIN_DIR instead
FirebaseAnalytics - DT_TOOLCHAIN_DIR cannot be used to evaluate LIBRARY_SEARCH_PATHS, use TOOLCHAIN_DIR instead
GoogleMLKit - DT_TOOLCHAIN_DIR cannot be used to evaluate LIBRARY_SEARCH_PATHS, use TOOLCHAIN_DIR instead

これはXcode 15でAppleがツールチェーンのディレクトリを参照する変数をDT_TOOLCHAIN_DIRからTOOLCHAIN_DIRに変更したことが原因です。プロジェクトや依存ライブラリが古い変数名を使用している場合、このエラーが発生します。

主な解決策

方法1: CocoaPodsの更新(推奨)

根本的な解決策として、CocoaPodsを v1.15.2以降 に更新する方法があります。多くのユーザーがこの方法で解決を確認しています。

bash
# CocoaPodsの更新
sudo gem update cocoapods

# プロジェクトディレクトリで実行
cd ios
pod install --repo-update

# ビルドのクリーン(Xcode内)
Shift + Command + K

TIP

pod --versionで現在のバージョンを確認できます

方法2: 手動置換(緊急対応)

プロジェクト内のDT_TOOLCHAIN_DIRTOOLCHAIN_DIRに一括置換する方法:

  1. Xcodeで Edit > Find > Find and Replace in Workspace を選択
  2. DT_TOOLCHAIN_DIRTOOLCHAIN_DIRに置換
  3. すべて置換(Replace All) を実行
  4. Command + S で保存
  5. Product > Clean Build Folder
  6. プロジェクトを再ビルド

注意

この方法は一時的な解決策です。ライブラリの更新後は元に戻すことを推奨します

Flutter開発者向け特別手順

Flutterプロジェクトの場合、ios/Podfileの末尾に以下のスクリプトを追加します:

ruby
post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      xcconfig_path = config.base_configuration_reference.real_path
      xcconfig = File.read(xcconfig_path)
      xcconfig_mod = xcconfig.gsub(/DT_TOOLCHAIN_DIR/, "TOOLCHAIN_DIR")
      File.open(xcconfig_path, "w") { |file| file << xcconfig_mod }
    end
  end
end

その後、以下のコマンドを実行:

bash
flutter clean
rm ios/Podfile.lock
rm -rf ios/Pods
flutter pub get
cd ios
pod install

詳細な原因と対処法

Xcode 15ではツールチェーンの参照方法が次のように変更されました:

Xcode バージョン変数名状態
Xcode 14以前DT_TOOLCHAIN_DIR非推奨
Xcode 15以降TOOLCHAIN_DIR推奨

コンポーネントごとの対応

特定のライブラリでエラーが発生する場合の対応:

Firebaseの場合 Firebase SDKを最新版に更新:

bash
pod update Firebase

WebKit関連エラーWKWebsiteDataStore.hでエラーが発生する場合:

  1. ファイルを開く:
bash
sudo nano /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS*.sdk/System/Library/Frameworks/WebKit.framework/Headers/WKWebsiteDataStore.h
  1. __IPHONE_OS_VERSION_MAX_ALLOWEDの値を170000から180000に変更

追加のトラブルシューティング

上記の方法で解決しない場合の対応:

  1. Xcodeのビルド設定を確認:

    • LIBRARY_SEARCH_PATHSDT_TOOLCHAIN_DIRが含まれていないか確認
    • $(inherited)を削除してみる
  2. 完全クリーン手順:

bash
# Flutterプロジェクトの場合
flutter clean
flutter pub cache repair
rm -rf ios/Pods ios/Podfile.lock

# 全プロジェクト共通
pod cache clean --all
pod deintegrate
pod setup
pod install

開発環境のセットアップ

バージョン競合を避けるための環境設定:

bash
# Homebrew & rbenvのインストール
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install rbenv ruby-build

# rbenvの設定
echo 'eval "$(rbenv init -)"' >> ~/.zshrc
source ~/.zshrc

# Rubyのインストール
rbenv install 3.3.3
rbenv global 3.3.3

# CocoaPodsのインストール
gem install cocoapods
rbenv rehash

結論

主な解決方法は以下のいずれかです:

  1. CocoaPodsのバージョンアップ (v1.15.2以上)
  2. 環境変数の一括置換
  3. Podfileへの修正スクリプト追加

このエラーはAppleがXcode 15で行った変更に起因するため、ライブラリのアップデートがリリースされ次第、恒久的な解決が可能となります。特にFirebaseやGoogleMLKitなどの主要ライブラリーは速やかに対応すると思われますので、定期的なアップデートを推奨します。