Hi Team,
We’re encountering a device-specific issue with our SMS Message Filter extension. The extension works as expected on an iPhone 11 running iOS 16.6, but it does not trigger on an iPhone 12 Pro running iOS 16.7.
Key Observations:
The extension is implemented using ILMessageFilterExtension and calls messageFilterOffline(appGroupIdentifier:for:) from our shared library.
The App Group is properly configured and accessible across the app and extension.
The extension is enabled under Settings > Messages > Unknown & Spam.
There are no crashes or error logs reported on the affected device.
The issue is consistently reproducible — it works on one device but not the other.
We’re wondering if this could be a regression or a device-specific behavior change introduced in iOS 16.7.
Has anyone encountered similar inconsistencies in Message Filter extensions across different iOS versions or device models?
Any guidance or suggestions would be greatly appreciated.
Thanks in advance!
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 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?
Hi , how I can run my shortcut by tapping on button from widget?
Has anyone encountered a situation like mine below? I’ve submitted feedback, but it seems like I’ll have to wait for a while.
ContactProviderManager Fails with Custom domainIdentifier, Works Only with "defaultDomain"
Category: Developer Tools / Frameworks
Subcategory: ContactProvider Framework
Reproducibility: Always
iOS Version: iOS 18.0 (and later)
Xcode Version: Xcode 16.0 (or later)
Description:
When initializing a ContactProviderManager with a custom ContactProviderDomain using any identifier other than "defaultDomain", the initializer throws a ContactProviderError.domainNotRegistered error. The documentation for ContactProviderDomain (https://developer.apple.com/documentation/contactprovider/contactproviderdomain) does not provide any method to register custom identifiers, making it impossible to use ContactProviderManager with a desired custom identifier. The only successful case is when the identifier is "defaultDomain". print("Error: (error)") // No error, initialization succeeds
Steps to Reproduce:
Create a Contact Provider Extension in an iOS app targeting iOS 18.0.
In host app, Attempt to initialize a ContactProviderManager with a custom ContactProviderDomain identifier:
import ContactProvider
func enableExtensionExample() async {
do {
// The app creates a contact provider manager with custom domain.
let manager = try ContactProviderManager(domainIdentifier: "com.mycompany.customdomain")
// May prompt the person to enable the custom domain.
try await manager.enable()
} catch {
print("Error: \(error)") // Prints ContactProviderError.domainNotRegistered
}
}
Try the same with the default identifier:
import ContactProvider
func enableExtensionExample() async {
do {
// The app creates a contact provider manager with a default domain.
let manager = try ContactProviderManager(domainIdentifier: "defaultDomain")
// May prompt the person to enable the default domain.
try await manager.enable()
} catch {
print("Error: \(error)") // No error, initialization succeeds
}
}
Build and run the app on a device or simulator running iOS 18.0 or later.
Observe that the initializer fails with domainNotRegistered for any identifier other than "defaultDomain".
Expected Behavior:
The ContactProviderManager should initialize successfully with any valid ContactProviderDomain identifier, provided the domain is properly configured or registered, allowing developers to use custom identifiers for organizing contacts (e.g., for different categories or sources).
Actual Behavior:
The ContactProviderManager initializer throws ContactProviderError.domainNotRegistered for any ContactProviderDomain identifier other than "defaultDomain". Only the "defaultDomain" identifier succeeds, limiting the ability to use custom domains.
Impact:
Developers cannot use custom identifiers to categorize or manage contacts in separate domains, restricting the ContactProvider framework’s flexibility. This forces reliance on the "defaultDomain" identifier, which may not suit use cases requiring distinct contact groups (e.g., personal vs. business contacts).
Suggested Fix:
Provide an API to register custom ContactProviderDomain identifiers, such as a ContactProviderManager.register(domain:) method. Update the ContactProviderDomain and ContactProviderManager documentation to clarify how to use custom identifiers or explicitly state if only "defaultDomain" is supported. If custom identifiers are not intended to be supported, document this limitation clearly to avoid developer confusion.
Feedback :
FB20104001 (ContactProviderManager Fails with Custom domainIdentifier, Works Only with "defaultDomain")
we’re looking to get some clarification around how the hourly forecasts should be interpreted to ensure we’re using your data in the correct manner. If you could provide the answers to the following questions would be extremely helpful:
1. What do the data points (e.g temperature) in the hourly forecast represent for a future hour? Do they represent the expected average over that future hour or do they represent the forecast for the point in time at the top of the hour?
2. What do those same data points represent in the hourly forecast for an hour which has already begun? e.g. it’s 8:30 and we pull the hourly forecast and the 8:00 hour is still returned. Which of the following would be the correct interpretation for the values returned for the 8:00 hour:
The values represent the forecast for the point in time at the top of the 8:00 hour (if this is the case we would expect it to stop updating)
The values represent the current forecast i.e. what the weather is right now
The values represent the average over the remaining portion of the 8:00 hour
The values represent the average over the full 8:00 hour including both the portion which has already elapsed and the portion which is still to come
3. What does the data represent after the hour (i.e. looking at historical hours)? Is it:
The last forecast made within the hour? If so, is that point-in-time or average for the hour (as explained above)?
The actual weather for that hour (using some non-forecast measure of real weather)? If so, again is that point-in-time at top of hour / point-in-time at end of hour / average over the hour?
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.
We are planning to use our internal IdP (PingFederate) for authentication of end users in their iOS apps using ASWebAuthenticationSession. Initial tests are successful, but the user is prompted for every login (and logouts) with a consent dialogue box:
“AppName” wants to use “internal domain-name” to Sign In
This allows the app and website to share information about you.
Cancel Continue”
Let’s say that our top-level domain is “company.no”, where our IdP is placed at “idp.company.com”. I have seen examples where the Associated domains entitlement points to the idp as a webserver for serving the JSON output AASA file. In this case that would be:
authsrv: idp.company.com
Anyone with experience implementing this structure with the IdP as webserver for serving the JSON output?
Our problem is that trying to use the IdP as webserver for this purpose is that it is very complicated to modify the IdP’s webserver configuration. Also, this modification needs to be re-done every time we need to upgrade the IdP.
My question is therefore also related to the options of which webserver to install the AASA file on. Has anyone installed the file on a generic webserver on the toplevel domain like
“webserver.company.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!
The errors below pop up when I validate or distribute the mobile app; this error happens with the upgraded Xcode version. I have Xcode 16.2, and the minimum target deployment is 14.0. Please help me to resolve these errors. build was successful, I can launch my application from the simulator
Validation failed
Invalid Bundle. The bundle .app/Frameworks/hermes.framework does not support the minimum OS Version specified in the Info.plist. (ID: ee79350d-249e-4101-89fe-e41b2620f4d6)
Validation failed
Missing Info.plist value. A value for the key 'MinimumOSVersion' in bundle .app/Frameworks/hermes.framework is required. (ID: b0f58cd5-2c72-437b-98c9-1b2b4122c203)
Validation failed
Invalid MinimumOSVersion. Apps that only support 64-bit devices must specify a deployment target of 8.0 or later. MinimumOSVersion in ‘.app/Frameworks/hermes.framework' is ''. (ID: c2a6247f-21d6-438f-b52f-572425b7aa65)
Topic:
App & System Services
SubTopic:
General
We have received some information that with the release of iOS 18, there have been notable changes in how this API behaves, can apple team shed some light on this? on ios 17 this worked without much issues, what has changed on ios 18?
An error was reported when requesting permissions on devices with iOS 16.2 16.3. It is not an emulator.
Through the log records, the following Error message appears
Error Domain=FamilyControls.FamilyControlsError Code=3 "(null)"
Error Domain=FamilyControls.FamilyControlsError Code=4 "(null)"
Error Domain=FamilyControls.FamilyControlsError Code=5 "(null)"
func requestScreenTime() async -> Bool {
do {
try await AuthorizationCenter.shared.requestAuthorization(for: .individual)
return AuthorizationCenter.shared.authorizationStatus == .approved
} catch {
print("\(error)")
return false
}
}
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.
I'm trying to use ScreenCaptureKit on a Mac Catalyst app, on macOS 12.5.1.
I'm not sure if I'm doing something wrong, but it crashes as soon as I try to request SCShareableContent. It crashes on internal code, calling a method it can't find, which makes me think this is a bug in the framework rather than incorrect configuration.
Any hints on how to work around this problem?
The crash is:
** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[RPDaemonProxy fetchShareableContentWithOption:windowID:withCompletionHandler:]: unrecognized selector sent to instance 0x6000037d5dc0'
terminating with uncaught exception of type NSException
ScreenCaptureKit-Crash.txt
Topic:
App & System Services
SubTopic:
General
Tags:
Mac Catalyst
ReplayKit
ScreenCaptureKit
wwdc2022-10155
After updating from iOS 18 to iOS 26, our app icon appears to have automatically received the new 'Liquid Glass' effect. We confirmed that this change occurred without us releasing a new app update.
My questions are:
Is this a system behavior where iOS 26 automatically applies the new icon style to existing apps?
If so, is it possible for a developer to control or customize this effect? I am also wondering if there are any methods other than using Icon Composer.
We developed a "Default Translation App" following the guide: https://developer.apple.com/documentation/translationuiprovider/preparing-your-app-to-be-the-default-translation-app.
I have already configured everything that needs to be configured according to the document, but there is still this problem
Topic:
App & System Services
SubTopic:
General
Hi all — I’m building a Wallet-style transaction details view using FinanceKit and I’m running into a gap around merchant location.
What I’m seeing
FinanceKit gives me great core fields (amount, currency, status, dates, MCC, merchantName, transactionDescription), but I’m not seeing any address or place/location metadata on a Transaction.
For example, a small/local merchant where I can plausibly infer a single place:
Fetched transaction:
Transaction(
id: 8D142B16-3E0E-40B8-945A-2E7C0CF65F1D,
accountID: 14939CF4-DBC3-4A9D-8292-5FEA495B8461,
transactionAmount: 47.24 USD,
creditDebitIndicator: .debit,
transactionDescription: "Local Dental Care",
originalTransactionDescription: "Local Dental Care",
merchantCategoryCode: 8021,
merchantName: "Local Dental Care",
transactionType: .pointOfSale,
status: .booked,
transactionDate: 2025-08-20 22:27:50 +0000,
postedDate: 2025-08-21 11:22:06 +0000
)
Because this appears to be a single-location practice, I can usually resolve it to a place using MapKit search heuristics.
But for big-box chains, I don’t get enough signal to determine which store:
Fetched transaction:
Transaction(
id: 3F8E9F74-7565-4D24-9038-8FD709184799,
accountID: 14939CF4-DBC3-4A9D-8292-5FEA495B8461,
transactionAmount: 441.77 USD,
creditDebitIndicator: .debit,
transactionDescription: "The Home Depot",
originalTransactionDescription: "The Home Depot",
merchantCategoryCode: 5200,
merchantName: "The Home Depot",
transactionType: .pointOfSale,
status: .booked,
transactionDate: 2023-12-27 23:07:02 +0000,
postedDate: 2023-12-29 03:09:41 +0000
)
There’s no store number, address, phone, or any stable identifier. With hundreds of locations, I can’t deterministically choose a map pin or fetch the right brand assets.
What I’m trying to achieve
I’d like to replicate the Apple Wallet experience: show a small map snapshot and merchant visuals (logo/name that match Apple Maps / the Place Card) on the transaction detail screen. Without a location hint, I have to either:
Ask users to pick a store manually, or
Make a guess based on a coarse, app-defined region
…neither of which feels great.
Questions
Is there any way in FinanceKit today to access merchant location or a resolvable identifier (e.g., address, city/state, store number, Apple Maps place identifier, network merchant ID/MID, terminal ID, etc.)?
If not, can FinanceKit expose additional merchant metadata (even opt-in / privacy-preserving) to enable Wallet-like enrichment? A few examples that would unblock this:
merchantAddress (or components: street/city/region/postalCode/country)
merchantPhone (often unique per store)
merchantIdentifier (stable per physical location, e.g., network merchant ID / store number)
mapsPlaceURL or mapsPlaceIdentifier (linkage to the Apple Maps Place Card)
brandAssetURL (logo/brand reference similar to what Wallet shows)
With even one of the above, I could reliably:
Render an accurate map snapshot,
Fetch the correct brand assets, and
Avoid prompting the user or inferring via fuzzy search.
Context / constraints
I do not want to (and shouldn’t need to) request or monitor the user’s device location to resolve a merchant’s store location.
For small merchants, MapKit text search is often enough. For large chains, I need a store-level identifier.
If there’s an existing field or recommended approach I’m missing, I’d love pointers. If not, please consider this a feature request for richer merchant metadata in FinanceKit so developers can build Wallet-quality transaction details.
Thanks!
Topic:
App & System Services
SubTopic:
General
I have an app I want to get on the App Store but when I was putting in the build version slot, I accidentally deleted it by clicking backspace and tried everything to get it working again but I can't. Is there anyway for me to retrieve the slot so it works?
Topic:
App & System Services
SubTopic:
General
If I have, say a doctor appointment in the Calendar app, and I'm leaving to go to it, the address will appear in Apple Maps on CarPlay. Forgive if I'm getting the details wrong, but I believe if I bring up the Map, it will be available to tap on, so I can quickly go there. I think it may also show up on one on the car-play screens that shows a few different panels.
The point is, I really like this feature, and want to do it in my app.
In my iOS app, the user can order food from a restaurant, and pick it up. I'm not ready to make this app a "quick service" app, but I want to give the user an easy to get to her location. Since I just ordered food, this means that I'll need to leave fairly quickly to go to the location. The Calendar app is able to offer a location because of scheduling, I'd like to do the same.
I've been reading this question: https://developer.apple.com/forums/thread/701945 and watching the videos on background tasks
But can't arrive to a concrete solution.
Q1: Are there any tips (or sample app) on how to handle a launch in background in a streamlined way? How to have a shared code that is ran for both 'launch in background' & 'launch in foreground'?
Specifically the case I'm talking about is:
You set up some observance of some OS callback at a Foo screen of your app. Example app should request and then send push-to-start live activity tokens to server. Or setup location tracking.
App is then suspended and then later terminated but is eligible for relaunch
App is then launched in background because it has requested a push-to-start live activity token or an update for location tracking.
User DOES NOT go back to screen Foo.
So at this point app is no longer tracking / listening to updates for token update or location changes.
How should I architecture my code for this? I'm trying to see if there's a an approach where I can avoid having multiple places in code where I do the same thing. Currently what I'm doing is as such:
Q2: Is it then correct to say that anytime you've launched your app, whether it's in foreground or background then you must immediately match 'all observations done by the previous app launch'?
Like store items in UserDefaults and upon launch retrieve them and do:
handleGeneralAppLaunchFlow()
// ALSO
if defaults.contains("didLastLaunchSetupLiveActivtiyTokenObservance") {
for await ptsToken in Activity<EmojiRangers> .pushToStartTokenUpdates {
...
}
}
if defaults.contains("didLastLaunchSetupLocationTracking") {
locationManager = CLLocationManager()
locationManager?.delegate = itsDelegate
locationManager?.allowsBackgroundLocationUpdates = true
locationManager?.showsBackgroundLocationIndicator = true
locationManager?.startUpdatingLocation()
}
// Other checks for prior observance setup
Q3: Actually I think even if app is launched in foreground then because you may not end up at screen Foo again, then you must setup things regardless of app state and just based on prior observations set. Right?
Q4: And then later if the user ever made it again to screen Foo, then we just skip the re-do of the observance, or maybe to just keep things simple, we'd just redo without over-engineering things?
I tried to mark my questions with Q1- Q4.
I’m testing FinanceKit with Apple Cash and noticed that transfers don’t include any counterparty information.
Here’s an example transaction I fetched:
Transaction(
id: 5A96EA49-B7C9-4481-949D-88247210C1D7,
accountID: 28D7C0E2-DC2A-4138-B105-BCE5EE00B705,
transactionAmount: 30 USD,
creditDebitIndicator: .credit,
transactionDescription: "Transfer",
originalTransactionDescription: "",
merchantCategoryCode: nil,
merchantName: nil,
transactionType: .transfer,
status: .booked,
transactionDate: 2025-08-19 21:57:54 +0000,
postedDate: 2025-08-19 21:57:55 +0000
)
As you can see:
transactionDescription is just "Transfer"
originalTransactionDescription is empty
merchantName is nil
No counterparty details are exposed
In contrast, the Wallet app clearly shows the other person’s name and avatar for Apple Cash transfers, making it easy to understand who the payment was with. In FinanceKit, there’s no way to distinguish between transfers with different people — every transfer looks identical.
Questions
Is there a hidden or planned field for Apple Cash counterparty information?
Can FinanceKit provide at least minimal metadata (e.g., contact name, initials, or a privacy-preserving identifier)?
Is there any workaround today to correlate Apple Cash transfers with contacts?
Feature request: Please expose counterparty information for Apple Cash transfers. Even something as simple as a stable identifier or name string would enable developers to build Wallet-quality transaction detail screens.
Thanks!
Topic:
App & System Services
SubTopic:
General