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
URLSessionDelegatemethods 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:
-
URLSessionClientis no longer subclassable -
URLSession delegate callbacks are no longer exposed
-
The networking layer has been redesigned
-
The underlying
URLSessionTaskis 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:
-
Observe all GraphQL network requests and responses
-
Capture errors
-
Capture
URLSessionTaskMetrics(DNS, TLS, timing, etc.)
Is the intended approach:
-
To rely on external tools observing
URLSessiondirectly (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
URLSessionClientsubclassing?
Thanks — clarification here would really help teams migrating from v1.x.