Xcode 26でSwift.org配布のツールチェーンを選び、Swift Testingの@Testや#expectを使うと、TestingMacrosの実装が見つからないというビルドエラーが発生することがあります。Xcodeが選択中のコンパイラと互換性のないマクロプラグインを使う既知問題で、AppleはIssue 151799859をXcode 26 Beta 4で修正しました。
代表的なエラーログ
error: external macro implementation type
'TestingMacros.TestDeclarationMacro' could not be found for macro 'Test';
plugin for module 'TestingMacros' not found
error: external macro implementation type
'TestingMacros.ExpectMacro' could not be found for macro 'expect'
環境によって型名や後半の説明は異なる場合がありますが、TestingMacros、@Test、#expect、macro pluginに関する診断が同時に現れるのが特徴です。
原因
Xcode 26の影響版でSwift.orgツールチェーンをXcode > Toolchainsから選ぶと、テストターゲットのビルド時に、そのコンパイラと一致しないSwift Testingのマクロプラグインが選ばれることがあります。コンパイラはマクロ宣言を読み込めても、対応するTestingMacros実装をロードできず、展開前にビルドが停止します。
発生条件・対象バージョン
- Xcode 26 Beta 4より前の影響版を使用している
- Xcode付属の標準ツールチェーンではなく、Swift.orgツールチェーンを選択している
- テストターゲットがSwift Testingを使用している
@Test、@Suite、#expectなどのマクロを展開する段階で失敗する
公式修正版:Xcode 26 Beta 4以降。Xcode 26 Release NotesのTesting/Resolved IssuesでIssue 151799859として修正されています。
推奨する解決手順
- Xcodeを26 Beta 4以降、できれば最新の安定版へ更新します。
- Xcode > Toolchainsを開き、使用するSwift.orgツールチェーンを選び直します。
- ターミナルでXcodeとSwiftの参照先を確認します。
xcode-select -p
xcodebuild -version
xcrun swift --version
- Package Dependenciesを使用している場合は、File > Packages > Reset Package Cachesを実行してからResolve Package Versionsを実行します。
- Product > Clean Build Folderを実行し、必要ならDerived Dataを削除します。
- テストターゲットを再ビルドし、Swift Testingのテストを実行します。
更新できない場合の代替策
修正版Xcodeを導入できない間は、Xcode > ToolchainsでXcode Defaultへ戻し、Xcode付属のSwiftコンパイラとSwift Testingを同じ組み合わせで使用します。Swift.orgツールチェーン固有の機能を検証する必要がある場合は、Xcode内のテスト実行とコマンドラインでのツールチェーン検証を分ける方法があります。
# 選択されているSwiftを確認
xcrun --find swift
xcrun swift --version
# Swift Packageの場合の確認
swift test --version
swift test
ツールチェーンを混在させたまま、マクロバイナリだけを手作業でコピーする方法は推奨しません。コンパイラとプラグインのABIやプロトコルが一致せず、別のクラッシュや誤動作を招く可能性があります。
確認方法
xcodebuild -versionがXcode 26 Beta 4以降であることを確認します。xcrun swift --versionで意図したSwiftツールチェーンが使われていることを確認します。@Testを含む最小テストがコンパイルされることを確認します。#expectの失敗がコンパイルエラーではなく、通常のテスト失敗として結果画面に表示されることを確認します。- XcodeのTest Navigatorと、必要に応じて
swift testの両方で実行します。
import Testing
@Test
func addition() {
#expect(1 + 1 == 2)
}
注意点
- サードパーティ製マクロでも同じ文言が出るため、
TestingMacrosかどうかを必ず確認してください。 - Xcode Defaultでも失敗する場合は、依存関係のキャッシュ、対象プラットフォーム、Swift Testingパッケージの重複を調べます。
- CIでは
TOOLCHAINS、DEVELOPER_DIR、PATHにより、ローカルとは別のコンパイラが選択されることがあります。 - Derived Data削除は古い成果物の除去には有効ですが、影響版Xcodeの選択ロジック自体は修正しません。
まとめ
External macro implementation type 'TestingMacros.TestDeclarationMacro' could not be foundがSwift.orgツールチェーン選択時に出る場合、Xcode 26が互換性のないSwift Testingマクロプラグインを選択する既知問題を疑います。基本対応はXcode 26 Beta 4以降への更新です。更新できない場合はXcode Defaultへ戻し、コンパイラとマクロプラグインの組み合わせを統一してください。
参照した公式情報
- Xcode 26 Release Notes(Testing、Issue 151799859)
- Swift Testing
- Swift Testing Documentation
- Swift Package Manager Issue #8362
