I have my app configured as a Driving Task app with the entitlement and provisioning profile correctly set up. I am also requesting the ".carPlay" notification authorization option and setting up the carplay notification category with the ".allowInCarPlay" category, both without error.
When testing with the iPhone and carplay simulators the user notifications I send are appearing on the phone but not in carplay.
When I check the notification settings with UNUserNotificationCenter.current().getNotificationSettings() I see that carplay is shown to be not supported ("carPlaySetting: NotSupported").
The CarPlay Developer Guide 2025-06-09 (which is the version currently referenced in the Apple docs) states that "Starting in iOS 18.4, notifications are also supported in CarPlay driving task apps".
Has this discrepancy been addressed anywhere, or is this an open issue?
My software versions:
MacOS: Sequoia 15.6
XCode: 16.4
iPhone Simulator: iPhone 16 with iOS 18.6
Notifications
RSS for tagLearn about the technical aspects of notification delivery on device, including notification types, priorities, and notification center management.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Discrepancy between App Store Server API `expiresDate` and iOS Settings subscription expiration date
I am developing an iOS app that uses App Store Server API (v2) for auto-renewable subscriptions.
I noticed a discrepancy between the expiration date returned by the API and the date displayed in iPhone Settings > Subscriptions:
App Store Server API expiresDate: 2025-09-12T12:10:25 (KST)
iOS Settings > Subscriptions: 2025-09-11 (one day earlier)
My understanding:
The API’s expiresDate is the precise UTC timestamp.
The Settings UI might display the "last full calendar day" for UX purposes.
Questions:
Is this behavior (UI showing one day earlier) an intentional Apple policy?
If so, is there any official documentation or guideline explaining this behavior?
Should developers always rely on the API’s expiresDate for subscription state management?
This discrepancy is confusing for both developers and end users, so any clarification or official reference would be greatly appreciated.
Topic:
App & System Services
SubTopic:
Notifications
We are attempting to update our app to use the PTT framework, as it has been made clear that this will be required in a future iOS version as opposed to using the Unrestricted VoIP entitlement we are using for several features of our app.
However, the behavior of this framework poses some problems with implementing our app's functionality:
It is not possible to programmatically join a channel when the app is not in the foreground. This hinders our ability to implement the Automatically activate radio stream feature of our app, which allows users who have opted into this feature to immediately begin hearing live PTT audio from their agency following an incident alert. Having the app constantly "joined to a channel" and using the restoration delegate could potentially work, however this is not ideal as this would result in the PTT UI needing to be displayed at all times, even when no radio stream is activated.
We have a "Text to Speech" option that, when enabled, reads out the content of an incident alert after the alert sound has played. This currently happens by triggering an AVSpeechSynthesizer in the PushKit incoming push callback. It may be possible to render TTS audio on the fly in a Notification Service Extension and assign it as the notification's sound, if that is possible this is less of a problem.
We also use the PushKit callback to, again if the user has enabled it, activate a "Shake to Respond" feature, allowing a short period of time after receiving an incident alert in which the user can shake their device to indicate that they are responding to the incident. There does not appear to be any way to have the level of background execution required to implement this using an NSE, and this is of course beyond the scope of the PTT framework.
What options do we have to be able to continue to provide this functionality, without risk of it being disabled in a future iOS version?
Hi Apple Support team,
I would like to inform you that we were receiving push notifications to all regions. Recently we were facing push notifications are not receiving to brazil region. For all other regions we are receiving. We are using same APSN certificate. Any region specific permissions do we need to add. Please let me know. Thanks.
I'm trying to provide custom localized descriptions for the iOS notification permission popup in my app, which supports multiple locales. To achieve this, I'm using InfoPlist.strings files per locale with the following keys:
NSUserNotificationsUsageDescription
NSUserTrackingUsageDescription
The issue I'm facing is that NSUserTrackingUsageDescription is working correctly across all tested locales, but NSUserNotificationsUsageDescription only works for some locales.
Locales tested:
Working: ja, tr, fr-CA
Not working: fr-BE, nl-BE
In each case, the correct localized NSUserTrackingUsageDescription appears, but the NSUserNotificationsUsageDescription falls back to the default or does not appear as expected in fr-BE and nl-BE.
I'm using Xcode 16 and testing on both iOS 18 simulator and physical devices, and the issue is consistent across both.
Any insights on whether this is a known issue in iOS or if there are additional steps needed for NSUserNotificationsUsageDescription to localize properly would be greatly appreciated.
I'm observing that when a silent push notification is sent to our app, is is started up in the background for 30 seconds before being suspended until the app is launched by the user. This causes data to persist from the silent push notification to the user app launch.
I couldn't find documentation on this behavior for silent push notifications, and was wondering if it's possible to have the app terminate after handling the silent push notification. Is there documentation on the general flow of silent push notifications as well?
I'm able to handle the edge cases if the app has to be suspended until user launch, but just want to confirm that this is the expected behavior before I go about handling it this way.
Hi Apple team and fellow developers,
We previously had Location Push Service Extension enabled and working in production. After transferring the app to a new Apple Developer team, the production App ID was transferred, but the Location Push entitlement was not retained.
We've also created a new App ID for development, and now need Location Push access enabled for both the transferred production ID and the new development ID.
We’ve already submitted the Location Push Access form with all relevant details.
Unfortunately, the App Transfer documentation didn’t make it clear that Location Push access would be lost, and now we’re blocked from making new builds — even for the existing production app.
❓ Questions:
Is it possible to re-enable Location Push for a transferred App ID?
What’s the expected timeline for entitlement approval?
Can Apple staff confirm the request status or let us know if any further action is needed?
Thanks in advance — this entitlement is critical for our app’s functionality and release pipeline.
Best,
Aidar
Topic:
App & System Services
SubTopic:
Notifications
Tags:
APNS
Developer Tools
Maps and Location
Developer Program
UNNotificationAttachment convenience init method seems to be checking for supported file types based on the extension of the file URL provided as a constructor parameter. This seems to be sub-optimal at best and incorrect at worst.
Is this is a known issue for which a bug already exists?
We are developing a walkie-talkie style iOS app using CallKit and PushKit for real-time voice communication. The app is intended for internal company use and requires unrestricted VoIP push capabilities to reliably deliver incoming call alerts, even in background or locked states.
Our app's use case follows Apple’s guidelines, and we are not using PushKit for messaging or background data. We have already enabled "Push Notifications" in Capabilities and confirmed the provisioning profile, but are unable to enable com.apple.developer.pushkit.unrestricted-voip.
Could someone from Apple or the community advise on the current process to request this entitlement for a production app?
Developer Team ID: 3KX7Q4LX88
App Bundle ID: com.ksc-sys.rcc.TakumiTalk
Developer Name: KOHEI TAKAOKA
Company: R C C, Y.K
Topic:
App & System Services
SubTopic:
Notifications
Hello,
We are facing issue that sometimes a voip notification gets delivered after it is expired. The issue can be simply demonstrated we set the device to flight mode, and after 20s we disable flight mode. We still receive the voip notification.
We are setting the expiration header as following apns-expiry=0, so from my understanding it should not be delivered if the device was not able to receive the notification in the fist attempt.
I have read following thread https://developer.apple.com/forums/thread/778512, from which I understand this is a long standing issue.
Hence my question is, is there any way how we can notify the call kit that the call is actually no longer valid, and do not display the call to the user at all?
Currently we are forced to always display CallKit call when the notification comes, and some of our users are confused that they see a missed call which they did not have any chance to pick up.
Please let me know if you need any more information.
Best Regards,
Adam Chlupacek
以下の問題が発生しています:
特定のデバイスでプッシュ通知が受信されません。
考えられる原因は何でしょうか?
プッシュ通知は自社のサーバーから送信しており、APNs(Apple Push Notification service)からは正常な応答が返ってきています。
ユーザーはデバイスで通知が有効になっていることを確認しており、ネットワークの問題も報告されていません。
この問題は複数のユーザーに発生しています。
We're building a taxi driver app. Our goal is simple:
Play a notification sound when a new ride request arrives — even if the iPhone is connected to CarPlay.
We use Firebase push with "sound": "default" and "interruption-level": "time-sensitive". The app requests .carPlay and uses a category with .allowInCarPlay.
Everything works when CarPlay is disconnected — we get sound and banner. But when connected to CarPlay:
the push is delivered silently,
no sound is played (even on the phone),
Siri Announce is enabled, but nothing is spoken.
Questions:
Is notification sound blocked when CarPlay is active, unless the app has CarPlay entitlement?
Is Siri Announce the only way to notify the driver audibly in this case?
Would getting a CarPlay entitlement (e.g. CarPlay.communication) fix this without building a full CarPlay UI?
Thanks — all we need is a reliable sound alert when a new ride comes in.
Hi, I'm experiencing an issue with my app. I use Firebase as my server, and it is great. Still, there is one issue: when I send push notifications from my app to users, the users will get the notification if the app is open, but not when it is closed. I have tried many solutions to fix it, even asking AI, but the issue is still there. I would be happy to give you access to Firebase and the Xcode workspace, as I have no clue how to fix it.
Background:
The project was created in Xcode 5, then recreated in new Xcode. Before migration, push notifications worked without issues, after migration device token stopped being extracted.
Problem:
iOS app registers for push notifications, but didRegisterForRemoteNotificationsWithDeviceToken or didFailToRegisterForRemoteNotificationsWithError methods are not being called.
Current situation:
App is registered for push notifications (isRegisteredForRemoteNotifications = true)
Notification permissions are granted
Entitlements are configured correctly (aps-environment: development)
Bundle ID: com.autoserviceonline.app
Team: BUSINESSVISION COMPANY, TOO (NS3FSG45V7)
But callback methods are not being called
What I've already tried:
Deleted and recreated all App IDs in Apple Developer Portal
Cleared Xcode cache and derived data
Created new APNs certificates and provisioning profiles
Removed "ghost" certificate from Keychain Access
Problem persists
Additional information:
Also noticed that Push Notifications Console opens non-existent project "BV.TestSwiftData" with Personal Team instead of current corporate App ID com.autoserviceonline.app. These issues might be related to project migration from old Xcode.
Request:
Why iOS doesn't call callback methods for device token, although registration was successful?
I have been fighting this problem for two months and would love any help, advice or tips. Should I file a DTS ticket?
Summary
We attach a JPEG image to a local notification using UNNotificationAttachment. iOS reports the delivered notification as having attachments=1, but intermittently no image preview appears in Notification Center. In correlated cases, the attachment’s UNNotificationAttachment.url (which points into iOS’s attachment store) becomes unreadable (Data(contentsOf:) fails) even though the delivered notification still reports attachments=1.
This document describes the investigation, evidence, and mitigations attempted.
Product / Component
UserNotifications framework
UNNotificationAttachment rendering in Notification UI (Notification Center / banner / expanded preview)
Environment
App: OnThisDay (SwiftUI, Swift 6)
Notifications: local notifications scheduled with UNCalendarNotificationTrigger(repeats: false)
Attachment: JPEG generated from PhotoKit (PHImageManager.requestImage) and written to app temp directory, then passed into UNNotificationAttachment.
Test contexts:
Debug builds (direct Xcode install)
TestFlight builds (production signing)
iOS devices: multiple, reproducible with long runs and user clearing delivered notifications
Expected Result
Delivered notifications with UNNotificationAttachment should consistently show the image preview in Notification Center (thumbnail and expanded preview), as long as the notification reports attachments=1.
If the OS reports attachments=1, the attachment’s store URL should remain valid/readable for the lifetime of the delivered notification still present in Notification Center.
Actual Result
Intermittently:
Notification Center shows no image preview even though the app scheduled the notification with an attachment and iOS reports the delivered notification as having attachments=1.
When we inspect delivered notifications via UNUserNotificationCenter.getDeliveredNotifications, the delivered notification’s request.content.attachments.first?.url exists but is unreadable (attempting Data(contentsOf:) returns nil / throws), i.e. the backing attachment-store file appears missing or inaccessible.
In some scenarios the attachment-store file is readable for hours while the notification is pending, and then becomes unreadable after the notification is delivered.
Reproduction Scenarios (Observed)
Next-day reminders show attachment-store unreadable after delivery
1. Schedule a one-shot daily reminder for next day (07:00 local time) with UNCalendarNotificationTrigger(repeats: false) and a JPEG attachment.
2. During the prior day, periodic background refresh tasks verify the pending notification’s attachment-store URL is readable (pendingReadable=true).
3. After the reminder is delivered the next morning, the delivered snapshot shows the delivered notification’s attachment-store URL is unreadable (readable=false) and Notification Center shows no preview.
Interpretation: the attachment-store blob appears to become inaccessible around/after delivery, despite being readable while pending.
Evidence and Instrumentation
We added non-crashing diagnostic logging (Debug builds) around:
Scheduling time
Logged that we successfully created a UNNotificationAttachment from a unique temp file.
Logged that UNUserNotificationCenter.add(request) succeeded.
Queried pendingNotificationRequests() and logged the scheduled request’s attachment url.lastPathComponent (iOS attachment-store filename).
Delivered time (when app becomes active)
Called UNUserNotificationCenter.getDeliveredNotifications and logged:
delivered count, attachment count
attachment url.lastPathComponent
whether Data(contentsOf: attachment.url) succeeds (readable=true/false)
Content fingerprinting
Fingerprinted the exact JPEG bytes we wrote (SHA-256 prefix + byte count).
Logged the iOS attachment-store filename (url.lastPathComponent) returned post-scheduling.
Decode validation probe (later addition)
When Data(contentsOf:) succeeds, we validate it decodes as an image using CGImageSourceCreateWithData and log:
UTI (e.g. public.jpeg)
pixel width/height
magic header bytes
What we tried / Mitigations
Proactive “self-heal” for pending notifications
Change: during background refresh/foreground refresh, verify the pending daily reminder’s attachment-store URL readability. If it’s unreadable, reschedule with a new attachment (same trigger).
Rationale: if iOS drops the store file before delivery, recreating could repair it.
Result: We observed cases where pending remained readable but delivered became unreadable after delivery, so this doesn’t address all observed failures. It is still valuable hardening.
Increase scheduling frequency / reschedule closer to fire time (proposed/considered)
We discussed adding a debug mode to always recreate the daily reminder during background refresh tasks (or only within N hours of fire time) to reduce the time window between attachment creation and delivery.
Status: experimental; not yet confirmed to resolve the “pendingReadable=true → delivered unreadable after delivery” failure.
Impact
The primary UX value of the daily reminder is the preview photo; missing previews degrade core functionality.
Failures are intermittent and appear dependent on OS attachment-store behavior and Notification Center actions (clearing notifications), making them difficult to mitigate fully app-side.
Notes / Questions for Apple
1. Is iOS allowed to coalesce/deduplicate UNNotificationAttachment storage across notifications? If so, what is the retention model when delivered notifications are removed?
2. If a delivered notification still reports attachments=1, should its attachment-store URL remain valid/readable while the notification is still present in Notification Center?
3. In “next-day” one-shot scheduling scenarios, can the attachment-store blob be purged between scheduling and delivery (or immediately after delivery) even if the notification remains visible?
4. Is there a recommended pattern to ensure attachment previews remain stable for long-lived scheduled notifications (hours to a day), especially when using UNCalendarNotificationTrigger(repeats: false)?
Minimal Code Pattern (simplified)
1. Generate JPEG (PhotoKit → UIImage → JPEG Data).
2. Write to a unique temp URL.
3. Create attachment:
UNNotificationAttachment(identifier: <uuid>, url: <tempURL>, options: [UNNotificationAttachmentOptionsTypeHintKey: "public.jpeg"])
4. Schedule notification with a calendar trigger for the next morning.
Topic:
App & System Services
SubTopic:
Notifications
When the app kills the process. Received APNs push message. Push messages carry voice related information. At the same time as receiving the push, obtain the voice playback of this voice message. How to achieve it?
Currently working on a dating app which needs voip for audio and video calls for ios. the voip notifications only comes to the app in active and inactive mode but doesnt wake the device in background or terminated mode. After debugging i noticed that com.apple.developer.voip entitlement wasnt included which i later added, trying to create a build i get the eas error that the entitlement wasnt added to the identifier capabilities. My issue now is that i can't seem to find the voip capability to check in the identifiers capabilities list for the bundle id.d
Hi everyone,
I'm developing a custom Apple Wallet pass using a Django backend and exposing my local server through ngrok during development. For the first ~30 minutes, everything works exactly as expected: the pass registers correctly, silent push notifications trigger instant updates, Wallet immediately performs the GET request to fetch the new .pkpass, and the changeMessage displays almost instantly on the lock screen.
At some point, however, the pass stops updating entirely. Apple APNs continues to return 200 OK for every silent push I send, but the device never performs the required GET /v1/passes// call to download the updated pass. As a result, even the internal content of the pass (ex: points/balance fields) no longer updates, which confirms that Wallet is not fetching the new .pkpass at all. No changeMessage appears either.
This behavior has been described informally by other developers as Apple Wallet Pass Update Throttling, where the Wallet daemon begins ignoring silent pushes after repeated updates or certain internal conditions. I’m trying to confirm whether this is indeed throttling, what triggers it, and how to avoid it during development.
I am creating an app that uses critical messages, I have been granted this entitlement and I am adding the certificate and in the info.plist. In the app I request authorization to send messages to specific numbers. When I try the app in production from Xcode this works fine and I can send the critical messages. However, when I am using the app in the test flight the authorization does not seem to be remembered on the background. Moreover, I go to security/privacy settings and I grant permission to the selected number (I see that it only shows one number even when I have to granted, its like it removes the previous one) however when I exit the setting page the permission is reset (and therefore denied), I think this is a bug. Can you look into that. Both this removing granted permission (HIGH PRIORITY, this message can only be sent in the background, therefore the user can not grant it and why the maximum telephone number to be granted to send messages is reset also to a single one LOWER PRIORITY).
Thanks
I’m using the shielding API, my code:
let store = ManagedSettingsStore()
let whitelist = SharedDefaults.whitelistApplications
store.shield.applicationCategories = .all(except: whitelist)
And to clear the shield, my code is:
store.shield.applications = nil
store.shield.applicationCategories = nil
The issue:
Some users report that after uninstalling my app, the shield is still active, and the UI changes to the default iOS system interface. Even after restarting the device, the apps on the phone remains locked, so the user has no way to remove the shield.
Recently I’ve received several complaints on social media and App Store comments, accusing my app of being malicious software.
This is not a 100% reproducible bug, but it happens frequently enough. I was also able to reproduce it myself by uninstalling the app during an active lock session.
Could Apple engineers please look into this issue and advise how to ensure that once the user uninstalls the app, the device is no longer locked?