How CallKit Manages VoIP Calls on iOS 12

CallKit in iOS 12 serves as the essential framework that integrates third-party Voice over Internet Protocol (VoIP) applications directly into the native iOS calling interface. By providing system-level access to incoming call screens, call history, and audio routing, CallKit eliminates the fragmented experience of app-specific call notifications. It enables services like WhatsApp, Skype, and corporate softphones to behave identically to standard cellular phone calls on Apple devices.

Native User Interface Integration

Prior to CallKit, an incoming VoIP call arrived as a standard, easily missed banner notification that required unlocking the device and launching the specific app. In iOS 12, CallKit allows developers to trigger the full-screen native incoming call UI directly from the lock screen. Users receive familiar answering controls, including swipe-to-answer, decline, reminder options, and quick-reply messages, regardless of which third-party service is originating the call.

Unified Call Management and Recents

CallKit integrates third-party calls into the native Phone application's "Recents" tab. In iOS 12, users can view missed and completed VoIP calls alongside cellular calls and return them directly from the native call log using the original third-party service. Additionally, CallKit allows third-party services to integrate with native Contacts, enabling users to initiate VoIP calls straight from a contact card or via Siri voice commands.

Background Efficiency via PushKit

CallKit works in tandem with PushKit, Apple's high-priority VoIP push notification service. When an incoming call occurs, a specialized VoIP push wakes the application in the background. CallKit mandates that the app immediately report the incoming call to the system before performing heavy network operations. This architecture ensures low latency, reduces battery consumption by keeping apps dormant until needed, and prevents apps from running indefinitely in the background under the guise of maintaining a continuous call connection.

System-Level Audio and Priority Coordination

Handling call collisions and audio routing is a core function of CallKit on iOS 12. If a cellular call arrives while a user is on a third-party VoIP call, CallKit coordinates the handoff, giving the user the option to end the current call, hold it, or decline the incoming cellular call. It also standardizes the management of audio sessions via AVAudioSession, ensuring that Bluetooth headsets, CarPlay, and car audio systems handle muting, speaker switching, and end-call triggers consistently across all calling apps.

Do Not Disturb and Call Blocking

CallKit respects iOS 12 system-wide policies, including Do Not Disturb and Call Blocking & Identification extensions. Incoming VoIP calls are filtered through the user's Do Not Disturb settings just like traditional cellular connections. Furthermore, apps can supply phone number directories to help the system identify potential spam or block unwanted callers before the phone even rings.