Display 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

113 Posts

Post

Replies

Boosts

Views

Activity

App is moving to Background when user rejected the GSM cellular call.
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. Issue is not observed in iOS 18 and older versions. Issue observed only with UISceneDelegate changes. Using traditional UIApplicationDelegate doesn't have the issues. Video and Sysdiagnose logs are added in feedback: FB20187309
0
0
243
Oct ’25
Call Directory Number Matching Inconsistency Across Regions
[Question] Inconsistent Call Directory number matching across regions (Japan, Taiwan, U.S.) We’re developing a Call Directory extension and observed inconsistent number matching depending on carrier region and number format. Environment Device: iPhone (iOS 26.0) Call Directory Extension: Custom implementation Carrier A: Japan carrier SIM Carrier B: Taiwan carrier SIM Numbers added to Call Directory patterns: +81 120 580 2XXX +81 704 336 2XXX Observed Behavior (Japan Carrier SIM) Incoming call from +81 120 580 2XXX → Caller name not displayed (Call Directory match failed). Entering 0120 580 2XXX in the Phone app dialer → Name displayed correctly. Incoming call from +81 704 336 2XXX → Caller name displayed correctly. Entering 070 4336 2XXX in the Phone app dialer → Name displayed correctly. Observed Behavior (Taiwan Carrier SIM) Entering +81 120 580 2XXX in the dialer → Name not displayed until the call button is pressed. Entering +81 704 336 2XXX in the dialer → Name displayed immediately, before the call is placed. Steps to Reproduce For Japan carrier: Use a device running iOS 26 with a Japanese SIM card. Add the following numbers to the Call Directory extension: +81 120 580 2XXX and +81 704 336 2XXX Receive an incoming call from +81 120 580 2XXX → ❌ Caller name not displayed. Open the Phone app and enter 0120 580 2XXX → ✅ Caller name displayed. Receive an incoming call from +81 704 336 2XXX → ✅ Caller name displayed. Open the Phone app and enter 070 4336 2XXX → ✅ Caller name displayed. For Taiwan carrier: 7. Insert a Taiwan SIM card (keep the same Call Directory patterns). 8. Enter +81 120 580 2XXX → ❌ Name not shown until the call button is pressed. 9. Enter +81 704 336 2XXX → ✅ Name shown immediately. Expected Result For both numbers: Caller name from Call Directory should display consistently: a) On incoming calls. b) When entering the full number in the dialer (before pressing call). Behavior should be consistent across regions (Japan, Taiwan, United States). Actual Result Region / Carrier Number Pattern Incoming Call Dialer (Local Format) Japan +81 120 580 2XXX ❌ Not shown ✅ Shown (0120 580 2XXX) Japan +81 704 336 2XXX ✅ Shown ✅ Shown (070 4336 2XXX) Taiwan +81 120 580 2XXX N/A ❌ Not shown until call Taiwan +81 704 336 2XXX N/A ✅ Shown immediately Questions How should numbers be formatted or stored in the Call Directory patterns so that they match both incoming calls and dialer input consistently across regions? Are there region-specific number normalization rules (e.g., Japan’s 0-prefixed local dialing or Taiwan’s international format handling)? Is there an official guideline or recommendation for formatting phone numbers in Call Directory extensions (e.g., E.164 vs local format) to ensure consistent matching? Notes The inconsistent behavior appears to be related to how iOS normalizes numbers per carrier region and local dialing conventions. In Japan, incoming calls from mobile numbers starting with 070 match correctly, while 0120 (toll-free) fails unless entered in local format.
2
0
231
Oct ’25
Testing Live Caller ID Lookup Feature before App Store Release
Hi, We are working to integrate the Live Caller ID Lookup feature into our app. After submitting the request form via the link: https://developer.apple.com/contact/request/live-caller-id-lookup/, we received this reply from Apple: Apple’s OHTTP relay has been configured to talk to your OHTTP gateway. Now Live Caller ID Lookup should work for your application extension when distributed through App Store. However, before officially releasing our app on the App Store, we’d like to make sure the Live Caller ID Lookup feature is working as expected. To test this, we uploaded the app to TestFlight, and it successfully passed App Review. However, the test failed — we observed that the system tries to fetch the config from http://www.example.com/config instead of our actual configuration URL. Questions: Is this expected behavior when using TestFlight? Does the Live Caller ID Lookup feature only become active after full public release on the App Store? Is there any recommended way to test this feature before public release? Thank you!
0
0
221
Oct ’25
CallKit Display and Audio Output Mismatch with Unintended UI Reversion
I'm building a React Native call application using the following combination of libraries: https://github.com/react-native-webrtc/react-native-callkeep https://github.com/react-native-webrtc/react-native-webrtc https://github.com/react-native-webrtc/react-native-voip-push-notification When I press the speaker button on the call screen displayed by CallKit and change it to ON, the speaker button display on the call screen reverts back to OFF after a few seconds. However, when the speaker button display reverts to OFF, the actual audio output route does not return to the earpiece - the audio continues to output from the speaker without any change. Could you please advise on what cases might cause the speaker button display to revert, and if there are any potential solutions?
1
0
284
Oct ’25
Call log not updated by CallKit in TestFlight/iOS 26
We encountered an issue with iOS 26 and release version. We developed a voipout application and we created an entry in native call log on dev/prod version with our app that run under iOS 18.6 and earlier. On iOS 26 TestFlight version didn't create entry in call log but debug version did it. I don't find any clue in CallKit documentation for iOS 26 and we use action.fulfill(withDateStarted: .now) for call and end transaction and we develop under Xcode 26 Do you have any suggestion to solve our problems ?
0
0
170
Sep ’25
Live Caller ID Lookup — What’s the automatic refresh cadence for config/PIR parameters? Best way to prompt updates?
Hi Apple team, We’re shipping a Live Caller ID Lookup extension on iOS 18 and have a question about the automatic refresh of configuration/PIR parameters. Questions 1. Is there any documented interval/TTL (min/max) for the system’s automatic refresh of /config and PIR parameters, or is it entirely opportunistic (battery/network/usage)? I can’t find a cadence in the IdentityLookup docs. 2. Does iOS honor server cache headers (e.g., Cache-Control/Expires) to influence when it re-fetches? 3. Which events also trigger a refresh (enable/disable in Settings, OS/app update, device reboot, token/epoch change)? 4. Are there rate limits or best-practice limits for calling refreshExtensionContext and refreshPIRParameters?
0
0
117
Sep ’25
CallKit UI not invoked after receiving VoIP Push – app killed with NSInternalInconsistencyException
Our VoIP app receives PushKit notifications successfully (callservicesd Delivering 1 VoIP payload appears in logs). However, the app is consistently terminated by the system when running in the background or killed state. The crash is caused by iOS expecting a reportNewIncomingCall to CallKit, but the system reports: *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Killing app because it never posted an incoming call to the system after receiving a PushKit VoIP push.' *** Assertion failure in -[PKPushRegistry _terminateAppIfThereAreUnhandledVoIPPushes], PKPushRegistry.m:349 Key Observations: VoIP pushes arrive and are delivered to the app. In foreground, some methods work and CallKit UI sometimes appears. In background/killed state, app is always terminated before CallKit UI shows. Logs confirm the system requires CallKit to be reported immediately inside pushRegistry(_:didReceiveIncomingPushWith:for:completion:). Steps to Reproduce: Run the app with VoIP + CallKit integration. Put app in background (or kill it). Send a VoIP push. Observe system logs and crash: callservicesd: Delivering 1 VoIP payload(s) to application UrgiDoctor: Apps receiving VoIP pushes must post an incoming call via CallKit... error: Killing VoIP app because it failed to post an incoming call in time. Expected Behavior: On receiving a VoIP push, CallKit UI (Accept / Decline screen) should always appear. App should not be killed if reportNewIncomingCall is called in time. Actual Behavior: CallKit UI never appears in background/killed state. App is force-terminated by iOS before user can accept/decline the call. Request: Guidance on the correct sequence for calling reportNewIncomingCall and completionHandler() in pushRegistry. Clarification if any changes in iOS 17/18 affect PushKit + CallKit behavior. Best practices for ensuring CallKit UI always appears reliably after a VoIP push. Environment: iOS 18.5 Simulator + Device Xcode 16.4 Using PushKit + CallKit with VoIP entitlement
1
0
263
Sep ’25
CallKit Caller ID not working in iOS 26
Currenty, I'm developing a blocking and call identity call. In iOS 18, everything works fine, I can show log to debug inside my Callkit extensions But when my app run in iOS 26, I cant even turn on my caller id extension, I'm not able to debug because I dont see any log from my extensions.
1
0
191
Sep ’25
CallKit requestTransaction error code 2
Hello, In production, a large number of users experience outgoing call reporting fails with the following error: com.apple.CallKit.error.requesttransaction Code=2 The iOS version doesn't matter, errors are present in v15-26 Details My CXProvider held as a global singleton, so it’s unlikely to be deinited. There is no explicit call to CXProvider.invalidate() in the app. If I manually invalidate the CXProvider, I observe the expected failure when trying to create an outgoing call (com.apple.CallKit.error.requesttransaction error 2). However, If I recreate the CXProvider after the error, outgoing calls are reported correctly. Many users trigger the providerDidReset delegate method (CXProviderDelegate) before this error. According to the documentation, providerDidReset can be called by the system, and we are supposed to end all active calls, but the documentation doesn't suggest recreating the CXProvider. Question Should I recreate CXProvider after providerDidReset and forget about that, or could this error be caused by something else?
5
0
542
Feb ’26
Callkit call blocking problem
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
12
4
1k
Dec ’25
CallKit speaker problem
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.
1
0
302
Sep ’25
CallKit answer screen video button
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
1
0
118
Sep ’25
Issues with Push Notifications and Call Implementation in Flutter App on iOS (Debug Works, Production/TestFlight Fails)
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.
2
0
227
Sep ’25
[iOS 26 beta 9] App is moving to Background when user rejected the GSM cellular call.
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
1
0
167
Sep ’25
CallKit Call Blocking Not Working
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.
4
1
311
Sep ’25
INStartCallIntent requires unlock when device is face down with AirPods
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.
1
0
442
Sep ’25
App is moving to Background when user rejected the GSM cellular call.
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. Issue is not observed in iOS 18 and older versions. Issue observed only with UISceneDelegate changes. Using traditional UIApplicationDelegate doesn't have the issues. Video and Sysdiagnose logs are added in feedback: FB20187309
Replies
0
Boosts
0
Views
243
Activity
Oct ’25
Call Directory Number Matching Inconsistency Across Regions
[Question] Inconsistent Call Directory number matching across regions (Japan, Taiwan, U.S.) We’re developing a Call Directory extension and observed inconsistent number matching depending on carrier region and number format. Environment Device: iPhone (iOS 26.0) Call Directory Extension: Custom implementation Carrier A: Japan carrier SIM Carrier B: Taiwan carrier SIM Numbers added to Call Directory patterns: +81 120 580 2XXX +81 704 336 2XXX Observed Behavior (Japan Carrier SIM) Incoming call from +81 120 580 2XXX → Caller name not displayed (Call Directory match failed). Entering 0120 580 2XXX in the Phone app dialer → Name displayed correctly. Incoming call from +81 704 336 2XXX → Caller name displayed correctly. Entering 070 4336 2XXX in the Phone app dialer → Name displayed correctly. Observed Behavior (Taiwan Carrier SIM) Entering +81 120 580 2XXX in the dialer → Name not displayed until the call button is pressed. Entering +81 704 336 2XXX in the dialer → Name displayed immediately, before the call is placed. Steps to Reproduce For Japan carrier: Use a device running iOS 26 with a Japanese SIM card. Add the following numbers to the Call Directory extension: +81 120 580 2XXX and +81 704 336 2XXX Receive an incoming call from +81 120 580 2XXX → ❌ Caller name not displayed. Open the Phone app and enter 0120 580 2XXX → ✅ Caller name displayed. Receive an incoming call from +81 704 336 2XXX → ✅ Caller name displayed. Open the Phone app and enter 070 4336 2XXX → ✅ Caller name displayed. For Taiwan carrier: 7. Insert a Taiwan SIM card (keep the same Call Directory patterns). 8. Enter +81 120 580 2XXX → ❌ Name not shown until the call button is pressed. 9. Enter +81 704 336 2XXX → ✅ Name shown immediately. Expected Result For both numbers: Caller name from Call Directory should display consistently: a) On incoming calls. b) When entering the full number in the dialer (before pressing call). Behavior should be consistent across regions (Japan, Taiwan, United States). Actual Result Region / Carrier Number Pattern Incoming Call Dialer (Local Format) Japan +81 120 580 2XXX ❌ Not shown ✅ Shown (0120 580 2XXX) Japan +81 704 336 2XXX ✅ Shown ✅ Shown (070 4336 2XXX) Taiwan +81 120 580 2XXX N/A ❌ Not shown until call Taiwan +81 704 336 2XXX N/A ✅ Shown immediately Questions How should numbers be formatted or stored in the Call Directory patterns so that they match both incoming calls and dialer input consistently across regions? Are there region-specific number normalization rules (e.g., Japan’s 0-prefixed local dialing or Taiwan’s international format handling)? Is there an official guideline or recommendation for formatting phone numbers in Call Directory extensions (e.g., E.164 vs local format) to ensure consistent matching? Notes The inconsistent behavior appears to be related to how iOS normalizes numbers per carrier region and local dialing conventions. In Japan, incoming calls from mobile numbers starting with 070 match correctly, while 0120 (toll-free) fails unless entered in local format.
Replies
2
Boosts
0
Views
231
Activity
Oct ’25
Testing Live Caller ID Lookup Feature before App Store Release
Hi, We are working to integrate the Live Caller ID Lookup feature into our app. After submitting the request form via the link: https://developer.apple.com/contact/request/live-caller-id-lookup/, we received this reply from Apple: Apple’s OHTTP relay has been configured to talk to your OHTTP gateway. Now Live Caller ID Lookup should work for your application extension when distributed through App Store. However, before officially releasing our app on the App Store, we’d like to make sure the Live Caller ID Lookup feature is working as expected. To test this, we uploaded the app to TestFlight, and it successfully passed App Review. However, the test failed — we observed that the system tries to fetch the config from http://www.example.com/config instead of our actual configuration URL. Questions: Is this expected behavior when using TestFlight? Does the Live Caller ID Lookup feature only become active after full public release on the App Store? Is there any recommended way to test this feature before public release? Thank you!
Replies
0
Boosts
0
Views
221
Activity
Oct ’25
CallKit Display and Audio Output Mismatch with Unintended UI Reversion
I'm building a React Native call application using the following combination of libraries: https://github.com/react-native-webrtc/react-native-callkeep https://github.com/react-native-webrtc/react-native-webrtc https://github.com/react-native-webrtc/react-native-voip-push-notification When I press the speaker button on the call screen displayed by CallKit and change it to ON, the speaker button display on the call screen reverts back to OFF after a few seconds. However, when the speaker button display reverts to OFF, the actual audio output route does not return to the earpiece - the audio continues to output from the speaker without any change. Could you please advise on what cases might cause the speaker button display to revert, and if there are any potential solutions?
Replies
1
Boosts
0
Views
284
Activity
Oct ’25
Call log not updated by CallKit in TestFlight/iOS 26
We encountered an issue with iOS 26 and release version. We developed a voipout application and we created an entry in native call log on dev/prod version with our app that run under iOS 18.6 and earlier. On iOS 26 TestFlight version didn't create entry in call log but debug version did it. I don't find any clue in CallKit documentation for iOS 26 and we use action.fulfill(withDateStarted: .now) for call and end transaction and we develop under Xcode 26 Do you have any suggestion to solve our problems ?
Replies
0
Boosts
0
Views
170
Activity
Sep ’25
Live Caller ID Lookup — What’s the automatic refresh cadence for config/PIR parameters? Best way to prompt updates?
Hi Apple team, We’re shipping a Live Caller ID Lookup extension on iOS 18 and have a question about the automatic refresh of configuration/PIR parameters. Questions 1. Is there any documented interval/TTL (min/max) for the system’s automatic refresh of /config and PIR parameters, or is it entirely opportunistic (battery/network/usage)? I can’t find a cadence in the IdentityLookup docs. 2. Does iOS honor server cache headers (e.g., Cache-Control/Expires) to influence when it re-fetches? 3. Which events also trigger a refresh (enable/disable in Settings, OS/app update, device reboot, token/epoch change)? 4. Are there rate limits or best-practice limits for calling refreshExtensionContext and refreshPIRParameters?
Replies
0
Boosts
0
Views
117
Activity
Sep ’25
Live Caller ID Lookup
Is the API of Live Caller ID Lookup not open to ordinary developers? How can I get the development permission of Live Caller ID Lookup?
Replies
2
Boosts
0
Views
172
Activity
Sep ’25
Live Caller ID Lookup configuration submission
Hello fellow developers, Anyone blocked at the Live Caller ID Lookup configuration step? I submitted multiple times the form without any news from Apple since a few months (last one is FL7S57UFVR). This is blocking our app release to our customers. Thank you
Replies
1
Boosts
0
Views
266
Activity
Sep ’25
CallKit: Call Blocking for 3rd party apps question
Hi Apple Dev community, I want to ask if CallKit and CXCallDirectoryProvider (with addBlockingEntryWithNextSequentialPhoneNumber) doesn't work for 3rd party Phone apps. Is this a known issue that CallKit doesn't work on 3rd party iOS Phone apps (like WhatsApp, etc)? Thank you.
Replies
0
Boosts
0
Views
131
Activity
Sep ’25
CallKit UI not invoked after receiving VoIP Push – app killed with NSInternalInconsistencyException
Our VoIP app receives PushKit notifications successfully (callservicesd Delivering 1 VoIP payload appears in logs). However, the app is consistently terminated by the system when running in the background or killed state. The crash is caused by iOS expecting a reportNewIncomingCall to CallKit, but the system reports: *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Killing app because it never posted an incoming call to the system after receiving a PushKit VoIP push.' *** Assertion failure in -[PKPushRegistry _terminateAppIfThereAreUnhandledVoIPPushes], PKPushRegistry.m:349 Key Observations: VoIP pushes arrive and are delivered to the app. In foreground, some methods work and CallKit UI sometimes appears. In background/killed state, app is always terminated before CallKit UI shows. Logs confirm the system requires CallKit to be reported immediately inside pushRegistry(_:didReceiveIncomingPushWith:for:completion:). Steps to Reproduce: Run the app with VoIP + CallKit integration. Put app in background (or kill it). Send a VoIP push. Observe system logs and crash: callservicesd: Delivering 1 VoIP payload(s) to application UrgiDoctor: Apps receiving VoIP pushes must post an incoming call via CallKit... error: Killing VoIP app because it failed to post an incoming call in time. Expected Behavior: On receiving a VoIP push, CallKit UI (Accept / Decline screen) should always appear. App should not be killed if reportNewIncomingCall is called in time. Actual Behavior: CallKit UI never appears in background/killed state. App is force-terminated by iOS before user can accept/decline the call. Request: Guidance on the correct sequence for calling reportNewIncomingCall and completionHandler() in pushRegistry. Clarification if any changes in iOS 17/18 affect PushKit + CallKit behavior. Best practices for ensuring CallKit UI always appears reliably after a VoIP push. Environment: iOS 18.5 Simulator + Device Xcode 16.4 Using PushKit + CallKit with VoIP entitlement
Replies
1
Boosts
0
Views
263
Activity
Sep ’25
CallKit Caller ID not working in iOS 26
Currenty, I'm developing a blocking and call identity call. In iOS 18, everything works fine, I can show log to debug inside my Callkit extensions But when my app run in iOS 26, I cant even turn on my caller id extension, I'm not able to debug because I dont see any log from my extensions.
Replies
1
Boosts
0
Views
191
Activity
Sep ’25
CallKit requestTransaction error code 2
Hello, In production, a large number of users experience outgoing call reporting fails with the following error: com.apple.CallKit.error.requesttransaction Code=2 The iOS version doesn't matter, errors are present in v15-26 Details My CXProvider held as a global singleton, so it’s unlikely to be deinited. There is no explicit call to CXProvider.invalidate() in the app. If I manually invalidate the CXProvider, I observe the expected failure when trying to create an outgoing call (com.apple.CallKit.error.requesttransaction error 2). However, If I recreate the CXProvider after the error, outgoing calls are reported correctly. Many users trigger the providerDidReset delegate method (CXProviderDelegate) before this error. According to the documentation, providerDidReset can be called by the system, and we are supposed to end all active calls, but the documentation doesn't suggest recreating the CXProvider. Question Should I recreate CXProvider after providerDidReset and forget about that, or could this error be caused by something else?
Replies
5
Boosts
0
Views
542
Activity
Feb ’26
iOS 26 23A341 - CallDirectory does not block calls anymore
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
Replies
5
Boosts
1
Views
394
Activity
Sep ’25
Callkit call blocking problem
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
Replies
12
Boosts
4
Views
1k
Activity
Dec ’25
CallKit speaker problem
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.
Replies
1
Boosts
0
Views
302
Activity
Sep ’25
CallKit answer screen video button
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
Replies
1
Boosts
0
Views
118
Activity
Sep ’25
Issues with Push Notifications and Call Implementation in Flutter App on iOS (Debug Works, Production/TestFlight Fails)
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.
Replies
2
Boosts
0
Views
227
Activity
Sep ’25
[iOS 26 beta 9] App is moving to Background when user rejected the GSM cellular call.
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
Replies
1
Boosts
0
Views
167
Activity
Sep ’25
CallKit Call Blocking Not Working
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.
Replies
4
Boosts
1
Views
311
Activity
Sep ’25
INStartCallIntent requires unlock when device is face down with AirPods
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.
Replies
1
Boosts
0
Views
442
Activity
Sep ’25