In macOS Tahoe, users can tint folders or add symbols. But when trying to access that customized icon in Swift, the system always returns the default folder icon.
NSWorkspace.shared.icon(forFile: url.path)
try url.resourceValues(forKeys: [.effectiveIconKey]).effectiveIcon
try url.resourceValues(forKeys: [.customIconKey]).customIconKey
All of these give back the standard folder icon without any of the user-applied customization.
So the question is: Is there any API or workaround in Swift to retrieve the actual customized folder icon (including tint and symbol) as displayed in Finder on macOS Tahoe?
Overview
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Created
Hello,
I would like to clarify how link association and app-opening preferences work in iOS, specifically when a user opens a URL in a browser that can be handled by an installed application.
I have noticed the following behavior:
When a user taps a URL that can be opened by an app, iOS sometimes asks whether to open the link in the app or continue in the browser.
After choosing an option once (for example, "Open in App" or "Stay in Browser"), it seems that this preference becomes persistent.
Even after deleting the application and reinstalling it, the browser (Safari or third-party browsers) sometimes continues to open the link directly in the browser without asking the user again.
In some cases, it appears impossible to reset or clear this association, and the user is not prompted again to choose how the link should be opened.
My questions are:
How exactly does iOS store link-handling preferences between apps and browsers?
Are these preferences saved on the system level, inside Safari, or associated with the app installation itself?
Is there a way for a user to manually reset or clear these link-opening associations?
Should deleting and reinstalling the app reset these preferences, or is the behavior expected to persist?
Is this behavior different for Universal Links, App Clips, or for regular URL scheme associations?
This situation is important for us because it affects user experience, and at the moment it is difficult to understand or reproduce the internal logic behind these link associations.
Thank you in advance for your clarification.
Topic:
App & System Services
SubTopic:
General
Tags:
Entitlements
Provisioning Profiles
Universal Links
Code Signing
I'm using Xcode Cloud to build for internal TestFlight testing.
But it stuck in Archive. No warning or error. Unable to complete the workflow.
What could be causing this? I have absolutely no idea what to do now.
系统闹钟APP响铃响起时,点击电源键可以小睡功能。AlarmKit能否有办法判断是电源键和其他物理按键关闭了闹钟,而非点击或滑动关闭按钮。这样第三方闹钟也可以增加小睡功能。目前是直接关闭了闹钟。
Topic:
Developer Tools & Services
SubTopic:
General
I develop a Network Extension with NEFilterDataProvider and want to understand how to stop or disable it on exit of the base app without deactivating NE from OS and leave ability to start it again without requiring a password from the user.
It starts normally, but when I try to disable it:
NEFilterManager.sharedManager.enabled = NO;
[NEFilterManager.sharedManager saveToPreferencesWithCompletionHandler:^(NSError * _Nullable error) {
// never called
}];
the completion handler has never called.
But stopFilterWithReason inside the NE code called by the framework where I only replay with required completionHandler();. Then NE process keeps alive.
I also tried to call remove, which should disable NE:
[NEFilterManager.sharedManager removeFromPreferencesWithCompletionHandler:^(NSError * _Nullable error) {
// never called
}];
with same result - I freeze forever on waiting completion handler.
So what is the correct way to disable NE without explicit deactivation it by [OSSystemExtensionRequest deactivationRequestForExtension:...]?
Hi everyone,
I am encountering an issue where my Live Activity (Dynamic Island) suddenly became invalid and failed to launch. It was working perfectly before, and I haven't modified any code since then.
My Environment:
Xcode: 26.1.1
Device iOS: 26.1
Testing: I also tested on iOS 18, but the Live Activity fails to start there as well.
Here is my code:
Live Activity Manager (Start/Update/End):
func startLiveActivity() {
// Initial static data
let attributes = SimpleIslandAttributes(name: "Test Order")
// Initial dynamic data
let initialContentState = SimpleIslandState(message: "Preparing...")
// Adapting for iOS 16.2+ new API (Content)
let activityContent = ActivityContent(state: initialContentState, staleDate: nil)
do {
let activity = try Activity.request(
attributes: attributes,
content: activityContent,
pushType: nil // Set to nil as remote push updates are not needed
)
print("Live Activity Started ID: \(activity.id)")
} catch {
print("Failed to start: \(error.localizedDescription)")
}
}
// 2. Update Live Activity
func updateLiveActivity() {
Task {
let updatedState = SimpleIslandState(message: "Delivering 🚀")
let updatedContent = ActivityContent(state: updatedState, staleDate: nil)
// Iterate through all active Activities and update them
for activity in Activity<SimpleIslandAttributes>.activities {
await activity.update(updatedContent)
print("Update")
}
}
}
// 3. End Live Activity
func endLiveActivity() {
Task {
let finalState = SimpleIslandState(message: "Delivered ✅")
let finalContent = ActivityContent(state: finalState, staleDate: nil)
for activity in Activity<SimpleIslandAttributes>.activities {
// dismissalPolicy: .default (immediate), .after(...) (delayed), .immediate (no animation)
await activity.end(finalContent, dismissalPolicy: .default)
print("End")
}
}
}
The Models (Shared between App and Widget Extension):
// 1. Define State (Dynamic data, changes over time, e.g., remaining delivery time)
public struct SimpleIslandState: Codable, Hashable {
var message: String
}
// 2. Define Attributes (Static data, constant after start, e.g., Order ID)
public struct SimpleIslandAttributes: ActivityAttributes {
public typealias ContentState = SimpleIslandState
var name: String // e.g., "My Order"
}
The Widget Code:
//
// SimpleIslandWidget.swift
// ReadyGo
//
// Created by Tang Yu on 2025/11/19.
//
import WidgetKit
import SwiftUI
import ActivityKit
struct SimpleIslandWidget: Widget {
var body: some WidgetConfiguration {
ActivityConfiguration(for: SimpleIslandAttributes.self) { context in
// UI shown on the Lock Screen
VStack {
Text("Lock Screen Notification: \(context.state.message)")
}
.activityBackgroundTint(Color.cyan)
.activitySystemActionForegroundColor(Color.black)
} dynamicIsland: { context in
// Inside Widget Extension
DynamicIsland {
// Expanded Region
DynamicIslandExpandedRegion(.center) {
Text("Test") // Pure text only
}
} compactLeading: {
Text("L") // Pure text only
} compactTrailing: {
Text("R") // Pure text only
} minimal: {
Text("M") // Pure text only
}
}
}
}
Additional Info:
This is the minimal code setup I created for testing, but even this basic version is failing.
I have set NSSupportsLiveActivities (Supports Live Activities) to YES (true) in the Info.plist for both the Main App and the Widget Extension.
Has anyone experienced this? Any help would be appreciated.
Hello everyone,
I'm trying to publish my first app, but I'm stuck on adding bank account details. My bank account number is 16 digits, and the limit is 10 digits. I contacted support they asked me to contact the financial department using this link https://developer.apple.com/contact/finance/
I contacted them twice, but no answer at all, just an acknowledgement email with the case ID.
Does anyone have the same issue? Can Anyone help with a solution?
Thanks
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect
Playback of any kind of HD H.264 MP4 files (720p, 50fps) could randomly cause a stalled image. Playback does not stop in such a case. Image is frozen/stalled. Audio goes on. Timeline goes on. By tapping play/pause or scrubbing in the timeline, the playback recovers.
It could also happen, if you are scrubbing in the timeline, especially to areas not loaded already (progressive MP4 download). Behaviour is always the same: image is stalled/frozen, audio goes on.
To reproduce: use example project https://developer.apple.com/documentation/AVKit/playing-video-content-in-a-standard-user-interface
Example file: https://www.keepinmind.info/test.mp4
On macOS Tahoe 26 activating GUI apps from command-line often fails.
It launches the app but not brings to the foreground as expected.
For example, running the following commands in Terminal is expected to launch Pages and bring it to the foreground.
open /Applications/Pages.app
or
osascript -e `tell application "Pages" to activate`
Moreover, they sometimes not return in Terminal.
These commands worked as expected until macOS 15 but no more in macOS 26.
The tricky part is that this failure doesn't happen 100% of the time; it occurs randomly.
However, since multiple users of my app have reported the same symptoms, and I can reproduce it not only with my app but also with apps bundled to macOS, I don't believe this is an issue specific to my environment alone.
I’ve already filed this issue: FB21087054
Open version: https://github.com/1024jp/AppleFeedback/issues/87
However, I’d like to know if any workaround exists or my understanding is wrong, especially for case with osascript.
We are going to publish an app update that will change the Brand identity of our app.
One of this changes will be the app name shown under the app Icon, we discovered that an app with the same name (CFBundleDisplayName) already exists. Is it allowed to have two apps with the same name on iOS (We own the rights to use the name on our country).
I would like to explicitly say that I am talking about the name under the app icon and not the AppStore name, where I'm quite sure that two apps cannot have the same name.
I would like to have an official response, since this would impact our marketing strategy.
Thanks in advance for your help
Topic:
App Store Distribution & Marketing
SubTopic:
General
Hi,
I am developing an app that uses the Host Card Emulation (HCE) technology available on iOS. Our team is using the official HCE app entitlement, and we are testing the SDK’s behavior when the app is selected as the default contactless payment application.
On devices located in supported regions, the system automatically displays a setting where the user can choose the default app. For colleagues who are located in those regions, the toggle appears normally.
For development and QA purposes, I would like to understand whether there is an officially supported method to test the default-app selection behavior on devices that are not in a region where the feature is available.
Any guidance on the correct testing approach would be appreciated.
Thank you!
I’m experiencing an issue after building the project with Xcode 26.1.1.
In my code, I have a UICollectionView that contains multiple cells, and each cell has a slider. When I move a slider in one cell, sliders in other cells also move.
This issue does not occur in Xcode 16.4 – it works perfectly there.
If anyone has a solution or knows if this is related to Xcode 26 changes, please let me know. Thanks!
I've account access level of developer. I want to create app specific password but go through the account but could not get any option to do so. Can somebody help me on this.
Thanks in advance.
Topic:
Business & Education
SubTopic:
General
We have been using ApplePay on the web for years, but we are running into a problem since today in sandbox where domainName is missing from the create payment sessions request. We haven't changed anything related to this request any time recently.
Static payment sessions url being hit in sandbox: https://apple-pay-gateway-cert.apple.com/paymentservices/paymentSession
request format:
"merchantIdentifier": "merchant.com.identifier",
"displayName": "Test Store",
"initiative": "web",
"initiativeContext": "test.example.com",
"domainName": "test.example.com"
response format:
{
"epochTimestamp": 1763533367972,
"expiresAt": 1763536967972,
"merchantSessionIdentifier": "<merchantSessionIdentifier>",
"nonce": "<nonce>",
"merchantIdentifier": "<merchantIdentifier>",
"displayName": "Test Store",
"signature": "<signature>",
"initiative": "web",
"initiativeContext": "test.example.com",
"signedFields": [
"merchantIdentifier",
"merchantSessionIdentifier",
"initiative",
"initiativeContext",
"displayName",
"nonce"
],
"operationalAnalyticsIdentifier": "Test Store:<identifier>",
"retries": 0,
"pspId": "<pspId>"
}
Production create session request to https://apple-pay-gateway.apple.com/paymentservices/paymentSession is behaving as expected, sending the following fields as response: epochTimestamp, expiresAt, merchantSessionIdentifier, nonce, merchantIdentifier, domainName, displayName, signature, operationalAnalyticsIdentifier, retries, pspId
Claude seems to suggest this is a response when Messages for Business is enabled, but this ApplePay Payment Processing merchant is only configured for Apple Pay on the Web.
Any ideas or pointers to check for? We are worried this will spill over in production as well, which will break our ApplePay integration.
Thanks in advance!
Topic:
App & System Services
SubTopic:
Apple Pay
I created a custom class that inherits from IOUserSCSIPeripheralDeviceType00 in the DriverKit SCSIPeripheralsDriverKit framework.
When I attempted to send a vendor-specific command to a USB storage device using the UserSendCDB function of this class instance, the function returned the error:
kIOReturnNotPrivileged (iokit_common_err(0x2c1)) // privilege violation
However, when using UserSendCDB in the same way to issue standard SCSI commands such as INQUIRY or Test Unit Ready, no error occurred and the returned sense data was valid.
Why is UserSendCDB able to send standard SCSI commands successfully, but vendor-specific commands return kIOReturnNotPrivileged?
Is there any required entitlement, DriverKit capability, or implementation detail needed to allow vendor-specific CDBs?
Below are the entitlements of my DriverKit extension:
<dict>
<key>com.apple.developer.driverkit.transport.usb</key>
<array>
<dict>
<key>idVendor</key>
<integer>[number of vendorid]</integer>
</dict>
</array>
<key>com.apple.developer.driverkit</key>
<true/>
<key>com.apple.developer.driverkit.allow-any-userclient-access</key>
<true/>
<key>com.apple.developer.driverkit.allow-third-party-userclients</key>
<true/>
<key>com.apple.developer.driverkit.communicates-with-drivers</key>
<true/>
<key>com.apple.developer.driverkit.family.scsicontroller</key>
<true/>
</dict>
If there is any additional configuration or requirement to enable vendor-specific SCSI commands, I would appreciate your guidance.
Environment: macOS15.6 M2 MacBook Pro
This is a problem from Beta 1, but since there is no fix yet in Beta 3, I'd like to raise it.
The app is built with macCatalyst, and we have pretty simple tab bar controller setup:
viewController = UITabBarController()
viewController.tabBar.tintColor = .buttonForegroundColor
importWorkflow = ModelImportWorkflow(
userInterfaceIdiom: userInterfaceIdiom, workspace: workspace)
mergeWorkflow = ModelMergeWorkflow(userInterfaceIdiom: userInterfaceIdiom, workspace: workspace)
listWorkflow = ModelListWorkflow(workspace: workspace, userInterfaceIdiom: userInterfaceIdiom)
viewController.viewControllers = [
listWorkflow.viewControllable, importWorkflow.viewControllable,
mergeWorkflow.viewControllable,
]
viewController.modalPresentationStyle = .formSheet
We don't do any customizations on the tab bar and in Beta 3 (26.2), there is no way to found the tab bar (attached a user reported image).
Please advise what's the course of action. Thanks.
Dear Apple Developer Support,
I am writing to seek guidance regarding App Clips launch source differentiation in our restaurant application.
Background:
Our restaurant uses QR codes that are permanently associated with specific table numbers. These QR codes successfully launch our App Clip and pass the table information via NSUserActivity with NSUserActivityTypeBrowsingWeb.
Current Issue:
We are facing a significant challenge in distinguishing between different launch sources:
Camera Scan/URL Launch: When customers scan the QR code using the native camera or tap a URL, the App Clip launches with the correct table information.
App Library Launch: When customers launch the App Clip from the App Library, it restores the previous NSUserActivity with potentially outdated table information.
The Problem:
Since we cannot determine whether the App Clip was launched from the camera/URL or from the App Library, we cannot reliably decide whether to use the table information carried by userActivity. This causes customers to be directed to incorrect tables when launching from the App Library.
What We've Tried:
We have attempted various approaches to differentiate the launch source:
Checking for AppClipActivationPayload - but it exists in both scenarios
Examining UIApplicationLaunchOptionsKey and UISceneConnectionOptions
Analyzing URL parameters and timestamps
Implementing custom state management
However, none of these methods provide reliable differentiation between camera scan launches and App Library restorations.
Question:
Is there any official API or recommended approach to programmatically determine if an App Clip was launched:
From a camera scan/URL tap (fresh launch), OR
From the App Library (state restoration)
Any guidance on how to properly handle this scenario would be greatly appreciated, as it significantly impacts the user experience in our restaurant ordering system.
Thank you for your time and assistance.
Best regards
I got notification filtering permission from appStoreConnect, i.e. com.apple.developer.usernotifications.filtering, but not able to suppress notification even after setted contentHandler(UNNotificationContent()) and contentHandler(UNMutableNotificationContent()).
Added entitlements in both extension and main app, also in signing profile these Entitlements are visible, what other changes should I do?
Topic:
App & System Services
SubTopic:
Notifications
I am using a Sonoma VM (14.6) where i have installed xcode 16.2. When i try login into apple id into xcode, i am getting this error. I know i am entering the correct credentials.
Not sure why this issue is.
In other Sequioa and Tahoe VM , i was able to login.
Currently I am not finding any API to read the status of Message Filter Extension from settings. Are we planning for any future releases ?