I am getting bug reports from users that occasionally the AlarmKit alarms scheduled by my app are going off exactly at midnight.
In my app, users can set recurring alarms for sunrise/sunset etc. I implement this as fixed schedule alarms over the next 2-3 days with correct dates pre-computed at schedule time. I have a background task which is scheduled to run at noon every day to update the alarms for the next 2-3 days.
Are there any limitations to the fixed schedule which might be causing this unintended behavior of going off at midnight?
Delve 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
Hi, Submitted Family Controls entitlement request a month ago for my main focus app, got approved within a day. Submitted 3 more requests for my extensions, and it has been 16 days without any word.
Saw advice to file a code-level support with DTS in this similar forum:
https://developer.apple.com/forums/thread/812934
Is there anything else I can do before filing a code-level support? Any extra info to provide? If not, can a DTS engineer please refer me for the code-level support?
Thanks!
Topic:
App & System Services
SubTopic:
General
Tags:
Family Controls
Managed Settings
Screen Time
Entitlements
Hi :) I'm new to app store connect, and I just want to verify what does it take to be able to test subscription for a new app that isn't approved yet using sandbox? Or is this not possible that the app has to be approved first?
More context below:
My app is a new app, I only submitted for review and I linked the subscription from the app’s In-App Purchases and Subscriptions section on the version page when submit it for review. It got rejected for now.
When the app review status is both in-review and rejected, I've tried to test my subscription, where there is a button (like "subscribe"/"become a member") in my app that user can click on, which it calls ios's IAPProvider.startMembershipPurchase, I just get Error: [IAPService] Product not found: [<my_subscription_id>].
I ensured my subscription's product id in app store connect matches with the one in my code.
I can see the "rejected" status both on my app and the subscription.
So can anyone help clarify if the app has to be approved first in order to test subscription? Or am I missing any other setup? Or it might just be my code?
Thanks in advance! Any info is super helpful!
I have this code in my Virutalization application
let process = Process()
process.executableURL = URL(fileURLWithPath: "/usr/sbin/diskutil")
process.arguments = ["image", "create", "blank",
"--fs", "none", "--format",
"ASIF", "--size", "2GiB",
url.path
]
try process.run()
process.waitUntilExit()
if process.terminationStatus == 0 {
print("✅ Disk image creation succeeded.")
} else {
print("❌ Disk image creation failed with exit code \(process.terminationStatus)")
}
} catch {
print("Process failed to launch: \(error.localizedDescription)")
return
}
this code was working fine until Tahoe 26.2. with the update of 26.3 the system freezes at process.waitUntilExit()
The code never exits and i get beech balls. This is working fine with intel macs. i am getting the problem in apple silicon m4 mac mini.
Any help would be appreciated.
If I have two consecutive calls like to perform(schedule: .immediate) like so:
func doSomething() async {
await self.perform(schedule: .immediate) {
// add log event 1 to data store
}
await self.perform(schedule: .immediate) {
// add log event 2 to data store
}
}
Can I be guaranteed that the block for log event 1 will happen after log event 2?
"log event" here is just an example, so please ignore things like storing date, etc.
Looking at the documentation here:
https://developer.apple.com/documentation/coredata/nsmanagedobjectcontext/perform(schedule:_:)
It's a little unclear whether any such guarantee is in place. However, given that the function returns the value from the block, it seems like I should be able to expect event 1 will always be executed before event 2 regardless of the schedule parameter?
Hello,
My app was rejected on iPad (iPad Air 11-inch M3, iPadOS 26.2.1) with two related issues:
Guideline 2.1 – Performance – App Completeness
“The app exhibited one or more bugs that would negatively impact users.
Bug description: the premium subscription cannot be loaded properly.”
Guideline 3.1.2 – Business – Payments – Subscriptions
“The submission did not include all the required information for apps offering auto-renewable subscriptions.”
I am using StoreKit 2 with SubscriptionStoreView to present the auto-renewable subscription.
During development:
Subscriptions load correctly in the simulator (sandbox).
On real devices, I test without a local StoreKit configuration file to fetch products from App Store Connect.
The subscription UI (title, duration, price) displays correctly when products are returned.
At the time of review, the Paid Apps Agreement was not active.
I suspect this may have caused the subscription products to fail loading on the review device.
Since then:
Paid Apps Agreement is now Active. SubscriptionStoreView should automatically show required metadata.
Because the subscription failed to load on iPad during review, the required information (title, price, duration) was not visible, which likely triggered the 3.1.2 rejection.
Additionally, in TestFlight I sometimes see inconsistent behavior where the app appears but cannot be installed (“App Not Available”).
Also, my app was rejected, but the subscription is still waiting for review.
I would really appreciate guidance on the following:
Am I potentially missing any required configuration that could prevent products from loading in production?
Is there any propagation delay after activating the Paid Apps Agreement that could affect product availability?
If I am overlooking something in configuration or testing, please let me know what I should specifically verify before resubmitting.
Thank you very much for your help.
Topic:
App & System Services
SubTopic:
StoreKit
Tags:
Subscriptions
StoreKit
In-App Purchase
TestFlight
Device: iPhone (real device)
iOS: 17.x
Permission: Granted
Notifications are scheduled using UNCalendarNotificationTrigger.
The function runs and prints "SCHEDULING STARTED".
However, notifications never appear at 8:00 AM, even the next day.
Here is my DailyNotifications file code:
import Foundation
import UserNotifications
enum DailyNotifications {
// CHANGE THESE TWO FOR TESTING / PRODUCTION
// For testing set to a few minutes ahead
static let hour: Int = 8
static let minute: Int = 0
// For production use:
// static let hour: Int = 9
// static let minute: Int = 0
static let daysToSchedule: Int = 30
private static let idPrefix = "daily-thought-"
private static let categoryId = "DAILY_THOUGHT"
// MARK: - Permission
static func requestPermission(completion: @escaping (Bool) -> Void) {
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound]) { granted, _ in
DispatchQueue.main.async {
completion(granted)
}
}
}
// MARK: - Schedule
static func scheduleNext30Days(isPro: Bool) {
print("SCHEDULING STARTED")
let center = UNUserNotificationCenter.current()
center.getNotificationSettings { settings in
guard settings.authorizationStatus == .authorized else {
requestPermission { granted in
if granted {
scheduleNext30Days(isPro: isPro)
}
}
return
}
// Remove old scheduled notifications
center.getPendingNotificationRequests { pending in
let idsToRemove = pending
.map { $0.identifier }
.filter { $0.hasPrefix(idPrefix) }
center.removePendingNotificationRequests(withIdentifiers: idsToRemove)
let calendar = Calendar.current
let now = Date()
for offset in 0..<daysToSchedule {
guard let date = calendar.date(byAdding: .day, value: offset, to: now) else { continue }
var comps = calendar.dateComponents([.year, .month, .day], from: date)
comps.hour = hour
comps.minute = minute
guard let scheduleDate = calendar.date(from: comps) else { continue }
if scheduleDate <= now { continue }
let content = UNMutableNotificationContent()
content.title = "Just One Thought"
content.sound = .default
content.categoryIdentifier = categoryId
if isPro {
content.body = thoughtForDate(scheduleDate)
} else {
content.body = "Your new thought is ready. Go Pro to reveal it."
}
let triggerComps = calendar.dateComponents(
[.year, .month, .day, .hour, .minute],
from: scheduleDate
)
let trigger = UNCalendarNotificationTrigger(
dateMatching: triggerComps,
repeats: false
)
let identifier = idPrefix + isoDay(scheduleDate)
let request = UNNotificationRequest(
identifier: identifier,
content: content,
trigger: trigger
)
center.add(request)
}
}
}
}
// MARK: - Cancel
static func cancelAllScheduledDailyThoughts() {
let center = UNUserNotificationCenter.current()
center.getPendingNotificationRequests { pending in
let idsToRemove = pending
.map { $0.identifier }
.filter { $0.hasPrefix(idPrefix) }
center.removePendingNotificationRequests(withIdentifiers: idsToRemove)
}
}
// MARK: - Helpers
private static func isoDay(_ date: Date) -> String {
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd"
return formatter.string(from: date)
}
private static func thoughtForDate(_ date: Date) -> String {
guard let url = Bundle.main.url(forResource: "thoughts", withExtension: "json"),
let data = try? Data(contentsOf: url),
let quotes = try? JSONDecoder().decode([String].self, from: data),
!quotes.isEmpty
else {
return "Stay steady. Your growth is happening."
}
let calendar = Calendar.current
let comps = calendar.dateComponents([.year, .month, .day], from: date)
let seed =
(comps.year ?? 0) * 10000 +
(comps.month ?? 0) * 100 +
(comps.day ?? 0)
let index = abs(seed) % quotes.count
return quotes[index]
}
}
Then here is my Justonethoughtapp code:
import SwiftUI
import UserNotifications
@main
struct JustOneThoughtApp: App {
@StateObject private var thoughtStore = ThoughtStore()
// MUST match App Store Connect EXACTLY
@StateObject private var subManager =
SubscriptionManager(productIDs: ["Justonethought.monthly"])
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(thoughtStore)
.environmentObject(subManager)
.onAppear {
// Ask for notification permission
NotificationManager.shared.requestPermission()
// Schedule notifications using PRO status
DailyNotifications.scheduleNext30Days(
isPro: subManager.isPro
)
}
}
}
}
final class NotificationManager {
static let shared = NotificationManager()
private init() {}
func requestPermission() {
UNUserNotificationCenter.current().requestAuthorization(
options: [.alert, .sound, .badge]
) { _, _ in }
}
}
Can anyone advise on this? We distributed promotional trial codes for our app Ask Dolly. These 1-month free trials are set to renew and charge users in March 2026.
A segment of users redeemed the promo codes but never created accounts or opened the app. We don't have their contact information to notify them. Our CEO has directed us to prevent these inactive subscriptions from renewing to avoid charging users who never engaged with the service.
We've downloaded the Subscription and Offer Code Redemption reports from App Store Connect, but cannot map Apple's Subscriber IDs to our user database (we only store Transaction IDs). This prevents us from identifying which specific subscriptions to cancel.
What We Need: Assistance preventing renewals for promotional subscriptions where users have had zero app sessions/opens as of the end of February.
These trials will start to renew on March 3, 2026. We need to resolve this before then to avoid charging inactive users.
Can you help us either:
Cancel subscriptions associated with promo codes that show zero app engagement, or
Provide guidance on how to programmatically identify and cancel these subscriptions?
Topic:
App & System Services
SubTopic:
StoreKit
Not quite but maybe sorta related to the errOSAInternalTableOverflow problem I asked about in a different thread, this one deals with crashes our app gets (and much more frequently lately after recent OS updates (15.7.3) are OK'd by our IT department).
Our app can run multiple jobs concurrently, each in their own NSOperation. Each op creates its own SBApplication instance that controls unique instances of InDesignServer. What I'm seeing recently is lots of crashes happening while multiple ops are calling into ScriptingBridge. Shown at the bottom is one of the stack crawls from one of the threads. I've trimmed all but the last of our code. Other threads have a similar stack crawl.
In searching for answers, Google's AI overview mentions "If you must use multiple threads, ensure that each thread creates its own SBApplication instance…" Which is what we do. No thread can reach another thread's SBApplication instance. Is that statement a lie? Do I need to lock around every ScriptingBridge call (which is going to severely slow things down)?
0 AE 0x1a7dba8d4 0x1a7d80000 + 239828
1 AE 0x1a7d826d8 AEProcessMessage + 3496
2 AE 0x1a7d8f210 0x1a7d80000 + 61968
3 AE 0x1a7d91978 0x1a7d80000 + 72056
4 AE 0x1a7d91764 0x1a7d80000 + 71524
5 CoreFoundation 0x1a0396a64 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
6 CoreFoundation 0x1a03969f8 __CFRunLoopDoSource0 + 172
7 CoreFoundation 0x1a0396764 __CFRunLoopDoSources0 + 232
8 CoreFoundation 0x1a03953b8 __CFRunLoopRun + 840
9 CoreFoundation 0x1a03949e8 CFRunLoopRunSpecific + 572
10 AE 0x1a7dbc108 0x1a7d80000 + 246024
11 AE 0x1a7d988fc AESendMessage + 4724
12 ScriptingBridge 0x1ecb652ac -[SBAppContext sendEvent:error:] + 80
13 ScriptingBridge 0x1ecb5eb4c -[SBObject sendEvent:id:keys:values:count:] + 216
14 ScriptingBridge 0x1ecb6890c -[SBCommandThunk invoke:] + 376
15 CoreFoundation 0x1a037594c ___forwarding___ + 956
16 CoreFoundation 0x1a03754d0 _CF_forwarding_prep_0 + 96
17 RRD 0x1027fca18 -[AppleScriptHelper runAppleScript:withSubstitutionValues:usingSBApp:] + 1036
Hello,
I am using CLLocationManager to monitor multiple CLBeaconRegion instances (up to 20). When the app is terminated by the system (not force-quit) and a region enter event occurs, the app is relaunched in the background.
I have two questions:
What is the expected execution time window after relaunch before the app is suspended again?
Is it supported to start short CoreBluetooth operations (e.g., scanning or connecting briefly) within this window?
I understand that force-quitting the app disables background relaunch, so this question applies only to system-terminated apps.
Hello,
I am developing a driver-based application targeting iOS 14+, where users receive time-sensitive trip offers (approximately 10–15 seconds to respond).
We would like to implement behavior similar to approval-based apps (e.g., MyGate-style interaction), with the following requirements:
When the device is locked:
A highly visible notification that allows quick Accept / Decline action.
When the device is unlocked (foreground or background):
A notification that remains prominently visible (sticky-style) at the top of the screen until the user takes action (Accept / Decline) or the offer expires.
Our goal is to ensure the offer remains noticeable and actionable within the short response window.
I would appreciate clarification on the following:
On iOS 14, is there any supported mechanism to present a true full-screen blocking interface while the device is locked (without using CallKit or Critical Alerts entitlement)?
Is there a supported way to make a notification persistent or non-dismissible until the user takes action or the offer expires?
Are there any App Review concerns with presenting a blocking modal immediately after the user interacts with a notification?
We want to ensure full compliance with Apple’s platform guidelines and avoid unsupported or discouraged patterns.
Thank you for your guidance.
Topic:
App & System Services
SubTopic:
Notifications
Tags:
APNS
Notification Center
User Notifications
Hello,
Our team submitted a request for Family Controls entitlements for our main app and four related extensions. It has now been a little over two weeks since submission, and the request is still pending review.
We wanted to check if there are any recommended steps we can take on our end to help move the process forward.
Any guidance or tips from anyone who have recently gone through this process would be greatly appreciated. Thank you.
This is a question as I don't found any related documents or posts anywhere about this. Does anyone know how and when will this "pop up" shown?
Hello Apple Developer Support,
We are observing inconsistent behavior with push notification sounds routing to Bluetooth / external speakers.
Our app sends push notifications with a custom sound file using the sound parameter in the APNs payload. When an iPhone is connected to a Bluetooth speaker or headphones:
On some devices, the notification sound plays through the connected Bluetooth/external speaker.
On other devices, the notification sound plays only through the iPhone’s built-in speaker.
We also tested with native apps like iMessage and noticed similar behavior — in some cases, notification sounds still play through the phone speaker even when Bluetooth is connected.
Media playback (e.g., YouTube or Music) routes correctly to Bluetooth, so the connection itself is functioning properly.
We would like clarification on the following:
Is this routing behavior expected for push notification sounds?
Are notification sounds intentionally restricted from routing to Bluetooth in certain conditions (e.g., device locked, system policy, audio session state)?
Is there any supported way to ensure notification sounds consistently route through connected Bluetooth/external speakers?
The inconsistent behavior across devices makes it difficult to determine whether this is by design or a configuration issue.
Thank you for your guidance.
I am a novice developer, so please be kind. 😬
I am developing a simple macOS app backed with SwiftData and trying to set up iCloud sync so data syncs between two Macs running the app. I have added the iCloud capability, checked the CloudKit box, and selected an iCloud Container. Per suggestion of Paul Hudson, my model properties have either default values or are marked as optional, and the only relationship in my model is marked as optional.
@Model
final class Project {
// Stable identifier used for restoring selected project across launches.
var uuid: UUID?
var name: String = ""
var active: Bool = true
var created: Date = Foundation.Date(timeIntervalSince1970: 0)
var modified: Date = Foundation.Date(timeIntervalSince1970: 0)
// CloudKit requires to-many relationships to be optional in this schema.
@Relationship
var timeEntries: [TimeEntry]?
init(name: String, active: Bool = true, uuid: UUID? = UUID()) {
self.uuid = uuid
self.name = name
self.active = active
self.created = .now
self.modified = .now
self.timeEntries = []
}
@Model
final class TimeEntry {
// Core timing fields.
var start: Date = Foundation.Date(timeIntervalSince1970: 0)
var end: Date = Foundation.Date(timeIntervalSince1970: 0)
var codeRawValue: String?
var activitiesRawValue: String = ""
// Inverse relationship back to the owning project.
@Relationship(inverse: \Project.timeEntries)
var project: Project?
init(
start: Date = .now,
end: Date = .now.addingTimeInterval(60 * 60),
code: BillingCode? = nil,
activities: [ActivityType] = []
) {
self.start = start
self.end = end
self.codeRawValue = code?.rawValue
self.activitiesRawValue = Self.serializeActivities(activities)
}
I have set up the following in the AppDelegate for registering for remote notifications as well as some logging to console that the remote notification token was received and to be notified when when I am receiving remote notifications.
private final class TimeTrackerAppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ notification: Notification) {
print("📡 [Push] Registering for remote notifications")
NSApplication.shared.registerForRemoteNotifications()
}
func application(_ application: NSApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let tokenPreview = deviceToken.map { String(format: "%02x", $0) }.joined().prefix(16)
print("✅ [Push] Registered for remote notifications (token prefix: \(tokenPreview)...)")
}
func application(_ application: NSApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
let nsError = error as NSError
print("❌ [Push] Failed to register for remote notifications: \(nsError.domain) (\(nsError.code)) \(nsError.localizedDescription)")
}
func application(_ application: NSApplication, didReceiveRemoteNotification userInfo: [String: Any]) {
print("📬 [Push] Received remote notification: \(userInfo)")
}
}
In testing, I run the same commit from Xcode on two different Macs logged into the same iCloud account.
My problem is that sync is not reliably working. Starting up the app on both Macs shows that the app successfully registered for remote notifications.
Sometimes, making an edit on Mac 1 is immediately reflected in Mac 2 UI along with didReceiveRemoteNotification message (all occurring while the Mac 2 app remains in foreground). Sometimes, the Mac 2 app needs to be backgrounded and re-foregrounded before the UI shows the updated data.
Sometimes, an edit on Mac 2 will show on Mac 1 only after re-foregrounded but not show any didReceiveRemoteNotification on the Mac 1 console.
Sometimes, an edit on Mac 2 will not show at all on Mac 1 even after re-foregrounding the app.
Sometimes, no edits sync between either Mac.
I had read about how a few years back, there was a bug in macOS where testing iCloud sync between Macs did not work while running from Xcode but would work in TestFlight. For me, running my app in TestFlight on both Macs has never been able to sync any edits between the Macs.
Any idea where I might be going wrong. It seems this should not be this hard and should not be failing so inconsistently. Wondering what I might be doing wrong here.
Apple's iCloud File Management documentation says to "avoid special punctuation or other special characters" in filenames, but doesn't specify which characters. I need a definitive list to implement filename sanitization in my shipping app.
Confirmed issues
Our iOS app (CyberTuner, App Store, 15 years shipping on App Store) manages .rcta files in the iCloud ubiquity container via NSFileManager APIs. We've confirmed two characters causing sync failures:
Ampersand (&): A file named Yamaha CP70 & CP80.rcta caused repeated "couldn't be backed up" dialogs. ~12 users reported this independently. Replacing & resolved it immediately. No other files in the same directory were affected.
Percent (%): A file with % in the filename was duplicated by iCloud sync (e.g., filename% 1.rcta, filename% 2.rcta), and the original was lost. Currently reproducing across multiple devices.
Both characters have special meaning in URL encoding (% is the escape character, & is the query parameter separator), which suggests the issue may be in URL handling within the sync pipeline.
What I'm looking for:
A definitive list of characters that cause problems in the iCloud sync pipeline specifically — not APFS restrictions, but CloudDocs/FileProvider/server-side issues.
Confirmation whether these characters are problematic: & % # ? + / : * " < > |
Is there a system API for validating or sanitizing filenames for iCloud compatibility before writing to the ubiquity container?
Our users are piano technicians who naturally name files "Steinway & Sons" — we need to know exactly what to sanitize rather than guessing.
Environment: iOS 17–26, Xcode 26.1, APFS, NSFileManager ubiquity container APIs Bundle FEEDBACK ASSISTANT ID
FB21900837
Topic:
App & System Services
SubTopic:
iCloud & Data
Hello! We've had reports of iOS devices 'waking up' and vibrating in response to the push notifications arriving but the notification itself is not being displayed to the user, despite having been granted the correct permissions. Is this a known issue?
Hi,
I’m working on a macOS app that includes a file browser component. And I’m trying to match Finder’s behavior for color tags and folder icons.
For local files/folders everything works fine:
Tag color key returns the expected label number via
NSColor * labelColor = nil;
[fileURL getResourceValue:&labelColor forKey:NSURLLabelColorKey error:nil];
NSNumber * labelKey = nil;
[fileURL getResourceValue:&labelKey forKey:NSURLLabelNumberKey error:nil];
QLThumbnailGenerator obtains the expected colored folder icon (including emoji/symbol overlay if set) via
QLThumbnailGenerationRequest * request =
[[QLThumbnailGenerationRequest alloc] initWithFileAtURL:fileURL
size:iconSize
scale:scaleFactor
representationTypes:QLThumbnailGenerationRequestRepresentationTypeIcon];
request.iconMode = YES;
[[QLThumbnailGenerator sharedGenerator] generateBestRepresentationForRequest:request
completionHandler:^(QLThumbnailRepresentation * _Nullable thumbnail, NSError * _Nullable error) {
if (thumbnail != nil && error == nil)
{
NSImage * thumbnailImage = [thumbnail NSImage];
// ...
}
}];
However, for items on iCloud Drive (whether currently downloaded locally or only stored in the cloud), the same code always produces gray colors, while Finder shows everything correctly:
NSURLLabelNumberKey always returns 1 (gray) for items with color tags, and 0 for non-tagged.
Folder icons returned via QLThumbnailGenerator are gray, no emoji/symbol overlays.
Reading tag data from xattr gives values like “Green\1” (tag name matches, but numeric value is still "Gray").
Also, if I move a correctly-tagged local item into iCloud Drive, it immediately becomes gray in my app (Finder still shows the correct colors).
Question:
What is the supported way to retrieve Finder tag colors and the correct folder icon appearance (color + overlays) for items in iCloud Drive, so that the result matches Finder?
I am on macOS Tahoe 26.2/26.3, Xcode 26.2 (17C52).
If you need any additional details, please let me know.
Thanks!
Topic:
App & System Services
SubTopic:
iCloud & Data
Tags:
Files and Storage
QuickLook Thumbnailing
iCloud Drive
Hello,
I am an individual developer working on a macOS application using SwiftUI and RealityKit.
I would like to understand the feasibility of face-related tracking on macOS when using an external USB camera, compared to iOS/iPadOS.
Specifically:
• Does macOS provide an ARKit Face Tracking–equivalent API (e.g., real-time facial expressions, gaze direction, depth)?
• If not, is it common to rely on Vision / AVFoundation as alternatives for:
• Facial expression coefficients
• Gaze estimation
• Depth approximation
• In an environment without dedicated sensors such as TrueDepth, is it correct to assume that accurate depth data and high-fidelity blend shape extraction are realistically difficult?
Any clarification on official limitations, recommended alternatives, or relevant documentation would be greatly appreciated.
Thank you.
Topic:
App & System Services
SubTopic:
Hardware
Dears,
Please take a look at case:
FB21940123 (Wallet Extension unable to add card)
Thanks