Xcode 27でSwiftUI Previewを表示すると、通常のビルドやシミュレータ実行は成功するのに、Preview用プロセスのXCPreviewAgentだけがEXC_BAD_ACCESS (SIGSEGV)で終了することがあります。本記事では、Apple Developer Forumsで2026年9月に報告された事例を基に、アプリ側のクラッシュとPreview基盤側のクラッシュを切り分け、作業を継続しながらAppleへ有効な診断情報を提出する手順を説明します。
代表的なクラッシュログ
XCPreviewAgent
Exception: EXC_BAD_ACCESS (SIGSEGV)
Termination: Segmentation fault: 11
Crashing Thread:
libswiftCore.dylib
swift_conformsToProtocolMaybeInstantiateSuperclasses(...)
swift_conformsToProtocolWithExecutionContext
swift::_conformsToProtocol(...)
swift::_checkGenericRequirements(...)
同じ報告では、依存関係を一部外した後に次の別シグネチャも確認されています。
Exception: EXC_BAD_ACCESS (SIGSEGV)
KERN_INVALID_ADDRESS
Crashing Thread: com.apple.xojit_executor.wrapper_functions
libobjc.A.dylib readClass(objc_class*, bool, bool)
libobjc.A.dylib map_images_nolock
libobjc.A.dylib map_images
libobjc.A.dylib _objc_map_images
原因
公開されたクラッシュレポートでは、Swiftのプロトコル適合判定またはObjective-Cランタイムが、PreviewのJIT実行で読み込まれるイメージを処理している途中に落ちています。報告者は複数のSwift Package/Frameworkを含む大規模ターゲットで再現し、通常のPreview実行では失敗する一方、Legacy Preview Executionでは表示できるとしています。
重要:Appleは根本原因をまだ確定していません。プロジェクト規模、JIT、特定のFrameworkが原因だと断定しないでください。AppleのDeveloper Tools Engineerは、再現プロジェクトまたはPreview診断レポートがないと調査を進めにくいとして、Feedback Assistantへの提出を案内しています。
発生条件・対象バージョン
- Xcode 27(報告環境はmacOS 27.0上のXcode 27)
- iOS 27.0 SimulatorでのSwiftUI Preview
- 複数の自社Framework、Swift Package、サードパーティSDKをリンクした比較的大きなAppターゲット
- 標準のJITベースPreview実行時
報告者はXcode 26でも発生したと記載しています。このため「Xcode 27だけの回帰」とは確定していません。また、2026年9月28日時点でAppleが明記した修正版はありません。
推奨する切り分け手順
- 通常ビルドを確認する:
Product > Buildを実行し、コンパイルやリンク自体が成功するか確認します。 - シミュレータまたは実機でアプリを起動する:アプリ本体でも同じ箇所が落ちる場合は、Preview固有問題ではなくアプリコードのクラッシュとして調査します。
- 複数のViewで再現するか確認する:無関係な小さなViewでも同じ
XCPreviewAgentシグネチャが出るなら、特定Viewの実装だけを疑うべきではありません。 - Previewのクラッシュレポートを確認する:
~/Library/Logs/DiagnosticReports/にあるXCPreviewAgent-*.ipsを開き、先頭の例と一致するか確認します。 - 依存関係を一つずつ切り分ける:テスト用ブランチでのみ行い、FrameworkやPackageを外した後も同じシグネチャが続くか確認します。
一時的に作業を続ける方法
1. Legacy Preview Executionを試す
Apple Forumsの報告者は、Preview設定でUse Legacy Preview Executionを有効にするとクラッシュを回避できたとしています。これは当該環境で確認された一時回避策であり、Appleがすべてのプロジェクトに対して保証した修正ではありません。設定変更後はCanvasを再起動し、同じViewを再表示してください。
2. Simulator/実機で画面を確認する
Legacy実行でも失敗する場合は、Previewを必須にせず、通常のRunで対象画面へ遷移して確認します。Preview専用の問題なら、アプリのビルドや配布を止める必要はありません。
3. 最小再現プロジェクトを作る
新規プロジェクトへ対象Viewと依存関係を段階的に追加します。最小構成で再現すれば、Appleが原因を特定しやすくなります。機密コードを含む本番プロジェクトをそのまま提出する必要も避けられます。
Appleが案内している診断提出方法
- AppleのProfiles and LogsページからSwift Previews向けロギングプロファイルを確認し、対象Macに導入します。
- 問題を再現します。
- エラーバナーのDiagnosticsを選ぶか、
Editor > Canvas > Diagnosticsを開きます。 - Generate Reportを押し、生成された
previews-diagnostics-*.zipを保存します。 - 可能なら最小再現プロジェクト、Macのsysdiagnose、物理Preview端末を使う場合はその端末のsysdiagnoseも添付し、Feedback Assistantへ提出します。
解決を確認する方法
- 標準のPreview実行に戻してもCanvasが表示される
XCPreviewAgent-*.ipsが新たに生成されない- 複数の無関係なSwiftUI ViewでもPreviewが安定する
- 通常ビルド、Simulator実行、実機実行に新しい問題がない
注意点
DerivedDataの削除だけで直ると断定できる問題ではありません。削除後に再発するなら診断収集を優先してください。- サードパーティSDKを原因と決めつけないでください。元報告では一つのSDKを完全に外しても同等のクラッシュが継続しました。
- Legacy Preview Executionは一時回避策です。Xcode更新後は標準実行で再検証してください。
- 修正版は公式確認できていません。Feedback AssistantのResolutionとXcodeリリースノートを確認してください。
まとめ
XCPreviewAgent: EXC_BAD_ACCESS (SIGSEGV)がPreviewだけで発生する場合は、まず通常のビルド/実行と切り分けます。作業継続にはLegacy Preview ExecutionまたはSimulator実行を利用し、根本対応のためにはAppleの案内どおりPreview診断、最小再現プロジェクト、sysdiagnoseをFeedback Assistantへ提出してください。
