PC パソコン

Xcode「ResultDataPublisher missing Foundation.URLRequest.httpMethod symbol」でXCTestがクラッシュする場合の解決方法

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.httpMethod missing 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への一時切り替えを限定的に使用します。

公式情報