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.