callkit

Report and manage iOS VoIP calls with CallKit and PushKit.

Updated Aug 27, 2026
One-click install
npx skills add https://github.com/KumarAdi8/AgentKit --skill callkit
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: callkit
Source: https://github.com/KumarAdi8/AgentKit/tree/main/skills/callkit
Command: npx skills add https://github.com/KumarAdi8/AgentKit --skill callkit

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve?

Provides clear, production-minded guidance to integrate VoIP calling with the iOS system UI so incoming and outgoing calls are reliably reported, managed, and presented by CallKit while coordinating PushKit notifications and audio sessions.

Core Features & Use Cases

  • Configure and retain a single CXProvider and CXCallController for app lifetime.
  • Report incoming calls from VoIP pushes and implement CXProviderDelegate to handle answer, end, hold, and mute actions.
  • Start outgoing calls via CXStartCallAction and report connecting/connected timestamps.
  • Register and refresh VoIP tokens with PKPushRegistry and forward them to your server.
  • Coordinate AVAudioSession activation/deactivation with provider callbacks and avoid starting audio before activation.
  • Implement Call Directory extensions for caller ID and blocking with incremental updates.
  • Includes a review checklist and common mistakes to prevent app termination, missed pushes, and audio glitches.

Quick Start

Report an incoming VoIP push by sending the push payload to your call manager so it generates a UUID, builds a CXCallUpdate with the caller handle and localized name, and calls reportNewIncomingCall before the PushKit handler completes.

Frequently Asked Questions about callkit

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I report incoming VoIP calls using CallKit and PushKit in iOS?

To report incoming VoIP calls, forward the push payload to your call manager to generate a UUID, build a CXCallUpdate, and call reportNewIncomingCall before the PushKit handler completes. This ensures iOS reliably presents the call.

Why does my iOS app get terminated when receiving a VoIP push?

iOS terminates apps when VoIP pushes are received without promptly reporting a new incoming call. You must invoke reportNewIncomingCall with a CXProvider during the PushKit handler execution to avoid termination and missed pushes.

How do I coordinate AVAudioSession activation with CallKit callbacks?

Coordinate AVAudioSession activation by waiting for CXProviderDelegate callbacks before starting audio. Activating audio before the provider signals activation causes audio glitches and conflicts with the iOS system call UI.

How do I implement a Call Directory extension for caller ID and blocking?

Implement a Call Directory extension to enable caller ID and blocking by applying incremental updates to the directory. This allows iOS to match incoming numbers against your app's stored data without reloading the entire list.

How do I start an outgoing call with CXStartCallAction?

Start outgoing calls by configuring a CXStartCallAction and sending it through your CXCallController. You must report connecting and connected timestamps via CXProvider to sync the iOS system call UI.

Do I need to retain CXProvider and CXCallController for the app lifetime?

Yes, you must configure and retain a single CXProvider and CXCallController instance for the app lifetime. Failing to retain them causes call actions to be lost and disrupts VoIP call management integration.