Starting in iOS 26, two notable changes have been made to CallKit, LiveCommunicationKit, and the PushToTalk framework:
As a diagnostic aid, we're introducing new dialogs to warn apps of voip push related issue, for example when they fail to report a call or when when voip push delivery stops. The specific details of that behavior are still being determined and are likely to change over time, however, the critical point here is that these alerts are only intended to help developers debug and improve their app. Because of that, they're specifically tied to development and TestFlight signed builds, so the alert dialogs will not appear for customers running app store builds. The existing termination/crashes will still occur, but the new warning alerts will not appear.
As PushToTalk developers have previously been warned, the last unrestricted PushKit entitlement ("com.apple.developer.pushkit.unrestricted-voip.ptt") has been disabled in the iOS 26 SDK. ALL apps that link against the iOS 26 SDK which receive a voip push through PushKit and which fail to report a call to CallKit will be now be terminated by the system, as the API contract has long specified.
__
Kevin Elliott
DTS Engineer, CoreOS/Hardware
CallKit
RSS for tagDisplay the system-calling UI for your app’s VoIP services and coordinate your calling services with other apps and the system using CallKit.
Posts under CallKit tag
157 Posts
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hi,
Since I updated my phone to 23A341, my Call filtering app is not blocking calls anymore.
Same release checked on iOS 18 phone, it is working.
I still see the callkit logs into the Console showing that numbers are loaded into the iOS-managed SQlite DB but the calls are not blocked nor identified.
Anyone with the same issue?
BR
We tested call blocking on iOS 26 and noticed something strange: the call will not be blocked if an outgoing call was made to its number before. Nevertheless, it will be blocked if we delete the outgoing call record from the Phone.app Recents.
This behavior looks like a bug and is unexpected when using our application. Was this a planned callkit change in iOS 26? Is it possible to get the correct call blocking behavior back?
We set blocking rules with addBlockingEntry(withNextSequentialPhoneNumber:) and this problem is not present in iOS 18 and earlier.
Thank you in advance
I have also tested this on iOS 26 (Beta 9 and above), and the CallKit call blocking functionality is not working. Numbers that should be blocked still ring through. Caller Identification continues to function as expected, but blocking entries (addBlockingEntry) are ignored.
I’m developing a VoIP app that uses Linphone and CallKit. Everything works as expected until the user enables the speaker on the native CallKit screen. After that, all subsequent calls start with the speaker already on. Even if I call AVAudioSession.sharedInstance().overrideOutputAudioPort(.none), it gets overridden when the call starts (when Linphone begins playing the ringtone). I tested this behavior in WhatsApp, and it seems to work correctly there.
Hello, currently working on messenger with audio/video calls feature. Have found strange behavior, on some devices after accepting call via Lock Screen video button appears to be disabled.
Tested on wwdc Speakerbox sample, same code
iPhone 15 Pro (iOS 17.4.1) - video button disabled
iPhone 14 (iOS 17.6.1) - video button active
Here is my, configuration with supportVideo activated
static let providerConfiguration: CXProviderConfiguration = {
let configuration = CXProviderConfiguration()
configuration.supportsVideo = true
configuration.maximumCallGroups = 1
configuration.maximumCallsPerCallGroup = 1
configuration.supportedHandleTypes = [.generic]
return configuration
}()
What can be the reason of this behavior?
Thanks
Hello Developers,
I am currently developing a Flutter application where I am implementing both push notifications (for messages) and VoIP call notifications. The implementation works perfectly fine on Android. However, I am facing issues specifically on iOS in the following scenarios:
Terminated State:
When the app is terminated on iOS, neither call notifications nor message notifications are received.
In the background state, things partially work, but in the terminated state, nothing comes through.
Debug vs Production:
In Debug mode, everything works as expected (both message and call notifications).
Once I release the app to TestFlight (Production), the notifications completely stop working:
Message notifications are not delivered at all.
Call notifications also fail to appear in terminated state.
Configuration Details:
I have already configured APNs with .p8 key in Firebase.
The required capabilities (Push Notifications, Background Modes → Remote notifications, VoIP, etc.) are enabled in Xcode.
I also updated the AppDelegate.swift / Notification handling code for production environment.
Despite these steps, the same issue persists in production/TestFlight.
It seems like the issue is specifically related to production environment handling on iOS, since everything works in debug.
My Question:
What could be causing push notifications and call notifications to not work in the terminated state on iOS, especially in production/TestFlight builds?
Are there additional configuration steps required for APNs, VoIP, or background handling in production that differ from debug mode?
Any guidance or similar experiences would be really helpful.
Thanks in advance for your support.
We have an application WAVE PTT(Push to talk) and
Application is in foreground state, When a user receives a cellular call and it is in the "ringing" state and application receives a VoIP APNS(video call) which is reported to CallKit.
User rejects the Cellular call from CallKit UI, application Video call is also getting rejected (separate feedback - 19017978) and Here the issue is observed that an Application moved to background(OS26 beta 9).
Issue is not observed in iOS 18 and older versions.
Frequency : 1 out of 3.
Please refer the sysdiagnose logs in below reported feedback ID.
Feedback Ticket ID: 20187309
Syslogs Snippet reference:
default 2025-09-10 12:30:06.991950 +0530 WAVE PTX 0x10e078100 - ApplicationStateTracker: UISceneDidEnterBackground
The crash log, an IPS file, indicates a crash occurred at a specific time, with the exception backtrace pointing to _terminateAppIfThereAreUnhandledVoIPPushes. However, cross-reference with the SysDiagnose logs, there is no corresponding process or activity for the application at the reported crash time. The app was not active, nor was it woken up by any event.
IPS file and SysDiagnose logs have been attached in the Feedback.
Feedback - FB20044587
Observed few times that providerDidBegin(_:) delegate never called for the complete app session after app init(as part of this CXProvider registered) which was built with SDK 26 and running on iOS 26.
This issue observed multiple times with our testing. Since there is no providerDidBegin:, client is marking CallKit as not ready and never report any calls for VoIP APNS and ended up in app crash due to "[PKPushRegistry _terminateAppIfThereAreUnhandledVoIPPushes]"
Please refer for sysdiagnose logs : FB19778306
When my Intents extension resolves an INStartCallIntent and returns .continueInApp while the device is locked, the call does not proceed unless the user unlocks the device. After unlocking, the app receives the NSUserActivity and CallKit proceeds normally.
My expectation is that the native CallKit outgoing UI should appear and the call should start without requiring unlock — especially when using AirPods, where attention is not available.
Steps to Reproduce
Pair and connect AirPods.
Lock the iPhone.
Start music playback (e.g. Apple Music).
Place the phone face down (or cover Face ID sensors so attention isn’t available).
Say: “Hey Siri, call Tommy with DiscoMonday(My app name).”
Observed Behavior
Music mutes briefly.
Siri says “Calling Tommy with DiscoMonday.”
Lock screen shows “Require Face ID / passcode.”
After several seconds, music resumes.
The app is not launched, no NSUserActivity is delivered, and no CXStartCallAction occurs.
With the phone face up, the same phrase launches the app, triggers CXStartCallAction, and the call proceeds via CallKit after faceID.
Expected Behavior
From the lock screen, Siri should hand off INStartCallIntent to the app, which immediately requests CXStartCallAction and drives the CallKit UI (reportOutgoingCall(...startedConnectingAt:) → ...connectedAt:), without requiring device unlock, regardless of orientation or attention availability when AirPods are connected.
Topic:
App & System Services
SubTopic:
Automation & Scripting
Tags:
iOS
Siri and Voice
Intents
CallKit
We've observed an issue where the video button on the CallKit UI is disabled during Video VoIP calls.
This issue appears to be specific to notch devices running SDK 26 and iOS 26 beta 7, specifically on iPhone 11. We have not seen this behavior on devices with Dynamic Island or on older iOS versions.
For further details, please refer to the attached video and sysdiagnose file. : FB19827793
Our experimentation suggests this issue is exclusively present on non-Dynamic Island devices with iOS 26 beta.
The home AppIcon appears as it should but in settings I get the generic icon. I tried:
giving the extension its own assets and AppIcon asset.
giving the main app assets 2 targets, itself AND the extension
setting AppIcon appearances to "none" and iOS "all sizes" and providing 29pt and the other sizes.
Adding to info.plist and specifying "CFBundleIconFiles"
Yes, nuked derived data, switched off phone, everything.
Starting with just the standard 1024×1024 AppIcon (expecting Xcode to auto-generate all slices, including 29pt for Settings). It didn’t — Settings still shows the generic gear.
Question: What should I do to make the extension’s icon show up in Settings?
Environment
• Xcode: 16.4 (16F6)
• iOS: 18.5 (device)
• Targets: iOS app + Call Directory extension
• App icon pipeline: asset catalog (single-size initially, now legacy grid)
Hi,
We've noticed that this issue occurs more frequently after upgrading to iOS 18.4.1 and can result in one-way audio.
Our app uses CallKit with WebRTC to establish VoIP connections.
However, on iOS 18.4.1, CallKit no longer triggers:
func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession)
We're currently comparing the occurrence rate across different iOS versions to better understand the impact.
Could you please help analyze the root cause of this issue?
Hi everyone, on iOS, when a VoIP call arrives and the user accepts it from the lock screen (after unlocking with Face ID/Touch ID), is there any way to automatically bring my app to the foreground and show the in-app call screen, instead of staying in the system CallKit UI?
Hello.
I've implemented the Live Caller ID Lookup feature in my app, but sometimes I get a weird error. When I call LiveCallerIDLookupManager.shared.refreshPIRParameters(...) from my app, it sometimes throws an error:
Error Domain=com.apple.CipherML Code=1100 "Unable to query status due to errors: The resource could not be loaded because the App Transport Security policy requires the use of a secure connection." UserInfo={NSLocalizedDescription=Unable to query status due to errors: The resource could not be loaded because the App Transport Security policy requires the use of a secure connection., NSUnderlyingError=0x118f65740 {Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection." UserInfo={NSLocalizedDescription=The resource could not be loaded because the App Transport Security policy requires the use of a secure connection., NSErrorFailingURLKey=http://www.example.com/config}}}
What does this error mean? And where did the example.com part come from? What should I do to get rid of this error? My Service URL is hardcoded in the Live Caller ID Lookup Extension of my app and it is definitely not example.com.
Hello,
I noticed the new entitlement in iOS 26 under LiveCommunicationKit: Preparing your app to be the default dialer app.
My question is about eligibility:
If a developer account is registered in the EU, can any app add the Default Dialer capability, or is it restricted only to apps that provide real calling/communication functionality (e.g., WhatsApp, Telegram, Skype)?
If granted, does this capability allow the app to make/receive cellular calls and access call history, or is it limited only to VoIP-style scenarios through CallKit integration?
What are the minimum functionalities required to support this feature (e.g., having a dial pad, call history screen, etc.)?
Why must the developer account be registered in the EU to use this entitlement?
Thanks in advance for the clarification!
I've been trying to understand what kind of UX is available if my app is using the default-dialer capability. I have found https://developer.apple.com/documentation/livecommunicationkit/preparing-your-app-to-be-the-default-dialer-app and I am in the EU.
On android I built the UX I want and it's quite neat, so now I'm trying to work. out what I can get on iOS. Because the product is kind of worthless with just android.
I have built a simple dialer ux with a numberpad, contact lookup etc. Then when the user presses the Call button does it have to pop up the system prompt "Call number"? Does it have to swap over to the system ui for the actual call? So there's no way to show information about the call, during the call? Or am I using the frameworks incorrectly? I am very new to iOS development.
TrueCaller and others show validation, but as I understand it they pre-fetch all the data, I can't do that.
Call blocking using a third-party CallKit app is not longer working with the latest iOS 26 Public Beta (23A5297m).
We've tried several different Call Blocking apps (that used to work fine on iOS 18.5) and their call blocking functionality is not working anymore.
All calls pass through and the phone rings on those "blocked" numbers. We got several user complaints about our app that is not working on iOS 26 Public Beta.
We've filed 2 bug reports with Feedback Assistant:
FB19140680
FB19140594
Please fix this issue in the next Beta versions of iOS 26 to have a stable iOS 26 release in the future.
Thank you in advance.
For call reported in lockscreen, after updating the CXCallUpdate for an active callkit reported call with reportCallWithUUID:updated:. The display namer in the callkit UI is not getting updated.
This issue exists from iOS 18 and later. Issue is always seen.
Feedback updated with iOS 26 beta logs:
FB13969440
An issue with the CallKit UI, specifically regarding the functionality of the speaker button.
When a user initiates a video call with CallKit and then, using the existing CallKit session, initiates an audio call, there are no issues with CallKit or the audio.
However, if the user terminates the video call from the CallKit UI, the active CallKit session ends. To resume the ongoing audio call, we report a new CallKit call upon the end call trigger. While there are no issues with this reporting, the CallKit UI does not provide an audio route for the built-in receiver, and the speaker button remains unresponsive.
IPA was build on SDK 18 and running on iOS beta 26.
Issue is NOT seen with SDK18 and running iOS 18.x or lower devices.
Feedback - FB18855566