CPListItem setImage: causes 29-second main thread hang on iOS 26.4 due to CoreUI performance regression

We're experiencing a severe main thread hang (29 seconds) in our CarPlay audio app when calling [CPListItem setImage:] on iOS 26.4. This issue affects 81% of our reported hang cases, and is concentrated on iOS 26.4.

Environment

  • iOS 26.4
  • CarPlay Audio app
  • Images are downloaded via SDWebImage, resized to appropriate scale, then set via [CPListItem setImage:] on the main thread

Problem

When multiple list item images finish downloading around the same time, each setImage: call triggers expensive synchronous CoreUI operations on the main thread. The total accumulated time causes a 29-second freeze.

The entire hang occurs inside Apple frameworks — no app code is on the hot path after calling setImage:.

Call Stack (simplified)

[CPListItem setImage:] └─ [CPImageSet initWithImage:treatmentBlock:] (57% + 21% + 18% = 96%) └─ [UIImageAsset imageWithTraitCollection:] └─ [UIImageAsset _withLock_imageWithConfiguration:] └─ [UIImageAsset _performLookUpRegisteredObjectForTraitCollection:] └─ [UITraitCollection _enumerateThemeAppearanceNamesForLookup:] └─ [CUICatalog _imageWithName:scaleFactor:deviceIdiom:...] └─ [CUIMutableStructuredThemeStore canGetRenditionWithKey:] └─ [CUIMutableStructuredThemeStore renditionWithKey:] └─ copyKeySignatureForKey / NSDictionaryM objectForKey: / CFStringCreateImmutableFunnel3

Code

// Image download completion callback (dispatched to main queue by SDWebImage)
if (finished && image) {
    UIImage *carPlayScaleImage = [UIImage imageWithCGImage:image.CGImage
                                                     scale:[self getCarPlayDisplayScale]
                                               orientation:UIImageOrientationUp];
    [item setImage:carPlayScaleImage];  // <-- hang here
}

Analysis

Inside setImage:, the CarPlay framework creates a CPImageSet, which calls [UIImageAsset imageWithTraitCollection:] three times (at offsets +540, +344, +300 in CPImageSet initWithImage:treatmentBlock:). Each call performs a full CoreUI rendition key lookup via CUIMutableStructuredThemeStore, involving key signature computation, dictionary lookups, and string allocation.

On iOS 26.4, these CoreUI operations appear significantly slower than previous iOS versions. When a CarPlay list loads ~20 items and images complete downloading in a short window, the serial execution of these setImage: calls on the main queue accumulates to a multi-second hang.

Questions

1. Is this a known CoreUI performance regression in iOS 26.4?
2. Is there a recommended way to set images on CPListItem that avoids the heavy CPImageSet / UIImageAsset trait collection resolution path?
3. Are there any planned fixes for the CoreUI rendition lookup performance in upcoming iOS 26.x releases?

Any guidance would be appreciated. We have also filed a Feedback report.

Dear lybgo,

Thanks a lot for your details on this crash. Can you please post the bug report Feedback ID number for our reference? And in your bug report, can you please attach a crash log in.ips format?

Appreciate your due diligence,

Richard Yeh  Developer Technical Support

CPListItem setImage: causes 29-second main thread hang on iOS 26.4 due to CoreUI performance regression
 
 
Q