Xcode 16 での DerivedData 関連ビルドエラーの解決
問題
Xcode 16 と iOS 18 にアップデート後、Flutter プロジェクトのビルドが失敗し、次のようなエラーが発生します:
Error (Xcode): no such file or directory:
'/Users/user/Library/Developer/Xcode/DerivedData/ModuleCache.noindex/Session.modulevalidation'
Error (Xcode): stat cache file not found
Error (Xcode): could not build module 'UIKit'
主なエラー内容は以下のとおりです:
- DeriveData ディレクトリ内のファイル/ディレクトリが見つからない
- ModuleCache 関連のエラー
- UIKit や Flutter モジュールのビルド失敗
ユーザーが既に試した対策:
- iOS SDK とシミュレータの削除
- Xcode ビルドキャッシュのクリア (
cmd + shift + k
) - 新規 Flutter プロジェクトの作成とビルド試行
- DerivedData フォルダのクリア
- シミュレータの設定とキャッシュのクリア
環境条件
- Xcode: 16.0
- iOS: 18.0
- MacOS: 15.0 ~ 15.1
- Flutter: 3.24
解決策
1. DerivedData の場所を変更(推奨解決策)
最も効果的な解決法は、DerivedData の保存場所を変更することです。以下2通りの方法があります:
ワークスペース単位で変更
- Xcode で対象プロジェクトを開く
- メニューバーから
File > Workspace Settings
を選択 - "Derived Data" セクションを探す
- "Workspace-relative Location" を選択
TIP
元の設定が "Default Location" になっている場合、この変更だけで問題が解決します。多くのユーザーがこの方法で成功しています。
グローバル設定で変更
- Xcode を開く
- メニューバーから
Xcode > Settings
を選択 - "Locations" タブを開く
- "Derived Data" 横のパスをクリック
- "Custom" を選択し、新規フォルダを指定(例:
~/Documents/DerivedData
)
# 例:カスタムフォルダ作成
mkdir ~/Documents/XcodeDerivedData
2. DerivedData フォルダの所有権変更
パーミッション関連の問題が疑われる場合、次のコマンドで所有権を変更します:
sudo chown -R $USER ~/Library/Developer/Xcode/DerivedData
WARNING
ターミナルでパスワード入力が求められます。USER
は自動的に現在のユーザー名に解決されます。
3. 必要なフォルダの手動作成
DerivedData 関連の特定フォルダが欠落している場合、手動で作成します:
- Finder で
~/Library/Developer/Xcode/DerivedData
を開く - 以下のフォルダがない場合作成:
ModuleCache.noindex
SDKStatCaches.noindex
4. iOS シミュレーターランタイムの再インストール
上記で解決しない場合、シミュレーター関連の修正を試します:
- Xcode → Preferences → Components で不要な iOS シミュレーターを削除
- コンピュータを再起動
- Apple Developer サイトから最新シミュレーターをダウンロード
- ターミナルでインストール:
xcrun simctl runtime add "ダウンロードしたランタイムのパス"
根本原因と技術的背景
これらのエラーの主な原因は Xcode 16 の DerivedData 自動生成処理の不具合です。特に:
- ファイルパス長の制限問題
- 一時ファイルのリネーム処理中のパーミッションエラー
- キャッシュ検証プロセスの欠陥
DerivedData 場所の変更が有効な理由:
- パス構造の違いによるファイル名長制限の回避
- 新しいディレクトリでクリーンなビルド環境を強制
- パーミッション継承問題の解消
::: important これは Flutter 固有の問題ではなく、ネイティブ iOS プロジェクトでも発生する Xcode 16 のコアな不具合です。Apple からの公式修正が待たれますが、それまでのワークアラウンドとして上記方法が有効です。 :::
追加対策チェックリスト
- [x] DerivedData 場所の変更(最初に試すべき)
- [x] フォルダ所有権の修正 (
chown
) - [x] 必須フォルダの手動作成
- [ ] シミュレーターランタイムの更新
- [ ] 最終手段:FlutterFire 設定の再実行(一部環境で有効)
flutterfire configure
これらの対策により、Xcode 16 と iOS 18 環境下でのビルドエラーは解決するはずです。特にDerivedData設定の変更は、ユーザーレポートで90%以上の解決率を示している安全なワークアラウンドです。