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以降 に更新する方法があります。多くのユーザーがこの方法で解決を確認しています。
# CocoaPodsの更新
sudo gem update cocoapods
# プロジェクトディレクトリで実行
cd ios
pod install --repo-update
# ビルドのクリーン(Xcode内)
Shift + Command + K
TIP
pod --version
で現在のバージョンを確認できます
方法2: 手動置換(緊急対応)
プロジェクト内のDT_TOOLCHAIN_DIR
をTOOLCHAIN_DIR
に一括置換する方法:
- Xcodeで Edit > Find > Find and Replace in Workspace を選択
DT_TOOLCHAIN_DIR
をTOOLCHAIN_DIR
に置換- すべて置換(Replace All) を実行
- Command + S で保存
- Product > Clean Build Folder
- プロジェクトを再ビルド
注意
この方法は一時的な解決策です。ライブラリの更新後は元に戻すことを推奨します
Flutter開発者向け特別手順
Flutterプロジェクトの場合、ios/Podfile
の末尾に以下のスクリプトを追加します:
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
その後、以下のコマンドを実行:
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を最新版に更新:
pod update Firebase
WebKit関連エラーWKWebsiteDataStore.h
でエラーが発生する場合:
- ファイルを開く:
sudo nano /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS*.sdk/System/Library/Frameworks/WebKit.framework/Headers/WKWebsiteDataStore.h
__IPHONE_OS_VERSION_MAX_ALLOWED
の値を170000
から180000
に変更
追加のトラブルシューティング
上記の方法で解決しない場合の対応:
Xcodeのビルド設定を確認:
- LIBRARY_SEARCH_PATHS に
DT_TOOLCHAIN_DIR
が含まれていないか確認 $(inherited)
を削除してみる
- LIBRARY_SEARCH_PATHS に
完全クリーン手順:
# Flutterプロジェクトの場合
flutter clean
flutter pub cache repair
rm -rf ios/Pods ios/Podfile.lock
# 全プロジェクト共通
pod cache clean --all
pod deintegrate
pod setup
pod install
開発環境のセットアップ
バージョン競合を避けるための環境設定:
# 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
結論
主な解決方法は以下のいずれかです:
- CocoaPodsのバージョンアップ (v1.15.2以上)
- 環境変数の一括置換
- Podfileへの修正スクリプト追加
このエラーはAppleがXcode 15で行った変更に起因するため、ライブラリのアップデートがリリースされ次第、恒久的な解決が可能となります。特にFirebaseやGoogleMLKitなどの主要ライブラリーは速やかに対応すると思われますので、定期的なアップデートを推奨します。