In IOS17 and IOS18, core spotlight can only match app contents by searching for the displayName, but cannot hit the contents by using keywords. Moreover, when matching the app content by searching for the "displayName", it requires inputting four consecutive characters to achieve a match.These issues did not occur in iOS 16. What is the reason for this?
Here is my code.
func addItemToIndex(_ item: QSpotlightItem) {
let attributeSet = CSSearchableItemAttributeSet(contentType: .item)
attributeSet.title = item.title
attributeSet.displayName = item.title
attributeSet.contentDescription = item.contentDescription
attributeSet.keywords = item.keywords
attributeSet.thumbnailData = item.thumbnailImage
attributeSet.contactKeywords = item.keywords
attributeSet.supportsNavigation = true
let searchableItem = CSSearchableItem(uniqueIdentifier: item.id, domainIdentifier: "xxx", attributeSet: attributeSet)
searchableItem.expirationDate = .distantFuture
CSSearchableIndex.default().indexSearchableItems([searchableItem]) { error in
if let error = error {
} else {
}
}
}
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
PDFKit PDFPage.characterBounds(at: Int) is returning incorrect coordinates with iOS 18 beta 4 and later / Xcode 16 beta 4.
It worked fine in iOS 17 and earlier (after showing the same issue during the early iOS 17 beta cycle)
It breaks critical functionality that my app relies on.
I have filed feedback (FB14843671).
So far no changes in the latest betas. iOS release date is approaching fast!
Anybody having the same issue? Any workaround available?
Hello everyone.
I use Translation Framework in my application. During development everything was fine, Translation framework worked well, but after two or three days of using the production version (that was published in AppStore and available for others also!) - my application stopped working. Translation framework gives errors:
Error sending 1 paragraphs Error Domain=TranslationErrorDomain Code=16 "Translation failed" UserInfo={NSLocalizedDescription=Translation failed, NSLocalizedFailureReason=Offline models not available for language pair}
Failed to translate input 0; returning error: Error Domain=TranslationErrorDomain Code=16 "Translation failed" UserInfo={NSLocalizedDescription=Translation failed, NSLocalizedFailureReason=Offline models not available for language pair}
Received unbridged NSError to API, converting to .internalError: Error Domain=TranslationErrorDomain Code=16 "Translation failed" UserInfo={NSLocalizedDescription=Translation failed, NSLocalizedFailureReason=Offline models not available for language pair}
Once again - it worked when I developed it, it was released on the AppStore, and suddenly it stopped working!
I am trying to set up a message filter extension that will use shared web credentials for basic auth when calling to its ILMessageFilterExtensionNetworkURL.
I have associated domains set up for both "messagefilter:" and "webcredentials:" and the message filter IS correctly calling the ILMessageFilterExtensionNetworkURL with each message - so that part is working.
As detailed here, I have set up Shared Web Credentials and my view controller is using SecAddSharedWebCredential() to save the creds to the correct domain. Using Authorization services, the creds are auto-filled into my app's login screen. When I go under Settings > Passwords, I see the creds are saved and they are the correct creds to the corrent website that matches ILMessageFilterExtensionNetworkURL.
Regardless of all of this, the deferQueryRequestToNetwork() refuses to use the creds and implement Basic Auth in its URL call. It makes the call to the correct URL, it just won't use the Shared Web Creds for basic auth.
Any help would be greatly appreciated.
Topic:
App & System Services
SubTopic:
General
Tags:
Extensions
Messages
SMS and Call Reporting
Authentication Services
I created in my Objective-c project the AgeRange check for a special function.
It is working well on an iPhone. Now I used my Mac and added my app to the TestFlight on my macOS Tahoe 26.1
Here it is directly crashing. But how can I debug an Application which is created for iPhone and iPad with Xcode? I cannot use the target myMac when running a debugging mode. So how is the debugging working for such Apps?
We first discovered this issue in our own product, but we were able to reproduce it even when using Apple’s official demo:
https://developer.apple.com/documentation/alarmkit/scheduling-an-alarm-with-alarmkit
Reproduction Steps:
Set an alarm on iOS 26.1 using AlarmKit.
Upgrade the device to iOS 26.2 beta 3 or later.
The alarm will no longer ring.
Based on our testing, versions prior to 26.2 beta 2 do not exhibit this issue, so it appears that something introduced in beta 3 has caused the regression.
The results are as follows:
iOS 26.1 → iOS 26.2 beta 2 or earlier: Alarms ring normally
iOS 26.1 / iOS 26.2 beta 2 → iOS 26.2 beta 3 / iOS 26.2 RC: Alarms fail to ring
iOS 26.2 beta 3 → iOS 26.2 RC: Alarms ring normally
This issue is critical. Users currently on iOS 26.1 may experience alarms failing to ring after updating their system, which can cause real-life disruptions (e.g., being late for work). We strongly recommend addressing this as soon as possible.
Xcode Version: Version 26.1.1 (17B100)
Feedback ID: FB21273655
Topic:
App & System Services
SubTopic:
General
As discussed and acknowledged here, there is a known bug with the FamilyActivityPicker. When a user expands a category that contains enough tokens to exceed the 50mb memory limit, the FamilyActivityPicker crashes.
This happens quite frequently for heavy Safari users. An apple engineer mentioned on this thread that WebDomains shown in the picker are present based on the last 30 days of usage data as surfaced by WebKit.
Is there any way a user can clear these WebDomains? Either programatically through our app or any other process we can guide them to as a workaround while this issue is getting fixed?
Topic:
App & System Services
SubTopic:
General
Tags:
WebKit
Family Controls
Device Activity
Screen Time
When we use the App Clip link to jump on an iOS17 device, the first click will not respond, and the App Clip pop-up window will not pop up until the second click. Proceed as follows:
After the iPhone clicks the link for the first time, or clicks the ‘Clear Experience Cache’ button in setting-->Developer-->App Clips Testing
On the Notes App on iPhone, click the link https://appclip.apple.com/id?p=com.example.naturelab.backyardbirds.Clip
There is no response when clicking the link for the first time, and the window will not pop up until the second click. Is this an iPhone problem? Looking forward to your reply
I'm running into a contradictory requirement involving the DeviceActivity Report extension (com.apple.deviceactivityui.report-extension) that makes it impossible to both:
upload the app to App Store Connect, and
install the app on a physical device.
This creates a complete catch-22.
📌 Overview
My extension:
Path: Runner.app/PlugIns/LoADeviceActivityReport.appex
Extension point: com.apple.deviceactivityui.report-extension
Implementation (SwiftUI):
import SwiftUI
import DeviceActivity
@main
struct LoADeviceActivityReport: DeviceActivityReportExtension {
var body: some DeviceActivityReportScene {
// ...
}
}
This is the standard SwiftUI @main DeviceActivityReportExtension template.
🟥 Side A — iOS runtime behavior (device installer)
If I add either of these keys to the extension's Info.plist:
NSExtensionPrincipalClass
NSExtensionMainStoryboard
then the app cannot be installed on a real iPhone/iPad.
The device installer fails with:
Error 3002
AppexBundleContainsClassOrStoryboard
NSExtensionPrincipalClass and NSExtensionMainStoryboard are not allowed
for extension point com.apple.deviceactivityui.report-extension.
To make the app install and run, I must remove both keys completely.
This leaves the extension Info.plist like:
NSExtension
NSExtensionPointIdentifier
com.apple.deviceactivityui.report-extension
With this, the app installs and runs correctly.
🟥 Side B — App Store Connect upload validator
However, when I upload the IPA with the runtime-correct Info.plist, App Store Connect rejects it:
State: STATE_ERROR.VALIDATION_ERROR (HTTP 409)
Missing Info.plist values.
No values for NSExtensionMainStoryboard or NSExtensionPrincipalClass found in
extension Info.plist for Runner.app/PlugIns/LoADeviceActivityReport.appex.
So ASC requires that at least one of those keys be present.
💥 The catch-22
If I add PrincipalClass / MainStoryboard:
✔ App Store Connect validation passes
❌ But the app can NOT be installed on any device (Error 3002)
If I remove PrincipalClass / MainStoryboard:
✔ The app installs and runs correctly
❌ ASC rejects the upload with “Missing Info.plist values”
There is currently NO Info.plist configuration that satisfies both:
Runtime:
"NSExtensionPrincipalClass and NSExtensionMainStoryboard are not allowed."
App Store Connect:
"You must include NSExtensionPrincipalClass or NSExtensionMainStoryboard."
📌 Expected behavior
For SwiftUI @main DeviceActivityReportExtension, the documentation and examples suggest the correct configuration is:
NSExtensionPointIdentifier
com.apple.deviceactivityui.report-extension
with no principal class or storyboard at all.
If that is correct for runtime, ASC seems to need updated validation rules for this extension type.
❓My Questions
What is the officially correct Info.plist configuration for a SwiftUI DeviceActivityReportExtension?
Should principal class / storyboard not be required for this extension type?
Is this a known issue with App Store Connect validation?
Is there currently a workaround that allows:
installation on device and
successful App Store Connect upload,
without violating runtime restrictions?
Hello, I have an AppClip technical issue I'd like to ask about:
Our Xiaohongshu App (Version 9.14 & Build 9140845 & appid 741292507) was submitted to the App Store for review on December 18th and approved on December 19th, starting a phased rollout.
This version was the first to support AppClip functionality, and as of today the app has been fully rolled out, but I still cannot activate the Xiaohongshu App Clip Card using the NFC tag (built-in URL: https://xhslink.com/n/22UG9jlaOfv?sourceid=911).
I checked all the configurations of our project's AppClip target (Associated Domains:appclips:xhslink.com), the default experience in the ASC backend (URL: https://appclip.apple.com/id?p=com.xingin.discover.Clip), and the advanced experience (URL: https://xhslink.com/n/Arxpo4IVY9X), and all showed no abnormalities.
Furthermore, the default experience URL, after being written with an NFC tag, can be successfully launched by tapping the NFC tag to open the Xiaohongshu App Clip Card, and the Card can also be opened normally in Safari on the phone.
However, our advanced experience URL, after being written with an NFC tag, cannot be launched by tapping the Card.
Therefore, my question is: Who please can help me check why the Xiaohongshu App Clip Card cannot be launched normally using the advanced experience URL? Thank you very much!
My Expectations: My advanced experience URL configured on the ASC platform, such as https://xhslink.com/n/Arxpo4IVY9X, should be recognized and validated by the iOS system when the phone is near the NFC tag and reads https://xhslink.com/n/22UG9jlaOfv?sourceid=911, ultimately triggering the App Clip Card configured in Xiaohongshu's advanced experience settings.
Additionally: We have already deployed a large number of NFC tags and other materials in many online stores, and the URL (https://xhslink.com/n/Arxpo4IVY9X) is built-in, and our 9.14 version is fully implemented. However, the newly developed App Clip feature is not working, which is very urgent and I hope Apple can help me find the cause of the problem and how to improve it as soon as possible. Thank you very much!
How to programmatically check if ApplicationToken or ActivityCategoryToken is expired in FamilyActivityPicker?
I'm building a Screen Time-based parental control app using FamilyControls and ManagedSettings. We use FamilyActivityPicker to allow the user to select apps and categories to restrict, and we apply the shield using:
store.shield.applications = .specific(selection.applicationTokens)
store.shield.applicationCategories = .specific(selection.categoryTokens)
Sometimes, we observe that the shield silently fails to apply — no error is thrown, but the restrictions aren't enforced. I suspect this may be due to expired or invalid tokens, possibly if the app was removed or the selection became stale.
My Questions:
Can ApplicationToken or ActivityCategoryToken expire or become invalid over time?
If yes, is there a supported or recommended way to detect whether a token is still valid before applying it to the shield?
Is comparing the current shield values (store.shield.applications and store.shield.applicationCategories) after applying them a reliable validation method?
What's the best practice to handle expired tokens (e.g. re-prompt the FamilyActivityPicker, or show a fallback)?
What Is the Expiration Duration of Tokens from FamilyActivityPicker?
Any guidance or insight from the Screen Time/FamilyControls team would be greatly appreciated!
Thank you!
Hi All, I’m puzzled by this issue: my app uses WeatherKit to fetch hourly UV-index and temperature forecasts. The same build, running on the latest iOS, succeeds on most devices but consistently fails on a few. Strangely, the paired Apple Watch version retrieves the data without problems. Could WeatherKit be applying per-user throttling? Any insight would be greatly appreciated.
We have an application which is written in Swift, which activates Transparent Proxy network extension. We are using Jamf MDM profile for deployment.
To avoid the user deleting / disabling the extension from General -> LogIn Items & Extension -> Network Extensions screen, we are using "Non-removable system extensions from UI" attribute under Allowed System Extensions and Teams IDs section.
In new Mac OS 26 (Tahoe), user can also enable/disable the extension from General -> LogIn Items & Extension -> Apps tab. The "Non-removable system extensions from UI" attribute set in Jamf MDM profile does not apply to this tab.
Same attribute is working for General -> LogIn Items & Extension -> Extensions tab and there the slider is greyed out and Remove option is not available under more menu.
Is there any new key/configuration defined to disable the slider from General -> LogIn Items & Extension -> Apps tab?
Created https://feedbackassistant.apple.com/feedback/18198031 - FB18198031 feedback assistant ticket as well.
Topic:
App & System Services
SubTopic:
General
Tags:
Network Extension
System Extensions
Device Management
I'd like to set my macOS app written in Swift as default app when opening .mp4 file.
I think I can do it with setDefaultApplication(at:toOpen:completion:).
https://developer.apple.com/documentation/appkit/nsworkspace/3753002-setdefaultapplication
However, permission error occurs when I use it.
The error is:
Error Domain=NSCocoaErrorDomain Code=256 "The file couldn’t be opened." UserInfo={NSUnderlyingError=0x6000031d0150 {Error Domain=NSOSStatusErrorDomain Code=-54 "permErr: permissions error (on file open)"}}
I tried to give my app full-disk access, but it didn't work.
I also tried to use setDefaultApplication(at:toOpenFileAt:completion:), then it works with no error, but it effects on only one file.
What I want to do is to set my app as default app of all .mp4 files.
How do I achieve this?
My code is like below:
let bundleUrl = Bundle.main.bundleURL
NSWorkspace.shared.setDefaultApplication(at: bundleUrl, toOpen: .mpeg4Movie) { error in
print(error)
}
Thank you.
Hi everyone.
I've downloaded the the 26.2 beta 2 and installed it on a device in the settings after i create a new sandbox test account i see the options in Age Assurance.
The problem is i got the popup the first time i opened the application and decided to share, but after that i always get the following error:
DeclaredAgeRange.AgeRangeService.Error.notAvailable
I tried testing with different bundle id and different sandbox test account but still it doesn't work.
How can i test the cases without erasing the device ?
Hi. The WWDC video of the v2 weatherkit api showed some examples for the REST API. However, they were very limited.
The documentation for the REST API is currently for the v1 weatherkit API. When will the documentation for the v2 API be released? There are some new features of the v2 that I would really like to use, but I can't without knowing the new v2 REST API specifications.
Any guidance would be much appreciated. Thanks!
Hello,
I'm currently experiencing an issue with the DeviceActivityMonitor extension in my code, specifically with the eventDidReachThreshold callback. I'm hoping to get some insights into why this problem occurs and how to resolve it.
Problem:
Issue 1: The eventDidReachThreshold callback is not triggering as expected. It appears that the callback is not being invoked when the threshold is reached.
Issue 2: After a few seconds, the eventDidReachThreshold callback starts to trigger multiple times. This unexpected behavior is causing problems in my code, as it results in incorrect actions being taken.
iOS version: iOS16.7.2 and iOS17.1
Xcode version: 15.0.1
Swift version: 5.9
Here is my code to start the monitoring:
func startMonitoring() {
var startTime : DateComponents = DateComponents(hour: 0, minute: 0)
let endTime : DateComponents = DateComponents(hour: 23, minute: 59)
/// Creates the schedule for the activity, specifying the start and end times, and setting it to repeat.
let schedule = DeviceActivitySchedule(intervalStart: startTime, intervalEnd: endTime, repeats: true, warningTime: nil)
/// Defines the event that should trigger the encouragement.
let event = DeviceActivityEvent(applications: socialActivitySelection.applicationTokens, categories: socialActivitySelection.categoryTokens, webDomains: socialActivitySelection.webDomainTokens, threshold: DateComponents(minute: 2))
let events: [DeviceActivityEvent.Name: DeviceActivityEvent] = [.socialScreenTimeEvent : event]
do {
activityCenter.stopMonitoring([.socialScreenTime])
/// Tries to start monitoring the activity using the specified schedule and events.
try activityCenter.startMonitoring(.socialScreenTime, during: schedule, events: events)
} catch {
/// Prints an error message if the activity could not be started.
print("Could not start monitoring: \(error)")
}
}
If there are any known workarounds or potential solutions, please share them.
Thank you for your help in resolving this problem.
Is this intended behavior? I want my app to act like the regular Clock app and snooze alarms when user taps volume down button but apparently volume down button stops the alarm. Is this normal or am I missing something?
Topic:
App & System Services
SubTopic:
General
As stated in other posts like:
https://developer.apple.com/forums/thread/734488
https://developer.apple.com/forums/thread/652946?answerId=823555022#823555022
Even though the recommended way from Apple documentation is to use push notifications to reload widgets timelines calling WidgetCenter.shared.reloadAllTimelines(), it is unreliable and I couldn't find a pattern of why it works 10% of times and not the other 90%.
While the debugger is connected to the App it always works though.
My widget needs to reflect updated information otherwise it becomes useless since it display smart home devices states such as the Apple Home widget does as well.
Hello,
I’m encountering an issue with Universal Links in my iOS app. After some investigation, I found that the root cause seems to be that Apple’s request through there CDN server to access the .well-known/apple-app-site-association file is blocked by our firewall, which enforces geographic access restrictions as part of our security policy.
Because of this restriction, Apple’s validation or link verification requests are being denied, and the Universal Links are not working as expected.
I’d like to get some guidance from the community or Apple engineers on the following:
1. Does Apple provide an official list of IP ranges or domains that need to be allowed through the firewall for Universal Link validation?
2. Are there alternative methods to handle Universal Link verification in environments with geographic restrictions?
3. Would whitelisting specific Apple services or endpoints be a recommended or safe solution?
Any input or recommendations would be greatly appreciated.
Environment Details:
• iOS app using Universal Links
• Server protected by a firewall with regional restrictions
• AASA file hosted correctly and accessible via browser
Thanks in advance for your help and insights.