Can CXCallObserver detect missed cellular calls while an iOS app is suspended?

Hello,

I am developing an iPhone application to help users avoid missing important phone calls.

The intended behavior is:

  1. A user receives a regular cellular call through the built-in iPhone Phone app.
  2. The user does not answer the call.
  3. Our application automatically detects the missed call.
  4. The application schedules repeated local notifications until the user acknowledges the missed call.

The critical requirement is that detection must work while our application is in the background, without the user reopening it.

Implementation

We currently use CXCallObserver to observe cellular call events. When an incoming call ends without being connected, we classify it as a missed call and schedule notifications using UNUserNotificationCenter.

Test environment

  • Device: iPhone 17
  • iOS: 26.7.1
  • Distribution target: Standard App Store, Japan
  • Testing: Physical device without an attached Xcode debugger

Observed behavior

Scenario A: Our application is visible immediately before the iPhone is locked.

Missed calls have been detected and notifications scheduled after more than 30 to 60 minutes of device lock.

Scenario B: Our application is moved to the background before the iPhone is locked, for example by returning to the Home Screen or opening Safari.

Missed calls are not detected promptly, even after only a short period in the background.

When the user subsequently opens our application, CXCallObserver callbacks may arrive and the earlier missed call is then detected.

This defeats the purpose of the application because the user must reopen it to receive alerts.

Questions

  1. Is CXCallObserver expected to deliver callbacks while its application is suspended, or only when the process is executing?

  2. Is there any supported public iOS API, extension, or background execution mechanism that allows a third-party application to detect missed calls from the built-in Phone app while the application is suspended or terminated?

  3. Can a regular cellular missed-call event wake or relaunch a third-party application?

  4. If CXCallObserver cannot support this use case, is there another Apple-supported solution available to ordinary App Store applications distributed in Japan?

We are looking for an approach that does not require external hardware, carrier integration, private APIs, or unsupported background execution techniques.

If this use case is not supported by the public iOS SDK, confirmation of that limitation would be very helpful.

Thank you for your guidance.

We currently use CXCallObserver to observe cellular call events.

To be clear, CXCallObserver covers all of our “call APIs”, not "cellular calls.” It will be triggered by all CallKit, LiveCommunicationKit, and possibly even PushToTalk apps not just cellular calls. I'll note that PushToTalk activity in particular may appear "weird"[1] in CXCallObserver, if your goal is to try and infer user-level call activity based on CXCallObserver notifications.

  1. Is CXCallObserver expected to deliver callbacks while its application is suspended?

No. It is specifically NOT expected to work while apps are suspended.

Or only when the process is executing?

Yes. More specifically, the primary purpose of CXCallObserver is to give CallKit apps clear visibility into other call activity so that they can make informed choices about their own call activity— for example, choosing not to report a low-priority call if the user happens to have a call active. Other apps can also use it for the same role while they happen to be active, but it's not intended to function while apps are suspended.

It was definitely NOT designed to be a general-purpose "call tracking/monitoring" API.

  1. Is there any supported public iOS API, extension, or background execution mechanism that allows a third-party application to detect missed calls from the built-in Phone app while the application is suspended or terminated?

No.

  1. Can a regular cellular missed-call event wake or relaunch a third-party application?

No.

  1. If CXCallObserver cannot support this use case, is there another Apple-supported solution available to ordinary App Store applications distributed in Japan?

No, nothing like this exists.

Finally, one point I want to expand on here is that outside of the VERY core of the system call management system, the system doesn't really differentiate between cellular calls and 3rd-party call activity. This isn't simply a case of the API being private; it's that callservicesd and its supporting daemon's don't actually export ANY information beyond the very minimal real-time context information CXCallObserver provides. Providing a more complete "call tracking" API would actually require building substantial new API and support infrastructure, not just making existing API public.

[1] I haven't actually looked at this closely, but the PTT framework uses a specialized "call" object inside callservicesd so that it can properly interoperate with other call activity, but that call object isn't really trying to "act" like a standard CallKit/LTK call. For example, the PTT "call" will often activate and deactivate MUCH faster than any normal call would, since it's directly playing incoming audio, not actually waiting for the user to "answer" or "end" an actual call. I don't know how CXCallObserver will interpret that, assuming the PTT is visible to it.

__
Kevin Elliott
DTS Engineer, CoreOS/Hardware

Can CXCallObserver detect missed cellular calls while an iOS app is suspended?
 
 
Q