Verifying TLS 1.3 early_data behavior on iOS 26

Development environment

  • Xcode 26.0 Beta 6
  • iOS 26 Simulator
  • macOS 15.6.1

To verify TLS 1.3 session resumption behavior in URLSession, I configured URLSessionConfiguration as follows and sent an HTTP GET request:

let config = URLSessionConfiguration.ephemeral
config.tlsMinimumSupportedProtocolVersion = .TLSv13
config.tlsMaximumSupportedProtocolVersion = .TLSv13
config.httpMaximumConnectionsPerHost = 1
config.httpAdditionalHeaders = ["Connection": "close"]
config.enablesEarlyData = true

let session = URLSession(configuration: config, delegate: nil, delegateQueue: nil)
let url = URL(string: "https://www.google.com")!
var request = URLRequest(url: url)
request.assumesHTTP3Capable = true
request.httpMethod = "GET"
let task = session.dataTask(with: request)  { data, response, error in
    if let error = error {
        print("Error during URLSession data task: \(error)")
        return
    }
    if let data = data, let responseString = String(data: data, encoding: .utf8) {
        print("Received data via URLSession: \(responseString)")
    } else {
        print("No data received or data is not UTF-8 encoded")
    }
}
task.resume()

However, after capturing the packets, I found that the ClientHello packet did not include the early_data extension. It seems that enablesEarlyData on URLSessionConfiguration is not being applied. How can I make this work properly?

I ran the same test in the environment below, and the ClientHello packet still does not include early_data in this case either.

  • Xcode 26.0 Beta 7
  • iPhone SE (2nd generation) running iOS 26.0 (23A55336a)
Verifying TLS 1.3 early_data behavior on iOS 26
 
 
Q