How CallKit Adds VoIP Calls to iOS 16 Call History

Apple’s CallKit framework bridges third-party Voice over IP (VoIP) applications—such as WhatsApp, Microsoft Teams, and Zoom—with the native iOS telephony interface. In iOS 16, CallKit enables third-party apps to register incoming and outgoing calls directly into the native Phone app's "Recents" call log. By utilizing standardized system APIs, CallKit ensures that VoIP calls appear alongside traditional cellular calls, allowing users to view metadata, check timestamps, and return missed calls seamlessly.

The Role of CXProvider and Call Reporting

The integration relies primarily on the CXProvider object, which acts as the intermediary between the VoIP application and the iOS operating system. When a call occurs, the app communicates state transitions to CallKit rather than handling the call screen and logging independently.

For incoming calls, the workflow operates as follows:

  1. Push Notification: The app receives a high-priority VoIP push notification via Apple’s PushKit framework.
  2. Call Creation: The app initializes a CXCallUpdate object containing caller metadata, such as the contact name and handle (phone number, email, or username).
  3. System Registration: The app calls reportNewIncomingCall(with:update:completion:) on its CXProvider instance.

Once this method executes, iOS 16 wakes the native calling interface and automatically logs the event into the central call database.

Outgoing Call Logging

For outgoing calls, the app requests a CXStartCallAction from a CXCallController. Once the system authorizes the action, the transaction is marked complete, and iOS registers the outgoing attempt in the native call history. This ensures that calls initiated within the VoIP app or via Siri are immediately reflected in the iOS 16 Recents tab.

Data Stored in the Native Call History

iOS 16 stores specific metadata provided by the third-party app's CallKit implementation:

  • Caller Identification: Display names and handles specified in CXHandle.
  • Service Provider: The app's name and icon appear beneath the contact's name, distinguishing the VoIP service from standard cellular calls.
  • Call Metrics: Start time, duration, and call status (missed, received, or outgoing).

Callbacks from the Recents List

CallKit integration goes beyond passive logging by enabling bi-directional interaction. When a user taps a VoIP entry in the iOS 16 Recents tab, the system does not place a standard cellular call. Instead, iOS uses SiriKit and CallKit (INStartCallIntent) to launch the associated third-party app directly and pass the contact handle, initiating a return call through the original service.