Skip to content

Xcode 16 での DerivedData 関連ビルドエラーの解決

問題

Xcode 16 と iOS 18 にアップデート後、Flutter プロジェクトのビルドが失敗し、次のようなエラーが発生します:

terminal
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通りの方法があります:

ワークスペース単位で変更

  1. Xcode で対象プロジェクトを開く
  2. メニューバーから File > Workspace Settings を選択
  3. "Derived Data" セクションを探す
  4. "Workspace-relative Location" を選択

TIP

元の設定が "Default Location" になっている場合、この変更だけで問題が解決します。多くのユーザーがこの方法で成功しています。

グローバル設定で変更

  1. Xcode を開く
  2. メニューバーから Xcode > Settings を選択
  3. "Locations" タブを開く
  4. "Derived Data" 横のパスをクリック
  5. "Custom" を選択し、新規フォルダを指定(例:~/Documents/DerivedData
bash
# 例:カスタムフォルダ作成
mkdir ~/Documents/XcodeDerivedData

2. DerivedData フォルダの所有権変更

パーミッション関連の問題が疑われる場合、次のコマンドで所有権を変更します:

bash
sudo chown -R $USER ~/Library/Developer/Xcode/DerivedData

WARNING

ターミナルでパスワード入力が求められます。USER は自動的に現在のユーザー名に解決されます。

3. 必要なフォルダの手動作成

DerivedData 関連の特定フォルダが欠落している場合、手動で作成します:

  1. Finder で ~/Library/Developer/Xcode/DerivedData を開く
  2. 以下のフォルダがない場合作成:
    • ModuleCache.noindex
    • SDKStatCaches.noindex

4. iOS シミュレーターランタイムの再インストール

上記で解決しない場合、シミュレーター関連の修正を試します:

  1. Xcode → Preferences → Components で不要な iOS シミュレーターを削除
  2. コンピュータを再起動
  3. Apple Developer サイトから最新シミュレーターをダウンロード
  4. ターミナルでインストール:
bash
xcrun simctl runtime add "ダウンロードしたランタイムのパス"

根本原因と技術的背景

これらのエラーの主な原因は Xcode 16 の DerivedData 自動生成処理の不具合です。特に:

  • ファイルパス長の制限問題
  • 一時ファイルのリネーム処理中のパーミッションエラー
  • キャッシュ検証プロセスの欠陥

DerivedData 場所の変更が有効な理由:

  1. パス構造の違いによるファイル名長制限の回避
  2. 新しいディレクトリでクリーンなビルド環境を強制
  3. パーミッション継承問題の解消

::: important これは Flutter 固有の問題ではなく、ネイティブ iOS プロジェクトでも発生する Xcode 16 のコアな不具合です。Apple からの公式修正が待たれますが、それまでのワークアラウンドとして上記方法が有効です。 :::

追加対策チェックリスト

  • [x] DerivedData 場所の変更(最初に試すべき)
  • [x] フォルダ所有権の修正 (chown)
  • [x] 必須フォルダの手動作成
  • [ ] シミュレーターランタイムの更新
  • [ ] 最終手段:FlutterFire 設定の再実行(一部環境で有効)
bash
flutterfire configure

これらの対策により、Xcode 16 と iOS 18 環境下でのビルドエラーは解決するはずです。特にDerivedData設定の変更は、ユーザーレポートで90%以上の解決率を示している安全なワークアラウンドです。