I found currently there is no way to revoke sharing age to an app after I shared to it, no matter in testing or in app settings
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
Created
I've tried pass different value like 13,16,18, but I don't see any difference..? could anyone tell what could happen differently if I pass a different value here?
Hello Apple Developer Community,
I'm working on implementing App Clips for a restaurant platform and need guidance on configuring custom App Clip experiences using URL redirects.
Context:
We have multiple restaurant locations, each needing branded App Clip cards (custom image, title, subtitle). With hundreds of tables across many venues, creating individual App Clip experiences for each table in App Store Connect isn't scalable.
Currently:
Using a single, generic App Clip experience for all locations => https://example.com
Desired Flow:
Customer scans QR code at restaurant table
↓
https://example.com/123
↓
iOS fetches URL
↓
Server responds with 302 redirect
↓
https://example.com/brands/le-pain-quotidien?venue=abc123
↓
iOS displays App Clip card with "Le Pain Quotidien" branding
↓
User taps "Open" → App Clip launches with correct context
What I've Tried:
Configured multiple App Clip experiences in App Store Connect
Implemented 302 redirects from short URLs to branded URLs
Tested various redirect configurations without success
Questions:
Does iOS fetch and follow redirects before displaying the App Clip card, or does it only use the originally scanned URL?
What App Clip experience URLs should be configured in App Store Connect for this redirect scenario?
Are there specific HTTP headers or redirect requirements for iOS to properly recognize the final destination?
Should the App Clip experience be registered for example.com/123 or example.com/brands/le-pain-quotidien?
Reference:
Apple's documentation suggests this is possible:
https://developer.apple.com/documentation/AppClip/configuring-the-launch-experience-of-your-app-clip#Use-short-URLs-or-redirects
Has anyone successfully implemented custom App Clip cards using URL redirects? Any guidance on the correct configuration approach would be greatly appreciated.
Thank you!
My app is configured with the App Clip experiences, and a Clip App card pops up when an NFC tag is scanned—whether the host app is not launched, running in the background, or active in the foreground. I want to prevent the App Clip card from popping up when the host app is in the foreground; how can this be achieved?
Hello, We are using a Message Filter Extension (ILMessageFilterExtension) to classify SMS/iMessage content (junk vs allow) in our app. After testing on iOS 26.1, we want to confirm whether there are any behavioral, performance, or API-level changes that impact message filtering, such as: Changes in how often the filter extension is invoked Differences in classification accuracy or system overrides New privacy, entitlement, or permission-related restrictions Execution time limits or memory constraints Any changes specific to iMessage vs SMS filtering We did not find any explicit mention of Message Filter Extensions in the iOS 26.1 release notes and would like to confirm whether the existing behavior from previous iOS versions remains unchanged. Has Apple introduced any known or undocumented changes in iOS 26.1 that developers should be aware of when supporting Message Filter Extensions? Sometime I also found unpredictable behaviour on iOS version 18.5 or below, like sometime it works but sometimes starts working.
Thanks in advance for any guidance.
How should i write and not show this sensitive error?
Topic:
App & System Services
SubTopic:
General
Hey there, I’m wondering if there is a CRUD API for Apple Notes?
I just saw once that it’s possible through a Apple Script on Mac. But the problem for me is that the app should also run on iOS.
Does someone have an idea how to approach this?
In a class, I call the following (edited to simplify, but it matches the real case).
If I do this:
func getData() -> someClass? {
_ = someURL.startAccessingSecurityScopedResource()
if let data = NSData(contentsOf: someURL as URL) {
do {
let unarchiver = try NSKeyedUnarchiver(forReadingFrom: data as Data)
print((unarchiver.decodeObject(of: [NSArray.self, someClass.self /* and few others*/], forKey: oneKey) as? someClass)?.aProperty)
if let result = unarchiver.decodeObject(of: [NSArray.self, someClass.self /* same other types*/], forKey: oneKey) as? someClass {
unarchiver.finishDecoding()
print("unarchived success")
return result
} else {
unarchiver.finishDecoding()
print("unarchiving failed")
return someClass()
}
}
catch {
return nil
}
}
I get a failure on log : unarchiving failed
But if I comment out the print(unarchiver.decodeObject) - line 8, it works and I get unarchived success
// print((unarchiver.decodeObject(of: [NSArray.self, someClass.self /* and few others*/], forKey: oneKey) as? someClass)?.aProperty)
However, when I do exactly the same for another class (I've compared line by line to be sure), it works even with the print statement.
What could be happening here ?
Dear Apple Engineers,
I am using NFCNDEFReaderSession to read information from NFC tags. When calling the begin method of the session, a system dialog/popover appears at the bottom of the screen. Is it possible to suppress or disable this dialog?
Thank you for your assistance.
Here is my demo code:
@IBAction func beginScanning(_ sender: Any) {
guard NFCNDEFReaderSession.readingAvailable else {
let alertController = UIAlertController(
title: "Scanning Not Supported",
message: "This device doesn't support tag scanning.",
preferredStyle: .alert
)
alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self.present(alertController, animated: true, completion: nil)
return
}
session = NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: true)
session?.alertMessage = "Hold your iPhone near the item to learn more about it.
session?.begin()
}
Dear Apple Engineers:
My app utilizes the App Clip experience. I would like to prevent the App Clip card from appearing when the host app is running in the foreground. How can this be achieved?
I have observed that Alipay (in China) does not display an App Clip card when the device is tapped against a tag while the app is in the foreground, which indicates that this behavior is possible.
Thank you for your assistance.
I decode an object with NSKeyedArchiver (SecureCoding):
typealias BoolArray = Array<Array<Bool>>
let val = decoder.decodeObject(of: NSArray.self, forKey: someKey) as? BoolArray
I get the following log:
*** -[NSKeyedUnarchiver validateAllowedClass:forKey:] allowed unarchiving safe plist type ''NSNumber' (0x204cdbeb8) [/System/Library/Frameworks/Foundation.framework]' for key 'NS.objects', even though it was not explicitly included in the client allowed classes set: '{(
"'NSArray' (0x204cd5598) [/System/Library/Frameworks/CoreFoundation.framework]"
)}'. This will be disallowed in the future.
I changed by adding NSNumber.self in the list :
let val = decoder.decodeObject(of: [NSArray.self, NSNumber.self], forKey: someKey) as? BoolArray
No more warning in log.
Is there a reason for this ?
I get several warnings in log:
*** -[NSKeyedUnarchiver validateAllowedClass:forKey:] allowed unarchiving
safe plist type ''NSNumber' (0x204cdbeb8)
[/System/Library/Frameworks/Foundation.framework]' for key 'NS.objects',
even though it was not explicitly included in the client allowed classes set: '{(
"'NSArray' (0x204cd5598) [/System/Library/Frameworks/CoreFoundation.framework]"
)}'. This will be disallowed in the future.
I am not sure how to understand it:
I have removed every NSNumber.self in the allowed lists for decode. To no avail, still get the avalanche of warnings.
What is the key NS.objects about ?
What may allowed classes set: '{(
"'NSArray' be referring to ? An inclusion of NSArray.self in a list for decode ? The type of a property in a class ?
I have defined a class :
class Item: NSObject, NSSecureCoding {
var name : String = ""
var color : ColorTag = .black // defined as enum ColorTag: Int
var value : Int = 0
static var supportsSecureCoding: Bool {
return true
}
Its decoder includes the following print statement to start:
required init(coder decoder: NSCoder) {
print(#function, "item should not be nil", decoder.decodeObject(of: Item.self, forKey: someKey))
Another class uses it:
class AllItems: NSObject, NSSecureCoding {
var allItems : [Item]?
static var supportsSecureCoding: Bool {
return true
}
and decodes as follows
required init(coder decoder: NSCoder) {
super.init() // Not sure it is necessary
allItems = decoder.decodeObject(of: NSArray.self, forKey: mykey) as? [Item]
print(#function, allItems) // <<-- get nil
}
I note:
decoder returns nil at line 5
I have tried to change to
decoder.decodeObject(of: [NSArray.self, NSString.self, NSColor.self, NSNumber.self], forKey: mykey))
Still get nil
And, decoder of class Item is not called (no print in the log)
What am I missing ?
The documentation says:
The caching behavior of the NSURL and CFURL APIs differ. For NSURL, all cached values (not temporary values) are automatically removed after each pass through the run loop. You only need to call the removeCachedResourceValueForKey: method when you want to clear the cache within a single execution of the run loop. The CFURL functions, on the other hand, do not automatically clear cached resource values. The client has complete control over the cache lifetimes, and you must use CFURLClearResourcePropertyCacheForKey or CFURLClearResourcePropertyCache to clear cached resource values.
https://developer.apple.com/documentation/foundation/nsurl/removeallcachedresourcevalues()?language=objc
Is this really true? In my experience I've had to explicitly remove cached resource values via -removeAllCachedResourceValues or removeCachedResourceValueForKey: otherwise the URL contains stale values.
For example on a URL that no longer exists I attempted to read NSURLIsHiddenKey and the last value was already cached. Instead of getting a NSFileNoSuchFileError I get the old cache value unless explicitly call -removeCachedResourceValueForKey: first and I'm fairly certain the value was cached on a previous run loop churn.
Environment:
Xcode 26
iOS 26
Also tested on iOS 18 (working correctly)
Description:
I'm experiencing a behavior change with URL(fileURLWithPath:) when the filename starts with a tilde (~) character.
On iOS 18, passing a filename like ~MyFile.txt to URL(fileURLWithPath:) treats the tilde as a literal character. However, on iOS 26, the same code resolves the tilde as the home directory, resulting in unexpected output.
Minimal Example:
let filename = "~MyFile.txt"
let url = URL(fileURLWithPath: filename)
print(url.lastPathComponent)
Expected Result (iOS 18):
~MyFile.txt
Actual Result (iOS 26):
924AF0C4-C3CD-417A-9D5F-733FBB8FCF29
The tilde is being resolved to the app's container directory, and lastPathComponent returns the container UUID instead of the filename.
Questions:
1. Is this an intentional behavior change in iOS 26? 2. Is there documentation about this change? 3. What is the recommended approach for extracting filename components when the filename may contain special characters like ~?
Workaround:
Using NSString.lastPathComponent works correctly on both iOS versions:
let filename = "~MyFile.txt"
let result = (filename as NSString).lastPathComponent
// Returns: "~MyFile.txt" ✅
Is this the recommended approach going forward?
I would like to share an issue observed during app development.
When changing Bluetooth settings from the system Settings app without using multitasking, the app does not terminate but instead logs the user out.
However, when changing Bluetooth settings while using multitasking, the app terminates completely.
In this context, I would like to understand:
Whether there is any system behavior that causes the app to refresh or restart when Bluetooth settings are changed
And why the app behavior differs in a multitasking environment, particularly in terms of app lifecycle handling
Any insights into these behaviors would be greatly appreciated.
“while using multitasking” means reducing the app’s size and displaying it side by side with the Settings screen at the same time. For better understanding, I will attach an image.
Additionally, I found that YouTube also terminates when the “Allow Tracking” permission is changed in Settings while using the multitasking interface.
I need to encode and decode Array<Array>
SomeStruct is multiplexed in an Int
The former API did work:
if let format = decoder.decodeObject(forKey: someKey) as? Array<Array<SomeStruct>> { }
But using the new API
if let format = decoder.decodeObject(of: Array<Array<Int>>.self, forKey: someKey) {
generates an error:
Cannot convert value of type 'Array<Array<Int>>.Type' to expected argument type '[AnyClass]' (aka 'Array<any AnyObject.Type>')
encoding is done as follows:
var format = Array(repeating: Array(repeating: 0, count: 4), count: 4)
// initialize the var
coder.encode(format, forKey: someKey)
What is the correct syntax ?
Hello,
We are using a Message Filter Extension (ILMessageFilterExtension) to classify SMS/iMessage content (junk vs allow) in our app.
After testing on iOS 26.1, we want to confirm whether there are any behavioral, performance, or API-level changes that impact message filtering, such as:
Changes in how often the filter extension is invoked
Differences in classification accuracy or system overrides
New privacy, entitlement, or permission-related restrictions
Execution time limits or memory constraints
Any changes specific to iMessage vs SMS filtering
We did not find any explicit mention of Message Filter Extensions in the iOS 26.1 release notes and would like to confirm whether the existing behavior from previous iOS versions remains unchanged.
Has Apple introduced any known or undocumented changes in iOS 26.1 that developers should be aware of when supporting Message Filter Extensions?
Sometime I also found unpredictable behaviour on iOS version 18.5 or below, like sometime it works but sometimes starts working.
Thanks in advance for any guidance.
Is there any supported or recommended way to achieve user-configurable alarm volume while still using AlarmKit?
Hi there!
I’m currently building an alarm app on iOS using AlarmKit, and I’m running into a fundamental limitation around volume control.
When using AlarmKit, alarm sounds are played at the system ringer volume.
My goal is simple in concept:
Allow users to set an alarm volume inside the app, and have the alarm sound play at that volume when triggered.
However, AlarmKit does not provide any API to control or override the alarm volume.
I’ve explored several approaches(AVSystemController, MPVolumeView...), but none achieved the desired result.
Is there any supported or recommended way to achieve user-configurable alarm volume while still using AlarmKit?
Any insights from developers who’ve shipped alarm apps, or from Apple engineers, would be greatly appreciated.
Thanks in advance 🙏
I would like to share an issue observed during app development.
When changing Bluetooth settings from the system Settings app without using multitasking, the app does not terminate but instead logs the user out.
However, when changing Bluetooth settings while using multitasking, the app terminates completely.
In this context, I would like to understand:
Whether there is any system behavior that causes the app to refresh or restart when Bluetooth settings are changed
And why the app behavior differs in a multitasking environment, particularly in terms of app lifecycle handling
Any insights into these behaviors would be greatly appreciated.