We have an UIViewController called InfoPlayerViewController. Its main subview is from a child view controller backed by SwiftUI via UIHostingController. The InfoPlayerViewController conforms to UIViewControllerTransitioningDelegate. The animation controller for dismissing is DismissPlayerAnimationController. It runs UIKit keyframe animations via UIViewPropertyAnimator. When the keyframe animation is executed there’s an occasional crash for end users in production. It only happens on iOS 26.
FB Radar: FB20871547
An example crash is below.
Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Reason: +[_SwiftUILayerDelegate _screen]: unrecognized selector sent to class 0x20c95da08
Termination Reason: SIGNAL 6 Abort trap: 6
Triggered by Thread:  0
Last Exception Backtrace:
0   CoreFoundation                	0x1a23828c8 __exceptionPreprocess + 164 (NSException.m:249)
1   libobjc.A.dylib               	0x19f2f97c4 objc_exception_throw + 88 (objc-exception.mm:356)
2   CoreFoundation                	0x1a241e6cc +[NSObject(NSObject) doesNotRecognizeSelector:] + 364 (NSObject.m:158)
3   CoreFoundation                	0x1a22ff4f8 ___forwarding___ + 1472 (NSForwarding.m:3616)
4   CoreFoundation                	0x1a23073a0 _CF_forwarding_prep_0 + 96 (:-1)
5   UIKitCore                     	0x1a948e880 __35-[UIViewKeyframeAnimationState pop]_block_invoke + 300 (UIView.m:2973)
6   CoreFoundation                	0x1a22cb170 __NSDICTIONARY_IS_CALLING_OUT_TO_A_BLOCK__ + 24 (NSDictionaryHelpers.m:10)
7   CoreFoundation                	0x1a245d7cc -[__NSDictionaryM enumerateKeysAndObjectsWithOptions:usingBlock:] + 288 (NSDictionaryM.m:271)
8   UIKitCore                     	0x1a948e6bc -[UIViewKeyframeAnimationState pop] + 376 (UIView.m:2955)
9   UIKitCore                     	0x1a7bc40e8 +[UIViewAnimationState popAnimationState] + 60 (UIView.m:1250)
10  UIKitCore                     	0x1a94acc44 +[UIView(UIViewAnimationWithBlocks) _setupAnimationWithDuration:delay:view:options:factory:animations:start:animationStateGenerator:completion:] + 684 (UIView.m:17669)
11  UIKitCore                     	0x1a94ae334 +[UIView(UIViewKeyframeAnimations) animateKeyframesWithDuration:delay:options:animations:completion:] + 224 (UIView.m:17945)
12  MyApp                       	0x102c78dec static UIView.animateNestedKeyframe(withRelativeStartTime:relativeDuration:animations:) + 208 (UIView+AnimateNestedKeyframe.swift:10)
13  MyApp                       	0x102aef3c0 closure #1 in DismissPlayerAnimationController.slideDownBelowTabBarTransitionAnimator(using:) + 156 (DismissPlayerAnimationController.swift:229)
14  MyApp                       	0x102a2d3d4 <deduplicated_symbol> + 28
15  UIKitCore                     	0x1a7d5ae5c -[UIViewPropertyAnimator _runAnimations] + 172 (UIViewPropertyAnimator.m:2123)
16  UIKitCore                     	0x1a83e1594 __49-[UIViewPropertyAnimator startAnimationAsPaused:]_block_invoke_3 + 92 (UIViewPropertyAnimator.m:3557)
17  UIKitCore                     	0x1a83e1464 __49-[UIViewPropertyAnimator startAnimationAsPaused:]_block_invoke + 96 (UIViewPropertyAnimator.m:3547)
18  UIKitCore                     	0x1a83e1518 __49-[UIViewPropertyAnimator startAnimationAsPaused:]_block_invoke_2 + 144 (UIViewPropertyAnimator.m:3553)
19  UIKitCore                     	0x1a83e0e64 -[UIViewPropertyAnimator _setupAnimationTracking:] + 100 (UIViewPropertyAnimator.m:3510)
20  UIKitCore                     	0x1a83e1264 -[UIViewPropertyAnimator startAnimationAsPaused:] + 728 (UIViewPropertyAnimator.m:3610)
21  UIKitCore                     	0x1a83de42c -[UIViewPropertyAnimator pauseAnimation] + 68 (UIViewPropertyAnimator.m:2753)
22  UIKitCore                     	0x1a87d5328 -[UIPercentDrivenInteractiveTransition _startInterruptibleTransition:] + 244 (UIViewControllerTransitioning.m:982)
23  UIKitCore                     	0x1a87d5514 -[UIPercentDrivenInteractiveTransition startInteractiveTransition:] + 184 (UIViewControllerTransitioning.m:1012)
24  UIKitCore                     	0x1a7c7931c ___UIViewControllerTransitioningRunCustomTransitionWithRequest_block_invoke_3 + 152 (UIViewControllerTransitioning.m:1579)
25  UIKitCore                     	0x1a892aefc +[UIKeyboardSceneDelegate _pinInputViewsForKeyboardSceneDelegate:onBehalfOfResponder:duringBlock:] + 96 (UIKeyboardSceneDelegate.m:3518)
26  UIKitCore                     	0x1a7c79238 ___UIViewControllerTransitioningRunCustomTransitionWithRequest_block_invoke_2 + 236 (UIViewControllerTransitioning.m:1571)
27  UIKitCore                     	0x1a94ab4b8 +[UIView(Animation) _setAlongsideAnimations:toRunByEndOfBlock:animated:] + 188 (UIView.m:17089)
28  UIKitCore                     	0x1a7c79070 _UIViewControllerTransitioningRunCustomTransitionWithRequest + 556 (UIViewControllerTransitioning.m:1560)
29  UIKitCore                     	0x1a86cb7cc __77-[UIPresentationController runTransitionForCurrentStateAnimated:handoffData:]_block_invoke_3 + 1784 (UIPresentationController.m:1504)
30  UIKitCore                     	0x1a7c43888 -[_UIAfterCACommitBlock run] + 72 (_UIAfterCACommitQueue.m:137)
31  UIKitCore                     	0x1a7c437c0 -[_UIAfterCACommitQueue flush] + 168 (_UIAfterCACommitQueue.m:228)
32  UIKitCore                     	0x1a7c436d0 _runAfterCACommitDeferredBlocks + 260 (UIApplication.m:3297)
33  UIKitCore                     	0x1a7c43c34 _cleanUpAfterCAFlushAndRunDeferredBlocks + 80 (UIApplication.m:3275)
34  UIKitCore                     	0x1a7c1f104 _UIApplicationFlushCATransaction + 72 (UIApplication.m:3338)
35  UIKitCore                     	0x1a7c1f024 __setupUpdateSequence_block_invoke_2 + 352 (_UIUpdateScheduler.m:1634)
36  UIKitCore                     	0x1a7c2cee8 _UIUpdateSequenceRunNext + 128 (_UIUpdateSequence.mm:189)
37  UIKitCore                     	0x1a7c2c378 schedulerStepScheduledMainSectionContinue + 60 (_UIUpdateScheduler.m:1185)
38  UpdateCycle                   	0x28c58f5f8 UC::DriverCore::continueProcessing() + 84 (UCDriver.cc:288)
39  CoreFoundation                	0x1a2323230 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28 (CFRunLoop.c:2021)
40  CoreFoundation                	0x1a23231a4 __CFRunLoopDoSource0 + 172 (CFRunLoop.c:2065)
41  CoreFoundation                	0x1a2300c6c __CFRunLoopDoSources0 + 232 (CFRunLoop.c:2102)
42  CoreFoundation                	0x1a22d68b0 __CFRunLoopRun + 820 (CFRunLoop.c:2983)
43  CoreFoundation                	0x1a22d5c44 _CFRunLoopRunSpecificWithOptions + 532 (CFRunLoop.c:3462)
44  GraphicsServices              	0x2416a2498 GSEventRunModal + 120 (GSEvent.c:2049)
45  UIKitCore                     	0x1a7c50ddc -[UIApplication _run] + 792 (UIApplication.m:3899)
46  UIKitCore                     	0x1a7bf5b0c UIApplicationMain + 336 (UIApplication.m:5574)
// ...
                    
                  
                Core Animation
RSS for tagRender, compose, and animate visual elements using Core Animation.
Posts under Core Animation tag
            
              
                39 Posts
              
            
            
              
                
              
            
          
          
  
    
    Selecting any option will automatically load the page
  
  
  
  
    
  
  
              Post
Replies
Boosts
Views
Activity
                    
                      please fix!
                    
                  
                
                    
                      Good day!
Have anyone experienced sudden crashes increase cause by CALayerInvalidGeometry · CALayer position contains NaN: [nan 5] that gets set via -[AVMobileGlassVolumeControlsView layoutSubviews]?
94% of crashes belong to iOS 26.0.1, while rest to 26.0. What's weird, though, is that it is caused by some AVKit internal logic and cant' understand how to track it down, neither how to reproduce.
Stack trace looks as follows:
0  CoreFoundation +0xc98c4    ___exceptionPreprocess
1  libobjc.A.dylib +0x317c0   _objc_exception_throw
2  CoreFoundation +0x1548d0   +[NSException raise:format:]
3  QuartzCore +0x909b4        CA::Layer::set_position(CA::Vec2<double> const&, bool)
4  QuartzCore +0x2af294       -[CALayer setPosition:]
5  UIKitCore +0xe9fc18        -[UIView _backing_setPosition:]
6  UIKitCore +0x18f6158       -[UIView setCenter:]
7  UIKitCore +0x1eb704        0x188b5e704 (0x188b5e5f4 + 272)
8  UIKitCore +0x1eb56c        0x188b5e56c (0x188b5e4f0 + 124)
9  UIKitCore +0x18fd318       -[UIView(Geometry) _resizeWithOldSuperviewSize:]
10 CoreFoundation +0x1514c    ___NSARRAY_IS_CALLING_OUT_TO_A_BLOCK__
11 CoreFoundation +0xdd18c    -[__NSArrayM enumerateObjectsWithOptions:usingBlock:]
12 UIKitCore +0x18fc6dc       -[UIView(Geometry) resizeSubviewsWithOldSize:]
13 UIKitCore +0x18fabd0       -[UIView(Geometry) setFrame:]
14 AVKit +0x1b5a88            -[AVMobileGlassVolumeControlsView layoutSubviews]
15 UIKitCore +0x27074         0x18899a074 (0x188999d3c + 824)
16 UIKitCore +0x27b34         0x18899ab34 (0x18899ab14 + 32)
17 UIKitCore +0x190df64       -[UIView(CALayerDelegate) layoutSublayersOfLayer:]
18 QuartzCore +0xac9a4        CA::Layer::perform_update_(CA::Layer*, CALayer*, unsigned int, CA::Transaction*)
19 QuartzCore +0x8f2f8        CA::Layer::update_if_needed(CA::Transaction*, unsigned int, unsigned int)
20 UIKitCore +0x57b0          -[UIView(Hierarchy) layoutBelowIfNeeded]
21 AVKit +0x1b6634            ___74-[AVMobileGlassVolumeControlsView _updateVolumeFluidSliderEmphasizedScale]_block_invoke
22 UIKitCore +0x1b3e58        -[UIViewPropertyAnimator _runAnimations]
23 UIKitCore +0x19025f0       +[UIView(Animation) _performWithState:trackingIdentifier:duration:delay:animations:]
24 UIKitCore +0x83a650        ___49-[UIViewPropertyAnimator startAnimationAsPaused:]_block_invoke_4
25 UIKitCore +0x83a460        ___49-[UIViewPropertyAnimator startAnimationAsPaused:]_block_invoke
26 UIKitCore +0x83a210        -[UIViewPropertyAnimator startAnimationAsPaused:]
27 AVKit +0x1b6574            -[AVMobileGlassVolumeControlsView setEmphasized:]
28 AVKit +0x127510            ___64-[AVMobileGlassControlsViewController _animateVolumeEmphasisTo:]_block_invoke
29 UIKitCore +0x1b3e58        -[UIViewPropertyAnimator _runAnimations]
30 UIKitCore +0x83a590        ___49-[UIViewPropertyAnimator startAnimationAsPaused:]_block_invoke_3
31 UIKitCore +0x83a460        ___49-[UIViewPropertyAnimator startAnimationAsPaused:]_block_invoke
32 UIKitCore +0x83a514        ___49-[UIViewPropertyAnimator startAnimationAsPaused:]_block_invoke_2
33 UIKitCore +0x839e60        -[UIViewPropertyAnimator _setupAnimationTracking:]
34 UIKitCore +0x83a260        -[UIViewPropertyAnimator startAnimationAsPaused:]
35 AVKit +0x127480            -[AVMobileGlassControlsViewController _animateVolumeEmphasisTo:]
36 AVKit +0x12ea2c            ___56-[AVMobileGlassControlsViewController _observationSetup]_block_invoke_5
37 AVKit +0xcbcd0             ___106-[AVObservationController startObservingNotificationForName:object:notificationCenter:observationHandler:]_block_invoke
38 CoreFoundation +0x519ec    ___CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__
39 CoreFoundation +0x51ab0    ____CFXRegistrationPost_block_invoke
40 CoreFoundation +0x5190c    __CFXRegistrationPost
41 CoreFoundation +0x520ac    __CFXNotificationPost
42 Foundation +0x94fc2c       -[NSNotificationCenter postNotificationName:object:userInfo:]
43 AVKit +0x1b9bd8            -[AVSystemVolumeController _postNotificationForNameIfFullyInitialized:userInfo:]
44 AVKit +0x1b9dc0            -[AVSystemVolumeController setVolume:shouldShowHUD:]
45 AVKit +0x1b965c            ___69-[AVSystemVolumeController _handleSystemVolumeDidChangeNotification:]_block_invoke
46 AVKit +0x1b8da4            -[AVSystemVolumeController _performOnMainThread:]
47 AVKit +0x1b95c0            -[AVSystemVolumeController _handleSystemVolumeDidChangeNotification:]
48 CoreFoundation +0x51a00    ___CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__
49 CoreFoundation +0x51ab0    ____CFXRegistrationPost_block_invoke
50 CoreFoundation +0x5190c    __CFXRegistrationPost
51 CoreFoundation +0x520ac    __CFXNotificationPost
52 Foundation +0x94fc2c       -[NSNotificationCenter postNotificationName:object:userInfo:]
53 MediaExperience +0x1039b0  ___76+[AVSystemControllerCommon postNotificationOnMainQueue:notification:object:]_block_invoke
54 MediaExperience +0x6b64    ___MXDispatchAsync_block_invoke
55 libdispatch.dylib +0x1ad8  __dispatch_call_block_and_release
56 libdispatch.dylib +0x1b7e8 __dispatch_client_callout
57 libdispatch.dylib +0x38b20 __dispatch_main_queue_drain.cold.5
58 libdispatch.dylib +0x10ec4 __dispatch_main_queue_drain
59 libdispatch.dylib +0x10e00 __dispatch_main_queue_callback_4CF
60 CoreFoundation +0x6b51c    ___CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
61 CoreFoundation +0x1dd10    ___CFRunLoopRun
62 CoreFoundation +0x1cc40    __CFRunLoopRunSpecificWithOptions
63 GraphicsServices +0x1494   _GSEventRunModal
64 UIKitCore +0xa9dd8         -[UIApplication _run]
65 UIKitCore +0x4eb08         _UIApplicationMain
66 TuneIn Radio +0x1b318      main (main.m:28:22)
67 dyld +0x4e24               start
                    
                  
                
                    
                      Hi.
Since Xcode 16 and/or iOS 18.0 (I upgraded at the same time), I have an strange effect in the lower (let's say) 20% section of the Navigation Bar when changing to another tab, and this independently if large titles are used or not. Mentioned section is brighter or darker than the rest of the Navigation Bar background, depending on which background tint is used. This effect lasts about 0.3 seconds, but is clearly visible, quite disturbing and new as of Xcode 16 and/or iOS 18.0.
I use the code below in AppDelegate to get a gradient coloured Navigation Bar background.
let appearance = UINavigationBarAppearance()
UINavigationBar.appearance().standardAppearance = appearance
UINavigationBar.appearance().compactAppearance = appearance
UINavigationBar.appearance().scrollEdgeAppearance = appearance
UINavigationBar.appearance().compactScrollEdgeAppearance = appearance
If I don't use above code., the background color is filled and without gradient. Subject effect doesn't show in this case.
The effect basically looks like when changing tab, the new Navigation Bar background doesn't clear right away, and keeps the background from the previous Navigation Bar for 0.3 seconds before new one Navigation Bar background is rendered.
I spent quite some time on changing every possible setting, in code as well as storyboard ... no success so far.
Any ideas how to disable this undesired animation?
                    
                  
                
                    
                      Hi everyone,
After upgrading to macOS 26 (Tahoe) I’ve run into an issue:
NSTextField becomes noticeably blurry when its parent layer is transformed (CATransform3D or CGAffineTransform).
On macOS 15 (Sequoia) the exact same code worked fine — text stayed sharp.
Interestingly, an NSImage backed by a PDF representation transforms without any problem and remains perfectly crisp, but labels do not.
What I’ve tried so far
Checked the contentsScale of the layers
Setting magnificationFilter = .nearest
Toggled shouldRasterize on/off and adjusted rasterizationScale
Have there been any Core Animation or AppKit changes in macOS 26 that affect text rendering when transforming layers?
What’s the recommended way now to keep NSTextField text sharp (similar to how vector PDF images behave) when scaling its parent layer?
Any insights, best practices, or workarounds would be greatly appreciated.
Thanks in advance!
                    
                  
                
                    
                      From what I’ve seen, this issue has been around since macOS 13 and can be reproduced reliably. It happens with some apps like Music, Notes, and Google Chrome.
Here’s how to see it:
1.Make sure “Minimize windows into application” is enabled in System Settings, or just open a minimized app later directly from its application icon.
2.Open one of the apps mentioned above.
3.Minimize it.
4.Click the minimized app in the Dock to restore it.
You’ll notice the GUI flashes for a moment and the minimize animation plays again.
Some additional info here:
https://forums.macrumors.com/threads/weird-glitches-during-restore-from-minimalization-of-any-app.2370260/
A video clipped from another GitHub issue:
https://private-user-images.githubusercontent.com/13177224/445474477-36d8c784-9588-4186-8b6a-875c4077ce1c.mp4?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTgyMTQ0ODEsIm5iZiI6MTc1ODIxNDE4MSwicGF0aCI6Ii8xMzE3NzIyNC80NDU0NzQ0NzctMzZkOGM3ODQtOTU4OC00MTg2LThiNmEtODc1YzQwNzdjZTFjLm1wND9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA5MTglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwOTE4VDE2NDk0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTMwOWYwZWVmMDBjZWRiNzA2MDg1NDFiMTIxNmU3ZmFiZWIwOThjYzRmYmE1OWJiZWNlZjFlNjRlYjA4NTVkYjgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.xbAxdTgxadCVCZPsnZkhx9HnVbjP-D5w1GfPTBatIWQ
                    
                  
                
                    
                      Hi all,
After upgrading to the iOS 26 beta, the scrolling in my SwiftUI chat view is completely broken. The exact same code works perfectly on iOS 18.
Context:
I have a chat view using ScrollViewReader and a vertically-reversed ScrollView (with .rotationEffect(.degrees(180))). Each message row (MessageBubble) uses multiple simultaneousGesture handlers:
Horizontal drag for swipe-to-reply (and other actions: pin, delete)
Long press for showing popover/actions
Vertical scroll for normal chat scrolling
This was working great on iOS 18. In iOS 26 beta, the vertical scroll is either completely disabled, jittery, or hijacked by the message row’s drag gestures, even though .simultaneousGesture is used (see code below).
Minimal Repro Sample
MessageListView.swift
swift
Copy
Edit
ScrollViewReader { proxy in
    ScrollView(.vertical, showsIndicators: false) {
        LazyVStack(spacing: 0) {
            // ... grouped messages
            ForEach(...) { ... 
                MessageBubble(...) // see below
            }
            Color.clear.frame(height: 8).id("BOTTOM_ANCHOR")
        }
        .padding(.horizontal, 4)
        .rotationEffect(.degrees(180))
    }
    .rotationEffect(.degrees(180))
}
MessageBubble.swift
struct MessageBubble: View {
    // ...
    var body: some View {
        // horizontal swipe-to-reply gesture
        let dragGesture = DragGesture(minimumDistance: 10)
            // ...
        ZStack {
            // ...
            HStack { ... }
                // ...
                .simultaneousGesture(
                    DragGesture(minimumDistance: 0) // for long press
                        // ...
                )
                .simultaneousGesture(dragGesture) // for horizontal swipe
        }
        // ...
    }
}
                    
                  
                
                    
                      I am using Apple's original Lightning Digital AV-adapter (Lightning-to-HDMI dongle) to connect my iPhone to an external display via a HDMI cable.
I need to synchronize rendering with the external display's refresh rate, so I create a new CADisplayLink tied to the external display's UIScreen: UIScreen.screens[externalDisplayIdx].displayLink(withTarget:, selector:).
The callback is being called regularly, but with increasing delay relative to the CADisplayLink.timestamp, so the next time the callback is called, I have less and less time to draw the next frame (see the snippet below).
Assuming 60 FPS, the value of secondsTillDeadline starts at an arbitrary value in the range of approx -0.0001 to 0.0166667, and then it slowly decreases towards zero (and for a brief period it goes into small negative numbers). Once it reaches zero, it flips back to 0.0166667 and continues to decrease again. This cycle repeats indefinitely.
Changing the external display's resolution (UIScreen's mode) or the CADisplayLink's preferredFrameRateRange to a lower FPS does not seem to have any effect on the temporal drifting (even the rate of change seem to be the same).
When I create a new CADisplayLink for the iPhone's main screen, the value of secondsTillDeadline is stable, it does not drift and it is very close to 0.0166667, as expected.
Is this drift caused by the external monitor or by Apple's Lightning-to-HDMI dongle ...or is the problem somewhere else?
Can the drifting be stopped?
func onDisplayLinkUpdate(displayLink: CADisplayLink) {
    // Gradually decreases from 0.01667 to -0.0001, then flips back to 0.01667 and continues to decrease
    let secondsTillDeadline = displayLink.targetTimestamp - CACurrentMediaTime()
}
                    
                  
                
                    
                      I’m experiencing a crash in WKWebView on iOS 26 Developer Beta 5 and Beta 6 with the following exception:
CALayer position contains NaN: [nan 65]
The crash occurs when the following CSS properties are applied to content displayed in WKWebView:
-webkit-user-select: none;
-webkit-touch-callout: none;
This issue happens consistently whenever these styles are set, leading to the crash inside WKWebView.
Is this a known bug in the current iOS 26 betas, or is there a recommended workaround?
                    
                  
                
                    
                      The app becomes unresponsive when pushing a new page. The screen is covered by the _UIParallaxOverlayView class, blocking all gestures.
Are there any scenarios where the transition animation might suddenly stop mid-process?
Or could you provide more information to help me troubleshoot this issue?
I noticed:
When the issue occurs, the FromViewController is displayed on the screen. The ToViewController also exists in the view tree, but it's not visible on the screen.
_UIParallaxOverlayView only appears on iOS 18 and above.
The animation appears to be controlled by +[UIView _fluidParallaxTransitionsEnabledWithTraitCollection:], which is _os_feature_enabled_impl("UIKit", "fluid_parallax_transitions"). Reference
                    
                  
                
                    
                      Environment
• Device: iOS 26 Developer Beta 5 (23A5308g)
• Xcode: 16.3
Short description
The app crashes the moment the user tries to long-press to select text inside a WKWebView, double-tap an image with Text (magnifier appears)
The exception is CALayer position contains NaN. frame = (nan,0;0,48) chorPoint=(inf, 0) and it is thrown in the UI process.
Build & run any project that hosts a WKWebView. Inject the following CSS via script (this is what we do to suppress the native callout menu):
WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.bounds
                                        configuration:[WKWebViewConfiguration new]];
NSString *js =
  @"document.documentElement.style.webkitUserSelect='none';"
   "document.documentElement.style.webkitTouchCallout='none';";
[webView evaluateJavaScript:js completionHandler:nil];
[self.view addSubview:webView];
Incident Identifier: EE6FB046-5087-4F15-A72D-A74965347A30
CrashReporter Key:   29e8e58e02a07557adb4ce3f463d764f3ce8bbd5
Hardware Model:      iPhone16,1
Process:             wallet [642]
Path:                /private/var/containers/Bundle/Application/4B4E609A-C8BF-4C56-AB2A-1638249B98A5/wallet.app/wallet
Identifier:          xxxx
Version:             xxxx
AppStoreTools:       16F7
AppVariant:          1:iPhone16,1:18
Code Type:           ARM-64 (Native)
Role:                Foreground
Parent Process:      launchd [1]
Coalition:           xxxxx
Date/Time:           2025-08-06 12:05:24.0732 +0800
Launch Time:         2025-08-06 11:49:40.3802 +0800
OS Version:          iPhone OS 26.0 (23A5308g)
Release Type:        Beta
Baseband Version:    3.02.02
Report Version:      104
Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: SIGNAL 6 Abort trap: 6
Terminating Process: wallet [642]
Triggered by Thread:  0
Application Specific Information:
abort() called
Last Exception Backtrace:
0   CoreFoundation                	       0x185e058c8 __exceptionPreprocess + 164
1   libobjc.A.dylib               	       0x182d797c4 objc_exception_throw + 88
2   CoreFoundation                	       0x185e908d4 -[NSException initWithCoder:] + 0
3   QuartzCore                    	       0x18678a874 CA::Layer::set_position(CA::Vec2<double> const&, bool) + 160
4   QuartzCore                    	       0x1869a7270 -[CALayer setPosition:] + 52
5   UIKitCore                     	       0x18c4ac564 -[UIView _backing_setPosition:] + 176
6   UIKitCore                     	       0x18cefdf0c -[UIView setCenter:] + 220
7   UIKitCore                     	       0x18cd9f794 -[_UIEditMenuContentPresentation _displayPreparedMenu:titleView:reason:didDismissMenu:configuration:] + 936
8   UIKitCore                     	       0x18cd9f3c0 __54-[_UIEditMenuContentPresentation _displayMenu:reason:]_block_invoke + 104
9   UIKitCore                     	       0x18ced1060 -[UIEditMenuInteraction _editMenuPresentation:preparedMenuForDisplay:completion:] + 384
10  UIKitCore                     	       0x18cd9f2e4 -[_UIEditMenuContentPresentation _displayMenu:reason:] + 304
11  UIKitCore                     	       0x18cd9f0d8 -[_UIEditMenuContentPresentation displayMenu:configuration:] + 64
12  UIKitCore                     	       0x18ced0344 __58-[UIEditMenuInteraction presentEditMenuWithConfiguration:]_block_invoke + 260
13  UIKitCore                     	       0x18ced1f8c __80-[UIEditMenuInteraction _prepareMenuAtLocation:configuration:completionHandler:]_block_invoke + 80
14  UIKitCore                     	       0x18cc8403c __109-[UITextContextMenuInteraction _editMenuInteraction:menuForConfiguration:suggestedActions:completionHandler:]_block_invoke + 180
15  UIKitCore                     	       0x18cc84584 __107-[UITextContextMenuInteraction _querySelectionCommandsForConfiguration:suggestedActions:completionHandler:]_block_invoke + 148
16  WebKit                        	       0x1a05ae5d4 WTF::CompletionHandler<void (WebKit::DocumentEditingContext&&)>::operator()(WebKit::DocumentEditingContext&&) + 64
17  WebKit                        	       0x1a05bb468 WTF::Detail::CallableWrapper<WTF::CompletionHandler<void (IPC::Connection*, IPC::Decoder*)> IPC::Connection::makeAsyncReplyCompletionHandler<Messages::WebPage::RequestDocumentEditingContext, WTF::CompletionHandler<void (WebKit::DocumentEditingContext&&)>>(WTF::CompletionHandler<void (WebKit::DocumentEditingContext&&)>&&, WTF::ThreadLikeAssertion)::'lambda'(IPC::Connection*, IPC::Decoder*), void, IPC::Connection*, IPC::Decoder*>::call(IPC::Connection*, IPC::Decoder*) + 196
18  WebKit                        	       0x19fcf5db8 WTF::Detail::CallableWrapper<WebKit::AuxiliaryProcessProxy::sendMessage(WTF::UniqueRef<IPC::Encoder>&&, WTF::OptionSet<IPC::SendOption>, std::__1::optional<IPC::ConnectionAsyncReplyHandler>, WebKit::AuxiliaryProcessProxy::ShouldStartProcessThrottlerActivity)::$_1, void, IPC::Connection*, IPC::Decoder*>::call(IPC::Connection*, IPC::Decoder*) + 64
19  WebKit                        	       0x19fce54f0 IPC::Connection::dispatchMessage(WTF::UniqueRef<IPC::Decoder>) + 340
20  WebKit                        	       0x19fcf5aa0 IPC::Connection::dispatchIncomingMessages() + 536
21  JavaScriptCore                	       0x19a8f85d4 WTF::RunLoop::performWork() + 552
22  JavaScriptCore                	       0x19a8f838c WTF::RunLoop::performWork(void*) + 36
23  CoreFoundation                	       0x185da6230 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
24  CoreFoundation                	       0x185da61a4 __CFRunLoopDoSource0 + 172
25  CoreFoundation                	       0x185d83c6c __CFRunLoopDoSources0 + 232
26  CoreFoundation                	       0x185d598b0 __CFRunLoopRun + 820
27  CoreFoundation                	       0x185d58c44 _CFRunLoopRunSpecificWithOptions + 532
28  GraphicsServices              	       0x224ce0498 GSEventRunModal + 120
29  UIKitCore                     	       0x18b6c84b8 -[UIApplication _run] + 792
30  UIKitCore                     	       0x18b66cbc0 UIApplicationMain + 336
31  wallet                        	       0x1046f8558 0x1046f4000 + 17752
32  dyld                          	       0x182dcdb18 start + 6332
                    
                  
                
                    
                      Unexpected SwiftUI Transaction Behavior
This minimal example demonstrates an unexpected behavior in SwiftUI's Transaction API:
var transaction = Transaction(animation: .none)
transaction.addAnimationCompletion { print("This should not be called!") }
The Issue
The completion handler is called immediately after creation, even though the transaction was never used in any SwiftUI animation context (like withTransaction or other animation-related APIs).
Expected vs Actual Behavior
Expected: The completion handler should only be called after the transaction is actually used in a SwiftUI animation.
Actual: The completion handler is called right after creation, regardless of whether the transaction is used or not.
Current Workaround
To avoid this, I'm forced to implement defensive programming: only creating transactions with completion handlers at the exact moment they're going to be used. This adds unnecessary complexity and goes against the intuitive usage of the Transactions API.
                    
                  
                
                    
                      My setup:
a UILabel with text in it
and then
let aBugRenderer = UIGraphicsImageRenderer(size: aBugLabel.bounds.size)
let aBugImage = aBugRenderer.image { context in
    aBugLabel.drawHierarchy(in: aBugLabel.bounds, afterScreenUpdates: true)
}
The layout and everything is correct, the image is correct, but I used my colors in the displayP3 color space to configure the source UILabel.textColor
And unfortunately, the resulted image ends up being sRGB IEC61966-2.1 color space and the color appears way bleaker than when it's drawn natively.
Question: how can I set up the renderer so that it draws the same color.
                    
                  
                
                    
                      iOS 26 added smoothness to CIRoundedRectangleGenerator, for use with CIFilter.roundedRectangleGenerator. What should the smoothness value be to achieve the same corner curve as CALayerCornerCurve.continuous? Does it need to be calculated based on the extent size, if so, how?
                    
                  
                
                    
                      Hi everyone,
I’m currently testing iOS 26 on my iPhone as part of the developer program. According to Apple’s documentation and demo materials, a new screenshot animation was introduced in this version. However, when I take a screenshot on my device, the animation remains the same as in previous iOS versions.
I’ve double-checked that I’m running the correct build of iOS 26, and I haven’t found any settings that might enable or disable this feature.
Is anyone else experiencing the same issue? Could this new animation be device-specific, region-limited, or require additional configuration?
Any insight would be appreciated!
Thanks in advance,
Alonso Rivera
                    
                  
                
                    
                      I have filed a bug report for this (FB17734946), but I'm posting it here verbatim in case others have the same issue and in hopes of getting attention from an Apple engineer sooner.
When calling setNeedsDisplayInRect on a CATiledLayer - or a UIView whose backing layer is CATiledLayer - one would expect to re-draw only a region identified by the rect passed to the method. This is even written in the documentation for the class:
"Regions of the layer may be invalidated using the setNeedsDisplayInRect: method however the update will be asynchronous. While the next display update will most likely not contain the updated content, a future update will."
However, upon calling this method, CATiledLayer redraws whole contents instead of just the tile at the specified rect, and it flashes when doing so. It behaves exactly the same as if one had called setNeedsDisplay without passing any rect; all contents are cleared and re-drawn again. I'm 100% sure I've passed in the correct rect of the exact tile that I need to redraw. I have even tried passing much smaller rects, but still the same. (And yes, the rect I've passed accounts for the current level of detail.)
I have found this GitHub repo https://github.com/frankus/NetPhotoScroller, which based on discussion from here https://forums.macrumors.com/threads/catiledlayer-blanks-out-tiles-when-redrawing.1333948/ aims at solving these issues by using two private methods on CATiledLayer class:
(void)setNeedsDisplayInRect:(CGRect)r levelOfDetail:(int)level;
(BOOL)canDrawRect:(CGRect)rect levelOfDetail:(int)level;
I have explored the repo in detail, however I wasn't able to test exactly this code from the GitHub repo. I have tried using those two private methods myself (through an Objective-C class that defines the methods in the header file and then a swift class which inherits it), but I couldn't solve the issue; the flashing and the full re-draw is still there.
After doing a lot of research, the conclusion seems to be that one cannot use CATiledLayer with contents that are downloaded remotely, on demand, as tiles are being requested.
I have, however, found one interesting thing which seems to work so far: before calling setNeedsDisplayInRect (or just setNeedsDisplay, as they behave the same for CATiledLayer in my testing), cache the current layer's contents, and after calling setNeedsDisplay (or setNeedsDisplayInRect), restore the contents back to the layer. This prevents flashing and preserves any tiles that were drawn at the time of the re-draw.
let c = tiledLayer.contents
tiledLayer.setNeedsDisplay(tileRect)
tiledLayer.contents = c
However! Docs clearly state the warning:
Do not attempt to directly modify the contents property of a CATiledLayer object. Doing so disables the ability of a tiled layer to asynchronously provide tiled content, effectively turning the layer into a regular CALayer object.
I believe this message implies modifying the contents property with some raw content, like image data, and that it may be safe to re-apply the existing contents (which are in my testing of type CAImageProvider) -- but I can't rely on an implementation detail in my production app.
I have tested this and confirmed that the bug appears on:
iPhone 14 Pro, iOS 18.5
iPhone 13 Pro, iOS 17.5.1
iPhone 5s, iOS 15.8.3
iPad Pro 1st gen, iPadOS 18.4.1
a couple simulator versions
I can also confirm that the fix (to re-apply contents property) is also working properly on all these versions.
Is this expected behavior, that tiled layer redraws itself entirely instead of redrawing specific tiles?
Is it safe to modify contents of a CATiledLayer by re-applying the existing contents?
If not, is there an alternative to avoid flashing?
                    
                  
                
                    
                      We have a macOS app (not yet released, but in use by ourselves), that provides scoreboards for streaming sport events.
Today it is expected, that there are nice animations for goals, etc. We are streaming using NDI, which requires a CVPixelBuffer for each frame.
We currently create these animations using CABasicAnimation, CAAnimation and CAKeyframeAnimation. In addition we use ScreenCaptureKit to generate the frames.
This works fine with 25/30 fps, as long as the window where our animations are performed in is visible. But this is not what it should be. We have a smaller window as main app window and control display performing the animations in reduced size, while the streaming animations need to be in HD format and later maybe in 4K.
When using an offscreen window, the animations are not calculated. We get 1 frame per second or so. So we actually have to connect an external display to the MacBook and open the large windows there. Ugly solution.
Do we use a completely wrong approach? Or is there a way to tell the macOS to perform the animations although it is an offscreen window?
If it cannot work that way, what is an alternative?
                    
                  
                
                    
                      Due to the release of ProMotion devices, the system may switch frame rates in certain scenarios, resulting in the loss of reference value for data collected through CADisplayLink callbacks at a fixed 60Hz frame rate. We cannot distinguish whether the slow callback of CADisplayLink is due to a stutter or a system switch in frame rate.
I know Hitch Time Ratio, but I can't use this scheme for some reasons.
How can I distinguish between stuck and frame rate gear shift in CADisplaylink callback?
In iOS 15, CADisplayLink.preferredFrameRateRange.preferred always returns 0, while minimum and maximum do change. Can I use these minimum and maximum range values as criteria to distinguish between frame rate switching and stuttering?
                    
                  
                
                    
                      Hi everyone,
I'm encountering an intermittent crash on iOS 18 only (not reproducible locally, reported in Firebase Crashlytics) at transitionContext.completeTransition(!transitionContext.transitionWasCancelled) within my custom UIViewControllerAnimatedTransitioning. The same code runs fine on iOS 16 and 17 (no Crashlytics report for those iOS version)
Here's the crash log:
Crashed: com.apple.main-thread
0  libswiftCore.dylib         0x4391f0 swift_getObjectType + 40
1  ROOM                       0x490c48 ItemDetailAnimator.navigationController(_:animationControllerFor:from:to:) + 47 (ItemDetailAnimator.swift:47)
2  ROOM                       0x490f3c @objc ItemDetailAnimator.navigationController(_:animationControllerFor:from:to:) + 92 (<compiler-generated>:92)
3  UIKitCore                  0xa2d7a4 -[UINavigationController _customTransitionController:] + 516
4  UIKitCore                  0x2e51dc -[UINavigationController _immediatelyApplyViewControllers:transition:animated:operation:] + 2620
5  UIKitCore                  0x1541d4 __94-[UINavigationController _applyViewControllers:transition:animated:operation:rescheduleBlock:]_block_invoke + 100
6  UIKitCore                  0x150768 -[UINavigationController _applyViewControllers:transition:animated:operation:rescheduleBlock:] + 776
7  UIKitCore                  0x2e7e44 -[UINavigationController pushViewController:transition:forceImmediate:] + 544
8  UIKitCore                  0x2e4230 -[UINavigationController pushViewController:animated:] + 444
9  ROOM                       0x66cb04 UINavigationController.pushViewController(_:animated:completion:) + 185 (UINavigationController+Room.swift:185)
10 ROOM                       0x8cef4c ItemDetailCoordinator.start(animated:completion:) + 99 (ItemDetailCoordinator.swift:99)
11 ROOM                       0xc6c95c protocol witness for Coordinator.start(animated:completion:) in conformance BaseCoordinator + 24 (<compiler-generated>:24)
12 ROOM                       0x8ca520 AppCoordinator.startCoordinator(_:url:reference:animated:completion:) + 729 (AppCoordinator.swift:729)
13 ROOM                       0x8cb248 protocol witness for URLSupportCoordinatorOpener.startCoordinator(_:url:reference:animated:completion:) in conformance AppCoordinator + 48 (<compiler-generated>:48)
14 ROOM                       0xd6166c URLSupportCoordinatorOpener<>.open(url:openingController:reference:animated:completion:) + 118 (URLSupportedCoordinator.swift:118)
15 ROOM                       0xc56038 RRAppDelegate.handleURL(url:completion:) + 588 (RRAppDelegate.swift:588)
16 ROOM                       0xc502d0 RRAppDelegate.applicationDidBecomeActive(_:) + 330 (RRAppDelegate.swift:330)
17 ROOM                       0xc5041c @objc RRAppDelegate.applicationDidBecomeActive(_:) + 52 (<compiler-generated>:52)
18 UIKitCore                  0x1fb048 -[UIApplication _stopDeactivatingForReason:] + 1368
My animateTransition code is:
```func animateTransition(
            using transitionContext: UIViewControllerContextTransitioning) {
            guard let (fromView, toView, fromVC, toVC)
                = filterTargets(context: transitionContext) else {
                    transitionContext.cancelInteractiveTransition()
                    transitionContext.completeTransition(false)
                    return
            }
            let containerView = transitionContext.containerView
            toView.frame = transitionContext.finalFrame(for: toVC)
            guard let targetView = fromVC.animationTargetView,
                let fromFrame = fromVC.animationTargetFrame,
                let toFrame = toVC.animationTargetFrame
                else {
                    containerView.insertSubview(toView, aboveSubview: fromView)
                    toView.frame = transitionContext.finalFrame(for: toVC)
                    transitionContext.completeTransition(true)
                    return
            }
            let newFromFrame = fromView.convert(fromFrame, to: containerView)
            let tempImageView: UIImageView
            if let target = targetView as? UIImageView,
                let image = targetImage ?? target.image,
                image.size.height != 0,
                target.frame.height != 0,
                image.size.width / image.size.height != target.frame.width / target.frame.height {
                targetImage = image
                tempImageView = UIImageView(image: image)
                tempImageView.frame = newFromFrame
                tempImageView.contentMode = .scaleAspectFit
            } else {
                tempImageView = targetView.room.asImageView()
                tempImageView.frame = newFromFrame
            }
            targetView.isHidden = true
            let tempFromView = containerView.room.asImageView()
            targetView.isHidden = false
            let tempHideView = UIView()
            containerView.addSubview(tempFromView)
            containerView.insertSubview(toView, aboveSubview: tempFromView)
            tempHideView.backgroundColor = .white
            toView.addSubview(tempHideView)
            containerView.addSubview(tempImageView)
            //Minus with item detail view y position
            //Need to minus navigation bar height of item detail view
            var tempHideViewFrame = toFrame
            tempHideViewFrame.origin.y -= toView.frame.origin.y
            tempHideView.frame = tempHideViewFrame
            let duration = transitionDuration(using: transitionContext)
            toView.alpha = 0
            UIView.animate(withDuration: duration * 0.5, delay: duration * 0.5, options: .curveLinear, animations: {
                toView.alpha = 1
            })
            let scale: CGFloat = toFrame.width / newFromFrame.width
            let newFrame = CGRect(
                x: toFrame.minX - newFromFrame.minX * scale,
                y: toFrame.minY - newFromFrame.minY * scale,
                width: tempFromView.frame.size.width * scale,
                height: tempFromView.frame.size.height * scale)
            UIView.animate(withDuration: duration, delay: 0.0, options: [.curveEaseInOut], animations: {
                tempFromView.frame = newFrame
                tempImageView.frame = toFrame
            }, completion: { _ in
                tempHideView.removeFromSuperview()
                tempFromView.removeFromSuperview()
                tempImageView.removeFromSuperview()
                transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
            })
        }
                    
                  
                
                    
                      One of our users reported a very strange bug where our app freezes and eventually crashes on some screen transitions.
From different crash logs we could determine that the app freezes up when we call view.layoutIfNeeded() for animating constraint changes. It then gets killed by the watchdog 10 seconds later:
Exception Type:  EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: FRONTBOARD 2343432205 
<RBSTerminateContext| domain:10 code:0x8BADF00D explanation:scene-update watchdog transgression: app<bundleID(2A01F261-3554-44C0-B5A9-EBEB446484AD)>:6921 exhausted real (wall clock) time allowance of 10.00 seconds
ProcessVisibility: Background
ProcessState: Running
WatchdogEvent: scene-update
WatchdogVisibility: Background
WatchdogCPUStatistics: (
"Elapsed total CPU time (seconds): 24.320 (user 18.860, system 5.460), 29% CPU",
"Elapsed application CPU time (seconds): 10.630, 12% CPU"
) reportType:CrashLog maxTerminationResistance:Interactive>
The crash stack trace looks slightly different, depending on the UI transition that is happening. Here are the two we observed so far. Both are triggered by the layoutIfNeeded() call.
Thread 0 name:   Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   CoreAutoLayout    0x1b09f90e4 -[NSISEngine valueForEngineVar:] + 8
1   UIKitCore         0x18f919478 -[_UIViewLayoutEngineRelativeAlignmentRectOriginCache origin] + 372
2   UIKitCore         0x18f918f18 -[UIView _nsis_center:bounds:inEngine:forLayoutGuide:] + 1372
3   UIKitCore         0x18f908e9c -[UIView(Geometry) _applyISEngineLayoutValuesToBoundsOnly:] + 248
4   UIKitCore         0x18f9089e0 -[UIView(Geometry) _resizeWithOldSuperviewSize:] + 148
5   CoreFoundation    0x18d0cd6a4 __NSARRAY_IS_CALLING_OUT_TO_A_BLOCK__ + 24
6   CoreFoundation    0x18d0cd584 -[__NSArrayM enumerateObjectsWithOptions:usingBlock:] + 432
7   UIKitCore         0x18f8e62b0 -[UIView(Geometry) resizeSubviewsWithOldSize:] + 128
8   UIKitCore         0x18f977194 -[UIView(AdditionalLayoutSupport) _is_layout] + 124
9   UIKitCore         0x18f976c2c -[UIView _updateConstraintsAsNecessaryAndApplyLayoutFromEngine] + 800
10  UIKitCore         0x18f903944 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 2728
11  QuartzCore        0x18ec15498 CA::Layer::layout_if_needed(CA::Transaction*) + 496
12  UIKitCore         0x18f940c10 -[UIView(Hierarchy) layoutBelowIfNeeded] + 312
Thread 0 name:   Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   QuartzCore        0x18ec2cfe0 -[CALayer animationForKey:] + 176
1   UIKitCore         0x18fa5b258 UniqueAnimationKeyForLayer + 192
2   UIKitCore         0x18fa5ab7c __67-[_UIViewAdditiveAnimationAction runActionForKey:object:arguments:]_block_invoke_2 + 468
3   UIKitCore         0x18fa5ba5c -[_UIViewAdditiveAnimationAction runActionForKey:object:arguments:] + 1968
4   QuartzCore        0x18eb9e938 CA::Layer::set_bounds(CA::Rect const&, bool) + 428
5   QuartzCore        0x18eb9e760 -[CALayer setBounds:] + 132
6   UIKitCore         0x18f941770 -[UIView _backing_setBounds:] + 64
7   UIKitCore         0x18f940404 -[UIView(Geometry) setBounds:] + 340
8   UIKitCore         0x18f908f84 -[UIView(Geometry) _applyISEngineLayoutValuesToBoundsOnly:] + 480
9   UIKitCore         0x18f9089e0 -[UIView(Geometry) _resizeWithOldSuperviewSize:] + 148
10  CoreFoundation    0x18d0cd6a4 __NSARRAY_IS_CALLING_OUT_TO_A_BLOCK__ + 24
11  CoreFoundation    0x18d132488 -[__NSSingleObjectArrayI enumerateObjectsWithOptions:usingBlock:] + 92
12  UIKitCore         0x18f8e62b0 -[UIView(Geometry) resizeSubviewsWithOldSize:] + 128
13  UIKitCore         0x18f977194 -[UIView(AdditionalLayoutSupport) _is_layout] + 124
14  UIKitCore         0x18f976c2c -[UIView _updateConstraintsAsNecessaryAndApplyLayoutFromEngine] + 800
15  UIKitCore         0x18f916258 -[UIView(Hierarchy) layoutSubviews] + 204
16  UIKitCore         0x18f903814 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 2424
17  QuartzCore        0x18ec15498 CA::Layer::layout_if_needed(CA::Transaction*) + 496
18  UIKitCore         0x18f940c10 -[UIView(Hierarchy) layoutBelowIfNeeded] + 312
So far, we only know of one iPad Air M1 where this is happening. But we don't know how many users experience this issue without reporting it.
Does anyone know what could cause Auto Layout or Core Animation to block in those calls? We have no clue so far...