Hello Apple Developer Community,
I’m working on integrating Siri into my React Native app using native iOS code and bridging to React Native. I’ve followed the necessary steps to set up Siri support, including:
Adding the Siri capability.
Adding Siri usage descriptions in Info.plist.
Using AppIntent and AppShortcutsProvider to define shortcuts.
However, I’m facing the following issues:
Siri Prompts for Confirmation
When a user says a phrase, Siri asks, "Turn on 'MyApp' shortcuts with Siri?" instead of directly recognizing the phrase. Is this expected behavior? If so, how can I reduce friction for users and make the experience more seamless?
Inconsistent Behavior for Existing Users
For users updating to a version with Siri support:
When the app is closed, Siri says, "MyApp hasn't added support for that with Siri."
When the app is open, Siri prompts, "Turn on shortcut for MyApp?" and rest all working fine
Why does Siri not recognize the shortcut when the app is closed, even though the shortcut is defined in AppShortcutsProvider? How can I ensure that Siri recognizes the shortcut regardless of whether the app is open or closed? Other than using AppIntent and AppShortcutsProvider should i try Donating shortcuts(will that helps for updated user case). Please help me on this
General
RSS for tagDelve into the world of built-in app and system services available to developers. Discuss leveraging these services to enhance your app's functionality and user experience.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hi All,
I am facing one problem in my app.
That is open battery settings from my app.
It is working fine in iOS 16.0.0 and it's not working in iOS 18.6.1
is it possible to make it workable in iOS 18.6.1?
If so How to do that?
Please help me over this to resolve the problem.
Thanks,
Nguyen Quang Minh
In iOS 26, on iPad (as least, but maybe phone too, yet to test) if you tap an iMessage (a second time) that should launch an iMessage App, it does not launch app.
Has anyone else seen this - it makes many iMessage app unusable.
Steps to reproduce
Send a message that launches iMessage on tap.
Tap message on recipient's device.
Observe iMessage App open.
Dismiss iMessage
Tap message again
Observe nothing happens, app is not launched.
Topic:
App & System Services
SubTopic:
General
Hi,
I'm trying to add an extension to my app on iOS 26.
I've followed the instructions on https://developer.apple.com/documentation/extensionfoundation/adding-support-for-app-extensions-to-your-app
and made it as far as being able to launch the extension:
let monitor = try await AppExtensionPoint.Monitor(appExtensionPoint: .localWebServerExtension)
currentIdentity = monitor.identities.first
if let currentIdentity = currentIdentity {
let myConfig = AppExtensionProcess.Configuration(appExtensionIdentity: currentIdentity, onInterruption: { NSLog("extension was terminated") })
myProcess = try await AppExtensionProcess(configuration: myConfig)
myConnection = try myProcess?.makeXPCConnection()
}
None of these calls throw, and when I examine myProcess from inside that code, it seems to be normal (there's a pid, for example).
Yet the code inside my extension seems to not be executed: breakpoints are not triggered, NSLog() calls do not appear on the console. The onInterruption() callback is also not triggered, or at least it does not appear on the console either.
I've probably missed something obvious, but what could it be?
Hi Apple Developers,
I am currently working on a message filtering application and facing issues specifically with filtering RCS (Rich Communication Services) messages. To debug this, I created a sample app that consistently categorizes all incoming messages as "junk." However, the filtering behaviour is inconsistent and not functioning as expected.
Here are the key issues observed during testing on iOS versions 18.2.1 and 18.3:
Inconsistent Filtering Behavior:
When a message is received from an unknown number, it sometimes gets moved to the Junk folder momentarily but is then immediately moved back to the main Messages inbox.
In some cases, the message does not get moved to the Junk folder at all, despite the app returning the verdict as "junk."
Duplicate Contact Tiles:
The Messages app displays two separate conversation tiles for the same mobile number, which is unexpected behavior.
For reference, my carrier partner is T-Mobile. Please let me know if you need any additional information to investigate this issue further.
Looking forward to your insights and guidance.
Best regards,
Rijul Singhal
We are planning on renaming our app. The new name is not like the current name. It will be renamed in the App Store as well as the App display name. Yet, we still want new and existing users to be able to find the app by using the old name in search/spotlight under iOS. A great example of this is entering Twitter to find the X app and it shows up in the App section in the Spotlight search.
Are there any guidelines, settings, or tricks for doing this? Some have suggested adding a Spotlight search term but that will not have it show up in the App section I fear.
I am trying to build my app and want to be able to integrate with apple ads services so I can get my users attribution token. I tried a added the "com.apple.developer.adservices" entitlement but now that I build my app it fails with the following error
include the com.apple.developer.adservices entitlement. Profile qualification is using entitlement definitions that may be out of date. Connect to network to update.
What do I need to do to make this work, I tried and cant fina any docs online
Topic:
App & System Services
SubTopic:
General
When I call https://developer.apple.com/documentation/contactprovider/contactprovidermanager/enable() to request to use Contact Provider, I received a dialog with message like this
"App Name would like to add its contacts as its own list. Contacts added this way can be removed from settings".
I would like to support this message in Japanese or other languages. Is it possible?
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?
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
In the past I was always able to install every major macOS version on an external drive so that I can test my apps. But now I'm unable to install macOS Tahoe 26 on an external drive. Actually, as far as I'm aware, there are not even official links to macOS 26 installers, but only instructions on how to update to macOS 26 from an existing macOS installation. So I thought I'd install macOS 15 on a separate drive and then update to macOS 26, but whenever I run the macOS 15 installer, tell it to install on the external drive, and reboot after the setup process completes, my MacBook just boots into my main macOS partition as if nothing happened.
3 months ago I somehow managed to install macOS Tahoe beta 1 on an external drive, I don't remember how (but I don't think it was anything crazy); booting into that beta 1 partition and trying to update doesn't work either, as my MacBook again boots into my main macOS partition. I already asked help about the update problem one month ago here, but nobody replied.
Could someone at Apple please provide instructions on how one is supposed to install macOS 26 on an external drive (if possible before it becomes available to the public)? Are we supposed to buy a separate Mac for every macOS version that we want to test our apps on?
In my Catalyst app I use
func setupMailComposer() {
// Check if the device can send email
guard MFMailComposeViewController.canSendMail() else {
print("Mail services are not available")
showMailErrorAlert()
return
}
// Create and configure the mail composer
let mailComposeVC = MFMailComposeViewController()
mailComposeVC.mailComposeDelegate = self
// Set the email details
mailComposeVC.setToRecipients(["example@example.com"])
mailComposeVC.setSubject("Subject for your email")
mailComposeVC.setMessageBody("This is the body of the email.", isHTML: false)
// Attach a file (optional)
if let filePath = Bundle.main.path(forResource: "example", ofType: "pdf"),
let fileData = try? Data(contentsOf: URL(fileURLWithPath: filePath)) {
mailComposeVC.addAttachmentData(fileData, mimeType: "application/pdf", fileName: "example.pdf")
}
// Present the mail composer
self.present(mailComposeVC, animated: true, completion: nil)
}
Since I have updated to macOS 15.1 the canSendMail() function returns false although I have configured Apple Mail (like before in 15.0 where it worked flawlessly).
I have a home widget with buttons (new in iOS 17).
In order to prevent taking action if the user taps on the widget buttons accidentally, I want to ask the user for confirmation.
It appeared that requestConfirmation be exactly what I needed, but no confirmation view shows up when I invoke this method in the perform function.
I have tried the following:
try await requestConfirmation(result: .result(dialog: "Are you sure you want to do this?") {
Image(.mdlsWhite)
})
and this alternative:
let confirmed: Bool = try await $name.requestConfirmation(for: self.name,
dialog: IntentDialog(stringLiteral: msg))
Neither option work.
I am starting to think that the requestConfirmation is not to be used with Home Widgets.
Is there a better way to handle confirmations for buttons included in a Home Widget?
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
Hello everyone,
I’m experiencing a crash in my iOS application that’s occurring predominantly on devices running iOS 16.6.0. The crash seems to happen on the main thread during a UI operation, specifically within the UIKitCore framework.
Crash Log Summary
Thread 0 Crashed:
0 libsystem_kernel.dylib 0xca4 mach_msg2_trap + 8
1 libsystem_kernel.dylib 0x13b74 mach_msg2_internal + 80
2 libsystem_kernel.dylib 0x13e4c mach_msg_overwrite + 540
3 libsystem_kernel.dylib 0x11e8 mach_msg + 24
4 CoreFoundation 0x79024 __CFRunLoopServiceMachPort + 160
5 CoreFoundation 0x7a250 __CFRunLoopRun + 1208
6 CoreFoundation 0x7f3ec CFRunLoopRunSpecific + 612
7 GraphicsServices 0x135c GSEventRunModal + 164
8 UIKitCore 0x39cf58 -[UIApplication _run] + 888
9 UIKitCore 0x39cbbc UIApplicationMain + 340
10 MyApp 0x24050 main + 51 (AppDelegate.swift:51)
11 ??? 0x1d3594dec (Missing)
I’ve attached the full crash
crashlog.txt
and would appreciate any insights or recommendations on how to resolve this issue.
I'm working on adding MetricKit to our iPad application that we distribute internally via Enterprise distribution. I've set up the didReceive functions for both MXMetricPayload and MXDiagnosticPayload.
When I build onto a device via Xcode and use the Simulate MetricKit Payloads command, everything works as expected. The issue I'm having is when testing on a device via our enterprise distribution.
When I simulate a crash, I am receiving the MXDiagnosticPayload so that part is working correctly. However, I am never receiving a MXMetricPayload. I've been using the app and waiting up to 3 days in some tests and not receiving any payload over that time frame.
Some information I found suggested the issue might be MetricKit not working fully on enterprise apps but I haven't been able to find a definitive source on that question. Hoping someone here can guide me on that. Thanks!
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.
Hallo all,
I did a test integration of MetricKit into one of our apps...I'am on macOS Ventura 13.3.1 (a). The app is not distributed via the App Store.
I subscribed to the MXMetricManager and implemented the didReceiveDiagnosticPayloads function.
So far everything seems to work, when I use in Xcode: Debug -> Simulate MetricKit Payload I get a callback and the payload.
So I did some further testing. When I build the app debug version with a test crash and then run the Debug Version (without Xcode) and let it crash the next time I start the app I get a callback to didReceiveDiagnosticPayloads with all the information about the crash.
But I'am not able to get a hang report. I tested it by adding a sleep (60) and adding some intensive computation work on the main thread so that it is busy for several seconds, I get no hang reports :-(
I'am using the Debug version and run it without Xcode.
Are hang reports expected to be reported immediately? I also get after 24 hours no hang reports.
Can someone help me?
Thanks and have a nice day!
Hello! We're currently testing Live Caller ID implementation and noticed an issue with userIdentifier values in our database.
Initially, we expected to have approximately 100 records (one per user), but the database grew to about 10,000 evaluationKey entries. Upon investigation, we discovered that the userIdentifier (extracted from "User-Identifier" header) for the same device remains constant throughout a day but changes after a few days.
We store these evaluation keys using a composite key pattern "userIdentifier/configHash". All these entries have the same configHash but different userIdentifier values.
This behavior leads to unnecessary database growth as new entries are created for the same users with different userIdentifier values.
Could you please clarify:
Is this the expected behavior for userIdentifier to change over time?
If yes, is there a specific TTL (time-to-live) for userIdentifier?
If this is not intended, could this be a potential iOS bug?
This information would help us optimize our database storage and implement proper cleanup procedures.
Thank you for your assistance!
i thought it is impossible to have CallKit show system UI for outgoing calls. but then i saw this:
"For incoming and outgoing calls, CallKit displays the same interfaces as the Phone app..."
https://developer.apple.com/documentation/callkit
how do i present it though? or is this a documentation error?