Xcode 26.4でiOS 15 Simulatorに対してxcodebuild testを実行すると、テストコードが始まる前にResultDataPublisher.frameworkがFoundation.URLRequest.httpMethodのシンボルを見つけられず、XCTestがクラッシュすることがあります。これはアプリ内のURLRequest処理ではなく、Xcode 26.4のテスト基盤と古いSimulator Runtimeの組み合わせで発生する既知問題です。Apple EngineerはXcode 26.5 Beta 2で修正済みと案内しているため、正式版Xcode 26.5以降への更新が推奨されます。
エラーの特徴
代表的なログは次のようになります。
Testing failed:
xctest encountered an error
Early unexpected exit, operation never finished bootstrapping
Test crashed with signal abrt before establishing connection
dyld: Symbol not found:
_$s10Foundation10URLRequestV10httpMethodSSSgvs
Referenced from:
ResultDataPublisher.framework/ResultDataPublisher
Expected in:
iOS 15.x.simruntime/.../Foundation.framework/Foundation
シンボルをdemangleすると、次のsetterであることを確認できます。
xcrun swift-demangle '_$s10Foundation10URLRequestV10httpMethodSSSgvs'
Foundation.URLRequest.httpMethod.setter : Swift.String?
原因
ResultDataPublisher.frameworkは、テスト結果の収集・公開に使われるXcode内部のPrivate Frameworkです。Xcode 26.4のこのFrameworkがiOS 15 Simulator上で起動すると、必要なSwift FoundationシンボルをRuntime内の想定位置から解決できず、XCTestのブートストラップ完了前にdyldがプロセスを終了します。
重要:ログのシンボル名にURLRequest.httpMethodが含まれていても、通常はアプリやテスト内のrequest.httpMethod = "GET"が間違っているわけではありません。テストバンドルが開始する前にXcode側のResultDataPublisherがクラッシュしているなら、アプリコードを書き換えても根本解決になりません。
適用条件
Apple Developer Forumsの再現報告とApple Engineerの回答から、次の条件が中心です。
- Xcode 26.4を使用している。
- iOS 15系のSimulatorをテスト先にしている。報告例はiOS 15.2です。
xcodebuild testでXCTestを実行すると、接続確立前に終了する。- ログの参照元がアプリのFrameworkではなく
ResultDataPublisher.frameworkになっている。 - Xcode 26.2では同じテストが成功していたという再現例がある。
AppleのXcode 26.5リリースノートでは、Testingの既知問題として「Tests fail to run on iOS 15 simulators」(173337319/FB22333623)が扱われました。Apple Engineerは、表示上はKnown Issueになっていたものの、実際にはXcode 26.5 Beta 2で解決済みであり、リリースノートを更新すると説明しています。
推奨する解決手順
1. Xcode 26.5以降へ更新する
根本的な解決策は、Xcode 26.5の正式版またはそれ以降の安定版へ更新することです。2026年9月17日時点ではさらに新しいXcodeも提供されていますが、プロジェクト、macOS、CI環境の互換性を確認したうえで選んでください。修正が含まれる最低ラインはXcode 26.5です。
2. 使用中のXcodeを確認する
複数バージョンをインストールしている場合、IDEを更新してもCIやTerminalが古いXcode 26.4を参照していることがあります。
xcode-select -p
xcodebuild -version
swift --version
必要ならDeveloper Directoryを明示的に切り替え、初回セットアップを完了します。
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -runFirstLaunch
xcodebuild -version
3. iOS 15 Simulatorを確認する
インストール済みRuntimeと利用可能な端末を確認します。
xcrun simctl list runtimes
xcrun simctl list devices available
目的のiOS 15 SimulatorがUnavailableなら、XcodeのComponents設定とRuntimeの互換性を確認してください。今回の修正は古いiOS 15 SimulatorをテストできるようにするXcode側の修正であり、テスト要件があるのに安易に対象OSを外す必要はありません。
4. 更新後にテストを再実行する
まず同じSimulatorを指定して再実行します。
xcodebuild test -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone SE (2nd generation),OS=15.2' -resultBundlePath TestResults.xcresult
Swift Packageの場合は、PackageのScheme名を指定します。必要に応じて一度だけ新しいDerivedDataパスを使用し、古いテスト生成物の影響を除外します。
xcodebuild test -scheme FoundationOnlyRepro -destination 'platform=iOS Simulator,name=iPhone SE (2nd generation),OS=15.2' -derivedDataPath /tmp/xcode-26-5-test
更新できない場合の代替策
Xcode 26.2を一時的に固定する
フォーラムの再現環境ではXcode 26.2で同じフローが動作していました。すぐに26.5以降へ移行できないCIでは、検証済みのXcode 26.2を一時的に固定する方法があります。ただし、古いXcodeの利用はセキュリティ、SDK、App Store要件の制約を受けるため、恒久策にはしないでください。
新しいSimulator Runtimeでテストする
iOS 15固有の回帰テストが不要なジョブなら、利用可能な新しいSimulator Runtimeへ一時的に切り替えることでCIを継続できる場合があります。ただし、iOS 15対応を保証するテストの代替にはなりません。
CIのXcode選択をジョブ単位で固定する
複数のXcodeを置くセルフホスト環境では、ジョブ冒頭でDEVELOPER_DIRを指定すると、意図しない26.4の使用を防げます。
export DEVELOPER_DIR=/Applications/Xcode-26.5.app/Contents/Developer
xcodebuild -version
xcodebuild test -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone SE (2nd generation),OS=15.2'
推奨しない回避策
URLRequest.httpMethodをアプリコードから削除する。- Xcode内部の
ResultDataPublisher.frameworkを削除・置換・署名し直す。 - Simulator Runtime内のFoundationやSwiftライブラリを手動コピーする。
- リンク検索パスへPrivate FrameworkやRuntime内ライブラリを追加する。
これらはXcodeの内部構成を壊したり、別のABI不整合を招いたりします。修正済みXcodeへの更新を優先してください。
確認方法
xcodebuild -versionが26.5以降を示している。xcode-select -pが意図したXcodeのDeveloperディレクトリを示している。- iOS 15 Simulatorが
simctl list devices availableに表示される。 - XCTestがブートストラップを完了し、テストケースが実行される。
- ログに
ResultDataPublisher由来のURLRequest.httpMethodmissing symbolが出ない。 .xcresultが作成され、テスト結果をXcodeまたはxcresulttoolで確認できる。
注意点
- Appleが明示した修正版はXcode 26.5 Beta 2で、正式運用ではBetaではなくXcode 26.5正式版以降を使うのが安全です。
- 同じ「Early unexpected exit」でも、参照元Frameworkや欠落シンボルが異なれば別問題です。必ず完全なdyldログを確認してください。
- 更新後も再現する場合は、Xcodeのバージョン、Simulator Runtime、最小再現プロジェクト、診断ログを添えてFeedback Assistantへ報告します。
- CIではGUI上のXcodeとコマンドラインが同じバージョンを参照しているかを必ず確認します。
まとめ
Xcode 26.4でiOS 15 SimulatorのXCTestがResultDataPublisher missing Foundation.URLRequest.httpMethod symbolにより開始前にクラッシュする問題は、Xcodeのテスト基盤側の既知問題です。アプリのURLRequest実装を変更するのではなく、Xcode 26.5正式版以降へ更新し、xcode-selectとCIのDEVELOPER_DIRが更新後のXcodeを指していることを確認してください。更新できない場合は、検証済みのXcode 26.2固定または新しいRuntimeへの一時切り替えを限定的に使用します。
