Hello there :)
We have an iOS/iPadOS app that uses the ImageCaptureCore framework for PTP communication with cameras. In general, it is working just fine.
But in "Xcode > Organizer > ’our app’ > Crashes" we get a good amount of different – yet similar – crashes in this framework. So we can just observe that a good amount of end-users get those crashes. But we are not able to reproduce them ourselves...
I've checked the stack traces of the other threads but nothing suspicious got my attention.
Any good idea of how to address these crashes shown below?
Happens on iOS 15–17.
Thanks!
Thanks for the crash reports.
I ran these through an internal system and AFAIK these crashes are very specific to your app. That suggests one of two things:
-
There’s a bug in your code that’s causing this.
-
There’s a very obscure bug in the system that only your app manages to trigger.
In situation like this I normally favour the first option, but the API you’re using is fairly obscure.
The other thing about the crash reports is that they all suggest a memory management issue. A typical backtrace looks like this:
Thread 51 name:
Thread 51 Crashed:
0 libobjc.A.dylib … objc_msgSend + 8 (:-1)
1 ImageCaptureCore … __47-[ICCameraDevice remoteCameraWithFailureBlock:]_block_invoke + 188 (ICCameraDe…
2 Foundation … __NSXPCCONNECTION_IS_CALLING_OUT_TO_ERROR_BLOCK__ + 24 (NSXPCConnection.m:217)
3 Foundation … __88-[NSXPCConnection _sendInvocation:orArguments:count:methodSignature:selector:w…
4 libxpc.dylib … _xpc_connection_reply_callout + 124 (serializer.c:119)
5 libxpc.dylib … _xpc_connection_call_reply_async + 88 (connection.c:891)
6 libdispatch.dylib … _dispatch_client_callout3 + 20 (object.m:586)
7 libdispatch.dylib … _dispatch_mach_msg_async_reply_invoke + 344 (mach.c:3102)
8 libdispatch.dylib … _dispatch_lane_serial_drain + 372 (queue.c:3885)
9 libdispatch.dylib … _dispatch_lane_invoke + 436 (queue.c:3976)
10 libdispatch.dylib … _dispatch_workloop_worker_thread + 648 (queue.c:6507)
11 libsystem_pthread.dylib … _pthread_wqthread + 288 (pthread.c:2618)
12 libsystem_pthread.dylib … start_wqthread + 8 (:-1)
Frames 12 through 6 are standard Dispatch run-a-block-on-a-queue code. Frames 5 and 4 are core XPC code, processing a reply callback. Frames 3 and 2 are the NSXPCConnection
code layered on top of that. Frame 1 is a reply block within -[ICCameraDevice remoteCameraWithFailureBlock:]
. Frame 0 is the Objective-C runtime crashing. The runtime is essentially bug free, which means that the only way it can crash is if it was passed a bogus object.
That doesn’t tell us where the bogus object came from, alas. In situations like this I usually prescribe a course of the standard memory debugging tools. If you’re lucky these will make the problem more reproducible, which will allow you to debug it further.
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"