One of my SwiftUI applications using a Canvas view started to crash with Xcode 16. It was working flawlessly with Xcode 15. I was able to come up with a minimal SwiftUI app that shows the issue:
@main struct CanvasTest: App {
var body: some Scene {
WindowGroup {
VStack {
Canvas { context, size in
context.withCGContext { cgContext in
let z = Int(size.width / 3.0)
for i in 0..<18000 { // crashes from 17413 on
cgContext.beginPath()
cgContext.move(to: CGPoint(x: (i % z) * 3, y: (i / z) * 2))
cgContext.addLine(to: CGPoint(x: (i % z) * 3 + 2, y: (i / z) * 2))
cgContext.strokePath()
}
}
}
}
}
}
}
The canvas displays 18000 lines and the context.withCGContext
invocation also completes successfully. Yet, the application crashes immediately after like this (details below):
Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x00000001800eabb4
Termination Reason: SIGNAL 5 Trace/BPT trap: 5
Terminating Process: exc handler [2162]
I was wondering if anyone else noticed that change and found a way to fix it? Alternatively, I am looking for workarounds. I have to be able to display large drawings created via core context-based graphics.
Is this worth reporting to Apple?
Thanks already now for any help and advice.
Hardware Model: Mac15,9
Process: CanvasTest [2162]
Path: /Users/USER/Library/Developer/CoreSimulator/Devices/0C372C7C-3D00-48AA-8124-799CB9A35C1E/data/Containers/Bundle/Application/EBAEC7A2-C93D-48B7-9754-4F3F54A33084/CanvasTest.app/CanvasTest
Identifier: com.objecthub.CanvasTest
Version: 1.0 (1)
Code Type: ARM-64 (Native)
Role: Foreground
Parent Process: launchd_sim [98324]
Coalition: com.apple.CoreSimulator.SimDevice.0C372C7C-3D00-48AA-8124-799CB9A35C1E [58431]
Responsible Process: SimulatorTrampoline [3499]
Date/Time: 2024-12-01 14:33:07.7617 +0100
Launch Time: 2024-12-01 14:33:07.4151 +0100
OS Version: macOS 15.1.1 (24B91)
Release Type: User
Report Version: 104
Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x00000001800eabb4
Termination Reason: SIGNAL 5 Trace/BPT trap: 5
Terminating Process: exc handler [2162]
Triggered by Thread: 0
Application Specific Information:
Abort Cause 268435470
Thread 0 Crashed:: Dispatch queue: com.Metal.CommandQueueDispatch
0 libxpc.dylib 0x1800eabb4 _xpc_connection_release_message.cold.1 + 60
1 libxpc.dylib 0x1800c9910 _xpc_connection_release_message + 240
2 libxpc.dylib 0x1800c80b4 _xpc_connection_enqueue + 264
3 libxpc.dylib 0x1800c8b9c xpc_connection_send_message + 128
4 MTLSimDriver 0x2275c6e7c -[MTLSimCommandQueue submitCommandBuffers:count:] + 368
5 Metal 0x19eabdfd4 -[_MTLCommandQueue _submitAvailableCommandBuffers] + 480
6 Metal 0x19eabe4ac __40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke + 24
7 libdispatch.dylib 0x180178de0 _dispatch_client_callout + 16
8 libdispatch.dylib 0x180188ac8 _dispatch_lane_barrier_sync_invoke_and_complete + 92
9 Metal 0x19eabe46c -[_MTLCommandQueue submitCommandBuffer:] + 112
10 MTLSimDriver 0x2275c5fc8 -[MTLSimCommandBuffer commitAndWaitUntilSubmitted] + 40
11 RenderBox 0x1c6e9015c RB::RenderFrame::~RenderFrame() + 240
12 RenderBox 0x1c6e6e9dc __38-[RBLayer displayWithBounds:callback:]_block_invoke.27 + 500
13 libdispatch.dylib 0x180178de0 _dispatch_client_callout + 16
14 libdispatch.dylib 0x180188ac8 _dispatch_lane_barrier_sync_invoke_and_complete + 92
15 RenderBox 0x1c6e6de38 -[RBLayer displayWithBounds:callback:] + 2480
16 RenderBox 0x1c6e6d46c -[RBLayer display] + 172
17 QuartzCore 0x18b0c7e74 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 392
18 QuartzCore 0x18affca50 CA::Context::commit_transaction(CA::Transaction*, double, double*) + 464
19 QuartzCore 0x18b02b260 CA::Transaction::commit() + 652
20 UIKitCore 0x185af0f70 __34-[UIApplication _firstCommitBlock]_block_invoke_2 + 32
21 CoreFoundation 0x18041b58c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 20
22 CoreFoundation 0x18041acc4 __CFRunLoopDoBlocks + 352
23 CoreFoundation 0x1804153cc __CFRunLoopRun + 812
24 CoreFoundation 0x180414c24 CFRunLoopRunSpecific + 552
25 GraphicsServices 0x19020ab10 GSEventRunModal + 160
26 UIKitCore 0x185ad82fc -[UIApplication _run] + 796
27 UIKitCore 0x185adc4f4 UIApplicationMain + 124
28 SwiftUI 0x1d290b41c closure #1 in KitRendererCommon(_:) + 164
29 SwiftUI 0x1d290b144 runApp<A>(_:) + 84
30 SwiftUI 0x1d266bef4 static App.main() + 148
31 CanvasTest.debug.dylib 0x105061c64 static CanvasTest.$main() + 40
32 CanvasTest.debug.dylib 0x105061d14 __debug_main_executable_dylib_entry_point + 12 (CanvasTest.swift:11)
33 dyld_sim 0x10519d410 start_sim + 20
34 dyld 0x10539a274 start + 2840
Thread 4:: com.apple.uikit.eventfetch-thread
0 libsystem_kernel.dylib 0x1050f5290 mach_msg2_trap + 8
1 libsystem_kernel.dylib 0x1051066c4 mach_msg2_internal + 76
2 libsystem_kernel.dylib 0x1050fd3f4 mach_msg_overwrite + 536
3 libsystem_kernel.dylib 0x1050f55cc mach_msg + 20
4 CoreFoundation 0x18041b000 __CFRunLoopServiceMachPort + 156
5 CoreFoundation 0x180415528 __CFRunLoopRun + 1160
6 CoreFoundation 0x180414c24 CFRunLoopRunSpecific + 552
7 Foundation 0x180f319c8 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 208
8 Foundation 0x180f31be8 -[NSRunLoop(NSRunLoop) runUntilDate:] + 60
9 UIKitCore 0x185b858c0 -[UIEventFetcher threadMain] + 404
10 Foundation 0x180f58810 __NSThread__start__ + 720
11 libsystem_pthread.dylib 0x10507f6f8 _pthread_start + 104
12 libsystem_pthread.dylib 0x10507a940 thread_start + 8