User Apollo Client in combination wit Pulse Logger

Question: How should network logging & URLSession metrics be implemented in Apollo iOS v2 (replacement for URLSessionClient subclassing)?

I’m migrating an iOS app from Apollo iOS < 2.0 to Apollo iOS v2, and I’m running into confusion around network observability.

Background

In Apollo iOS < 2.0, it was possible to:

  • Subclass URLSessionClient

  • Override URLSessionDelegate methods such as:

    • urlSession(_:dataTask:didReceive:)

    • urlSession(_:task:didFinishCollecting:)

    • urlSession(_:task:didCompleteWithError:)

  • Forward those events to the Pulse network logging tool

  • Inject the custom client into RequestChainNetworkTransport

This allowed full access to:

  • Request / response bodies

  • Errors

  • URLSessionTaskMetrics

Problem in Apollo iOS v2

In Apollo iOS v2:

  • URLSessionClient is no longer subclassable

  • URLSession delegate callbacks are no longer exposed

  • The networking layer has been redesigned

  • The underlying URLSessionTask is not accessible

At the same time:

  • Interceptor APIs differ depending on the v2 version

  • Some documented interceptor examples don’t exist in tagged releases

  • It’s unclear which extension points are intended for observability vs request mutation

This makes it difficult to reproduce the same network logging behavior that was possible in v1.x.

Question

What is the officially supported way in Apollo iOS v2 to:

  1. Observe all GraphQL network requests and responses

  2. Capture errors

  3. Capture URLSessionTaskMetrics (DNS, TLS, timing, etc.)

Is the intended approach:

  • To rely on external tools observing URLSession directly (e.g. via URLSession instrumentation)?

  • To use Apollo interceptors only for semantic context (headers, operation name)?

  • Or is there a recommended Apollo-level hook for network observability?

Additionally:

  • Which Apollo iOS v2 versions are expected to support interceptor-based logging?

  • Are there plans to document a migration path for teams relying on URLSessionClient subclassing?

Thanks — clarification here would really help teams migrating from v1.x.