PC パソコン

Xcode「air-lld: error: symbol(s) not found for target ‘air64_v28-apple-macosx26.0.0’」の解決方法【Xcode 27 Beta 5】

Xcode 27 Beta 5で、Metal Shading Languageを使ったCore ImageカスタムカーネルをmacOS 26向けにリンクすると、air-lld: error: symbol(s) not found for target 'air64_v28-apple-macosx26.0.0'でビルドが停止することがあります。原因はCoreImage.metallibとリンク対象のAIRバージョン不一致で、Xcode 27 Beta 6以降への更新が推奨されます。

表示されるエラー

air-lld: warning: ignoring file '.../CoreImage.framework/.../CoreImage.metallib',
file AIR version (2.9) is bigger than the one of the target being linked (2.8)

air-lld: error: symbol(s) not found for target 'air64_v28-apple-macosx26.0.0'

metal: error: air-lld command failed with exit code 1 (use -v to see invocation)

先頭の警告が切り分けの鍵です。Xcode 27 Beta 5に含まれるCore Image側MetalライブラリはAIR 2.9ですが、macOS 26向けリンク対象はAIR 2.8です。互換性のないライブラリが無視された結果、必要なシンボルを解決できなくなります。

原因・発生条件・対象バージョン

  • Xcode 27.0 Beta 5を使用している
  • Core ImageカスタムカーネルをMetal Shading Languageでビルドしている
  • macOS 26以前へのバックデプロイを設定している
  • MetalリンクでCore Imageフレームワークを使用している

発生版:Xcode 27.0 Beta 5

修正版:Xcode 27.0 Beta 6以降。Apple Developer ForumsのAccepted Answerで、投稿者がBeta 6での修正を確認しています。この問題を名指しした個別のFeedback番号やリリースノート項目は公開情報では確認できません。

Xcode 27の公式要件ではmacOS 12〜27がデプロイ対象に含まれるため、macOS 26を対象にすること自体は誤りではありません。

推奨する解決手順

1. 使用中のXcodeを確認する

xcodebuild -version
xcode-select -p
xcrun --find metal

複数のXcodeを併設している場合は、GUI、コマンドライン、CIが同じXcodeを参照しているか確認します。

2. Xcode 27 Beta 6以降へ更新する

修正確認済みのBeta 6、またはそれ以降のXcode 27ベータ、RC、正式版へ更新してください。併設したXcodeへ切り替える例は次のとおりです。

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
xcodebuild -version

3. ツールチェーン切り替え後にクリーンビルドする

Xcodeの「Product」→「Clean Build Folder」を実行します。CIでもXcodeパスを更新し、Beta 5で生成したMetal中間成果物を再利用しないよう関連キャッシュを再生成します。

4. デプロイメントターゲットを確認する

xcodebuild -showBuildSettings | grep MACOSX_DEPLOYMENT_TARGET

アプリ、Metalライブラリ、CIの各ターゲットが意図したmacOSバージョンを使っているか確認します。Xcode 27はmacOS 26へのバックデプロイをサポートするため、このエラーだけを理由に最小OSを27へ上げる必要はありません。

更新できない場合の代替策

  • 検証済みの旧Xcodeを一時使用する:Xcode 26.6など、プロジェクトで正常ビルドできていたXcodeを併設します。SDKやSwiftコンパイラが変わるため、同じコミットをCIと実機で再検証してください。
  • macOS 27ターゲットは切り分けに限定する:AIR 2.9側へそろえてリンクできる可能性はありますが、macOS 26以前のサポートを失います。製品要件が許す場合を除き恒久策にはしないでください。
  • 最小プロジェクトで再現する:Core Image Metalカーネルとリンク設定だけを残し、通常の未定義シンボルとSDK内ライブラリのAIR不一致を区別します。

確認方法

  1. xcodebuild -versionがBeta 6以降を示すことを確認します。
  2. クリーンビルドし、AIR 2.9/2.8警告とair64_v28エラーが消えたことを確認します。
  3. 最小サポート対象のmacOSでアプリを起動し、該当Core Imageフィルタを実行します。
  4. 同じXcodeを明示したCIでも再ビルドします。

注意点

  • MTL_LANGUAGE_REVISION=Metal41でBeta 5のリンクを通せたという報告がありますが、macOS 26ではMetal 4.1がサポートされず実行時クラッシュしたため解決策にはなりません。
  • 別のSDKからCoreImage.metallibやCore Imageフレームワークをコピーしないでください。SDK内部の組み合わせが崩れます。
  • DerivedData削除だけではBeta 5付属ライブラリの不一致は直りません。更新後の残存中間物を除く目的で行います。
  • symbol(s) not foundだけで判断せず、直前にCoreImage.metallibとAIR 2.9/2.8の警告があるか確認してください。

まとめ

Xcode 27 Beta 5のair64_v28エラーは、Core ImageのAIR 2.9ライブラリとmacOS 26向けAIR 2.8リンク対象の不一致を伴う問題です。Xcode 27 Beta 6以降へ更新し、ツールチェーンを確認してクリーンビルドするのが推奨対応です。

参照した公式情報