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不一致を区別します。
確認方法
xcodebuild -versionがBeta 6以降を示すことを確認します。- クリーンビルドし、AIR 2.9/2.8警告と
air64_v28エラーが消えたことを確認します。 - 最小サポート対象のmacOSでアプリを起動し、該当Core Imageフィルタを実行します。
- 同じ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以降へ更新し、ツールチェーンを確認してクリーンビルドするのが推奨対応です。
