callkit

Implement native iOS VoIP calling with CallKit and PushKit.

Updated May 6, 2026
One-click install
npx skills add https://github.com/Roy-wonji/claude-config --skill callkit-roy-wonji
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: callkit
Source: https://github.com/Roy-wonji/claude-config/tree/main/skills/swift-ios-skills/skills/callkit
Command: npx skills add https://github.com/Roy-wonji/claude-config --skill callkit-roy-wonji

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve?

This Skill helps you implement reliable VoIP calling experiences on iOS that integrate with the system call UI, including the tricky coordination between PushKit receipts, CallKit reporting, and audio/session lifecycle.

Core Features & Use Cases

  • VoIP CallKit integration: Build incoming and outgoing call flows using CXProvider, CXCallController, and CXProviderDelegate so the system can display and manage calls.
  • PushKit VoIP push handling: Register for VoIP pushes and report incoming calls immediately upon receipt to avoid app termination.
  • Audio session coordination: Configure and start/stop audio only in the proper CallKit delegate callbacks to prevent silence and conflicts.
  • Call Directory extension: Add caller identification and call blocking via CXCallDirectoryProvider and reload the extension after updates.

Quick Start

Implement a CXProvider with a CXProviderDelegate, then register for PKPushRegistry VoIP pushes and report each incoming VoIP push as a new incoming CallKit call before the PushKit completion handler returns.

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 with CallKit and PushKit without the app terminating?

To report incoming VoIP calls with CallKit, register for PKPushRegistry VoIP pushes and call reportNewIncomingCall before the PushKit completion handler returns to prevent iOS from terminating the app.

How does CallKit coordinate AVAudioSession activation and deactivation for VoIP calls?

CallKit coordinates AVAudioSession activation by requiring you to configure and start audio only within CXProviderDelegate callbacks, preventing audio conflicts and silence during VoIP call flows.

What is the best way to implement caller identification and call blocking on iOS?

The best way to implement caller identification and call blocking is using a Call Directory extension with CXCallDirectoryProvider, reloading the extension after adding identification or blocking data updates.

Can I use CXCallController and CXProvider to handle both incoming and outgoing VoIP calls?

Yes, you can use CXCallController and CXProvider to handle both incoming and outgoing VoIP calls by implementing CXProviderDelegate action handling with proper action.fulfill or action.fail responses.

Why does my VoIP call audio stay silent when using CallKit?

VoIP call audio stays silent when AVAudioSession is activated outside the proper CallKit delegate callbacks, requiring audio session start and stop to be driven strictly by CXProviderDelegate events.