If I run the following code in didFinishLaunchingWithOptions()
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { granted, error in
if granted {
DispatchQueue.main.async {
application.registerForRemoteNotifications()
}
}
}
Then the result is that didRegisterForRemoteNotificationsWithDeviceToken() gets called.
However if I change the code to be just:
DispatchQueue.main.async {
application.registerForRemoteNotifications()
}
Or as as its already running on main in this scenario, then just
application.registerForRemoteNotifications()
Then didRegisterForRemoteNotificationsWithDeviceToken() does NOT get called, but also neither does didFailToRegisterForRemoteNotificationsWithError().
Obtaining a push token is supposed to be independent of the user granting notifications permissions, so why am I not observing that behavior?
I only observe this behavior when running on hardware, when running on the simulator both forms of the code work.
Yet its nothing to do with my phone not being able to contact the Apple servers etc. - if I change the code back and forth back and forth between the two then if 100% works when using requestAuthorization() and 100% doesn't when not using it.
There's nothing additional or out of the ordinary with the code, its standard app delete template stuff.
Why isn't it getting a push token when requestAuthorization() isn't used?
(I've tried adding an async delay to calling registerForRemoteNotifications(), but it made no difference).
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
When setting a custom sound in AlarmKit, the alarm only plays the audio file once. I can understand why push notifications would play a sound only once, but I don’t understand why alarms can only play the sound for less than 30 seconds. We’re already at beta 6, so I’m wondering if Apple still hasn’t fixed this or if they have no intention of fixing it.
Topic:
App & System Services
SubTopic:
Notifications
I'm encountering an issue with our legacy Objective-C codebase that uses UIApplicationDelegate.
Here are the steps to reproduce the issue:
Uninstall the application from the device.
Install and launch the application.
As part of the launch event, the client requests notification permission.
The permission prompt is still displayed, even though the client receives a remote notification token (which appears to be a cached one).
I followed the same steps with a sample app built with Swift (SwiftUI), and this issue did not occur. In the Swift app, I consistently received a delegate<didRegisterForRemoteNotificationsWithDeviceToken> call after the user allowed the notification permission.
Could you please provide some insights into why this might be happening with only our client?
Topic:
App & System Services
SubTopic:
Notifications
Tags:
APNS
iOS
Notification Center
User Notifications
I created my app. One of its functionality is receive remote notification in the background (it receives it from Firebase Cloud Messaging via APNS) and replies with device location data. This is "boat tracking and alarm" type of app.
It worked well both on my iPhone (where I use the same Apple ID as on developer's account) and on my son's iPad (different Apple ID). After the first review, when app was rejected with some remarks, background remote notifications completely stopped working on my iPhone. It looks like my iPhone put the app in permanent sleep. It never receives the background notifications. It receives them though in 2 case:
when I open the app (it is no longer in background)
when location is changed (it wakes app in the background). But the app should also respond when the device is stable at the position (I use both: precise and Significant Location Change. In the latter case changes are very rare). Btw, I scheduled a background task, not location, and it also never gets executed, so this workaround does not work.
I describe it, so any Apple engineer does not get confused, verifying that these remote notifications reach the device. NO, they never get through when app is in the background (THIS IS THE PROBLEM), not that they are never delivered (the are, in the foreground). And the proof that it is not a problem with the app or remote notification construction is:
they work on another drives (iPad) with no issues. Sometimes they are very delayed, sometimes almost instant. But usually they work.
they worked the same way on my iPhone (with my developer's Apple ID) before the first rejection, and I haven't messed with messaging functionality since then.
Now I am over with the last hope I had. I finally got my app release in App Store. I hoped official version would release some blockade my iOS put on my app. But unfortunately not. Official version works the same way as the test one. It works fine (receiving notifications in the background) on my son's iPad and it does not receive any background notification on my iPhone (100% block rate).
Can anyone help me how can I reset my apps limits, the iOS created for my app? It seems that the rejection was a sparkle here - this is just a hint. I can provide any system logs for Apple engineers from both devices (iPhone and iPad) if you would like to check this case.
I created an APNs Auth Key in the Apple Developer portal and downloaded it successfully once.
Later, due to some issues, I revoked that key.
After that, I created a new APNs Auth Key.
The download button appears, but when I click it, I get the message:
"Auth Key can only be downloaded once. This auth key has already been downloaded."
This is incorrect because:
The key is newly created in my account.
I have tried multiple browsers (Safari, Chrome), private/incognito mode, and even a different laptop.
I have no other active APNs Auth Keys in my account.
Without this .p8 file, I cannot configure push notifications for my iOS app (using Firebase Cloud Messaging).
This is blocking my production release.
Has anyone else experienced this? Is there a way to reset or force a fresh APNs Auth Key when this happens?
I have three apps with a very low user rate, so it's easier to compare.
In all three apps, when I send a notification to APNs, over two-thirds receive a "Stored - Device Offline" status, but only one or two notifications are delivered afterward.
No message has been sent after that.
The total number of recipients is 89;
26 were delivered to the device, and 62 were stored in APNs.
One was delivered from storage, and one was discarded.
All app users are located in the same region, and mobile internet or Wi-Fi is available everywhere.
I can't believe that so many iPhone users aren't getting connected to APNs to receive the stored message. Or are event not connected.
Or are there any other reasons why a notification cant be transmitted. (User beahaviour, time of not using the app or something else?)
My iPhone VoIP app, which I'm developing, uses Apple Push Notification service (APNs).
I have a question regarding the following statement found in "[Overview of app transfer > Apps using push notifications]"
Overview of app transfer
You must manually reestablish push notification services if transferring an app that uses
the Apple Push Notifications service (APNs). The recipient must create a new client
SSL certificate using their developer account, as associated client SSL certificates,
TLS certificates, and authentication tokens aren’t transferred.
Question
Let's say the recipient of the app transfer creates a "new SSL certificates, TLS certificates, and authentication tokens."
Afterward, we need to verify that the Apple Push Notification service (APNs) works correctly when combining the transferred app with this "new SSL certificates, TLS certificates, and authentication tokens."
However, until the recipient finishes verifying that it works correctly, the transferor want to keep the app available for download as before and be able to use the Apple Push Notification service. Is this possible?
More specifically, can the recipient test the app to be transferred on TestFlight "before the transfer is completed"?
I want to combine it with the "new SSL certificates, TLS certificates, and authentication tokens." and test it on TestFlight.
Reading "[Initiate an app transfer]," it mentions the existence of a "Pending App Transfer" status.
During this "Pending App Transfer" status, can the recipient test the app on TestFlight?
Initiate an app transfer
After you initiate the transfer, the app stays in its previous status, with the Pending App Transfer status added, until the recipient accepts it or the transfer expires after 60 days.
Also, if there are any documents describing these procedures, I would appreciate it if you could share them.
Thank you very much.
Topic:
App & System Services
SubTopic:
Notifications
Tags:
APNS
App Store Connect
TestFlight
PushKit
Approx Dec 13th 2025 til now (Dec 29th) I noticed my APNS dropped off to nothing daily. When I try to send APNS alerts on the developer site tool it always returns "discarded as device was offline" for multiple devices which I know are online.
When I try pushing through my VPS (as I always have without any code changes for months) I get status codes of 400 and 403 mostly and a few 200's without it delivering also.
I created a new sandbox certificate just in case it was that but still no luck, I get the same results. Ive checked for any firewall issues and I see the following on my VPS:
nslookup gateway.push.apple.com
Server: 1.1.1.1
Address: 1.1.1.1#53
** server can't find gateway.push.apple.com: NXDOMAIN
This seems like a second issue but not the primary issue that the portal is reporting.
Any ideas what to check? Im at a loss as to why its not working at all through apples test notification portal on my developer account. It seems thats the initial issue I need to solve.
Thank you for any ideas/help
I am looking for advice for debugging a wallet pass not updating for some customers after successfully posting an APNS notification (pass identifier as topic, no expiration, priority 10).
Is there an exhaustive list of reasons for a wallet pass not updating or a guide for making sure updates happen reliably? Are there are any guarantees made as to when the pass is updated? We noticed it is either never updating or the update happens much later for some customers. Usually toggling "Automatic Updates" in Pass Details updates the pass immediately for affected customers.
Can it be caused by an error in the implementation of the Wallet Passes Web Service? We generate passes on the fly as a response to /v1/passes/{passTypeIdentifier}/{serialNumber}. I noticed that we also sometimes receive HEAD requests to this endpoint despite the documentation only mentioning the GET method. I was previously returning a HTTP status code 405 (Method Not Allowed). I have now updated it to also respond with headers (Content-Type, Content-Disposition and Last-Modified) for the pass for HEAD requests, but I don't know if it makes a difference.
Here is a list of issues on the customer side I was thinking of:
No connection to the internet
Low power mode (does it prevent or throttle updates?)
What happens if there is an error? Does it keep trying or does it just fail silently? In the latter case it might make sense to keep sending APNS notifications until the pass is requested successfully.
I know that you can use the PassKit framework in iOS apps to update (replace) passes. Would this be more reliable than a stand-alone Wallet pass?
I am an iOS development engineer. Recently, I updated the Xcode version to 16.1 (16B40) and updated my debugging device (iPhone 15) to iOS 18.1.1. However, I found that I could not respond to the delegate method.
I confirmed that my code, certificate, Xcode settings, and network environment had not changed. Simply executing
application.registerForRemoteNotifications()
in
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool
did not receive a response(didRegisterForRemoteNotificationsWithDeviceToken or didFailToRegisterForRemoteNotificationsWithError ).
In the same environment, when I switched to another device for debugging (iOS 17.0.3), the delegate method would respond.
I really don't know what to do, I hope someone can help me, I would be very grateful.
Please note: Everything is normal when using devices before iOS 18.1.1 version
I'm facing an issue delivering VoIP push notifications to user devices. It's pretty random, sometimes notifications are delivered and sometimes not. I've had a call with the user to understand and narrow down the issue, including testing delivery of pushes to their device token via Push Notification Console as described here: https://developer.apple.com/documentation/usernotifications/testing-notifications-using-the-push-notification-console#4181180.
I asked a user to use Wi-Fi first and tried delivering around 10 pushes via console and 2 of them were lost while the rest was delivered.
I asked a user to use cellular and tried delivering also around 10 pushes and most of them were lost and only few of them were delivered.
Production environment was used to deliver pushes hence I cannot see delivery log and so I have no visibility over a reason why push wasn't delivered.
I wanted to file a code-level support ticket to get help however I need to supply a sample xcode project which in this particular case doesn't make any sense as I'm using Apple's Push Notification Console tool and it delivers pushes in some cases while doesn't deliver it in other cases.
I'm pretty familiar with all potential reasons why push might not be shown on device, including app early crashes, not reporting a call to CallKit etc. => although you never know, I'm pretty sure it's not our case.
How can I get support on investigating specific user device token delivery issues like in the case I described above? I have device token and push console records but it's not clear how to get support on that.
Thank you!
Hello everyone,
Our team is currently developing a PTT (Push-to-Talk) application using the officially recommended PushToTalk framework. During development, we've encountered a point of confusion regarding the application's behavior after being force-quit by the user.
Based on our understanding of the PushToTalk framework documentation (https://developer.apple.com/documentation/pushtotalk/creating-a-push-to-talk-app/) and the PTChannelManager session restoration mechanism, when a user manually kills the app from the background (App Switcher), the current PTT session (the system session managed by PTChannelManager) should terminate. Subsequent pushtotalk type pushes sent via APNS, without an active session, appear to be silently discarded by the system and cannot wake the app for processing (similar to what Kevin Elliott DTS mentioned in https://developer.apple.com/forums/thread/760506 Point D). This seems to prevent reliable PTT message reception in our app after a user force quits.
However, we've observed that some popular PTT applications on the market (e.g., TenTen) appear to successfully receive and play PTT voice messages from friends even after the user has performed a force-quit action. This behavior seems inconsistent with our test results and understanding based on the standard framework, posing a challenge for us in providing similar reliability using standard methods.
This naturally leads us to wonder how this capability is achieved. We've reviewed developer forums and are aware of the historical existence of a PTT-specific com.apple.developer.pushkit.unrestricted-voip entitlement, which allowed PushKit usage for PTT without CallKit binding. While Apple DTS engineers have repeatedly stated this entitlement is being deprecated and urged migration to the PushToTalk framework (e.g., https://developer.apple.com/forums/thread/763289), we are curious if the observed "wake-after-force-quit" capability might be related to some apps potentially still utilizing this outgoing special entitlement. Alternatively, is there perhaps a mechanism within the standard PushToTalk framework that allows wake-up after force quit that we haven't fully grasped?
Therefore, we'd like to ask fellow developers for clarification and discussion:
When using the standard PushToTalk framework, have others confirmed that the app indeed cannot be woken up by pushtotalk pushes after being force-quit by the user? Is this the expected behavior?
Has anyone successfully achieved a TenTen-like experience (reliable PTT reception after force quit) using only the standard PushToTalk framework? If so, could you share key implementation insights or areas to focus on? (e.g., Is it related to specific usage patterns of the restorationDelegate?)
How do you view this potential discrepancy between standard framework capabilities and the behavior exhibited by some apps? What considerations does this bring to development planning and user experience design (especially when users might have expectations set by the "always-on" behavior of other apps)?
Are there any best practices or specific techniques when using PTChannelManager session management and restoration that maximize PTT message reliability (especially after the app is terminated by the system in the background), while still adhering to the framework's design principles (like user awareness of the session via UI)? [For instance, another developer raised challenges related to PTT framework restrictions here: https://developer.apple.com/forums/thread/773981]
We hope this discussion can help clarify our understanding of the framework and gather community best practices for building reliable PTT functionality while adhering to Apple's guidelines.
Thanks for any insights or shared experiences!
Hi there,
This is my first time posting here. I'm working on small projects on Swift and SwiftUI now and then. I'm currently trying to develop an application that gets some bus arrival data using API and displaying them with live activities. The thing is that I'm not quite sure how frequently updates work yet. Still trying to figure out if I can update the live activity everytime the data coming right from the API changes or use push notification updates each minute passing by, but that is another thread that I'm going to focus with more details.
Everytime i'm trying to deploy my app on my iphone or a simulator this error keeps popping up and I can't figure out why.
Any ideas? Let me know if you need any snippet of my code.
SendProcessControlEvent:toPid: encountered an error: Error Domain=com.apple.dt.deviceprocesscontrolservice Code=8 "Failed to show Widget 'com.gregorikouk.MapKitTut.BusWidgetKit' error: Error Domain=FBSOpenApplicationServiceErrorDomain Code=1 "The request to open "com.apple.springboard" failed." UserInfo={NSLocalizedFailureReason=The request was denied by service delegate (SBMainWorkspace)., BSErrorCodeDescription=RequestDenied, NSUnderlyingError=0xb1282dfe0 {Error Domain=SBAvocadoDebuggingControllerErrorDomain Code=1 "Failed to get descriptors for extensionBundleID (com.gregorikouk.MapKitTut.BusWidgetKit)" UserInfo={NSLocalizedDescription=Failed to get descriptors for extensionBundleID (com.gregorikouk.MapKitTut.BusWidgetKit)}}, FBSOpenApplicationRequestID=0xe5da, NSLocalizedDescription=The request to open "com.apple.springboard" failed.}." UserInfo={NSLocalizedDescription=Failed to show Widget 'com.gregorikouk.MapKitTut.BusWidgetKit' error: Error Domain=FBSOpenApplicationServiceErrorDomain Code=1 "The request to open "com.apple.springboard" failed." UserInfo={NSLocalizedFailureReason=The request was denied by service delegate (SBMainWorkspace)., BSErrorCodeDescription=RequestDenied, NSUnderlyingError=0xb1282dfe0 {Error Domain=SBAvocadoDebuggingControllerErrorDomain Code=1 "Failed to get descriptors for extensionBundleID (com.gregorikouk.MapKitTut.BusWidgetKit)" UserInfo={NSLocalizedDescription=Failed to get descriptors for extensionBundleID (com.gregorikouk.MapKitTut.BusWidgetKit)}}, FBSOpenApplicationRequestID=0xe5da, NSLocalizedDescription=The request to open "com.apple.springboard" failed.}., NSUnderlyingError=0xb1281d830 {Error Domain=FBSOpenApplicationServiceErrorDomain Code=1 "The request to open "com.apple.springboard" failed." UserInfo={NSLocalizedFailureReason=The request was denied by service delegate (SBMainWorkspace)., BSErrorCodeDescription=RequestDenied, NSUnderlyingError=0xb1282dfe0 {Error Domain=SBAvocadoDebuggingControllerErrorDomain Code=1 "Failed to get descriptors for extensionBundleID (com.gregorikouk.MapKitTut.BusWidgetKit)" UserInfo={NSLocalizedDescription=Failed to get descriptors for extensionBundleID (com.gregorikouk.MapKitTut.BusWidgetKit)}}, FBSOpenApplicationRequestID=0xe5da, NSLocalizedDescription=The request to open "com.apple.springboard" failed.}}}
Domain: DTXMessage
Code: 1
User Info: {
DVTErrorCreationDateKey = "2023-10-02 21:06:04 +0000";
}
--
System Information
macOS Version 14.0 (Build 23A344)
Xcode 15.0 (22265) (Build 15A240d)
Timestamp: 2023-10-03T00:06:04+03:00
Topic:
App & System Services
SubTopic:
Notifications
Tags:
APNS
Notification Center
WidgetKit
ActivityKit
I am developing a system to send VoIP notifications to terminals with APNs.
I understand that the maximum JSON Payload for VoIP is 5kb.
If I want to send VoIP notifications to 3000 terminals, I am considering sending 3000 requests in parallel from the system to the APNs, will the APNs guarantee that the notifications will be sent to each terminal without a significant time lag when receiving 3000 requests simultaneously?
Could anyone play a sound from the Library/Sounds directory using alarmkit? Same file can play in app bundle, but not available in Library/Sounds directory. Is this by design?
Topic:
App & System Services
SubTopic:
Notifications
ISSUE:
CloudKit subscriptions are not triggering push notifications despite correct configuration. CloudKit logs show RecordSave events but NO NotificationSend events, indicating CloudKit is not attempting to send to APNS.
CONTAINER:
iCloud.Wunderkind.StrikeForceApp
ENVIRONMENT:
Tested in both Development and Production
iOS 18.6.x
Xcode 15.x (update with your version)
Device: iPhone (not simulator)
EVIDENCE:
Subscriptions exist and are visible in CloudKit Dashboard
Records are being created successfully (verified in logs)
Device token is registered: 60eb962ff189dc5c2c0ef3e9d6643d72b4442a831bae224d2a553588b2e29139
Local notifications work correctly
CloudKit logs show RecordSave but NO NotificationSend events
STEPS TAKEN:
Regenerated push certificates
Disabled and re-enabled Push Notifications capability
Deleted and recreated subscriptions
Tested in both Development and Production environments
Verified aps-environment entitlement matches environment
Confirmed notification permissions granted
SPECIFIC TEST:
Creating a Challenge record with recipientRef matching my user triggers:
✅ RecordSave event in CloudKit logs
❌ No NotificationSend event
❌ No push notification received
EXPECTED:
CloudKit should send NotificationSend events and deliver push notifications when subscriptions match.
ACTUAL:
No NotificationSend events appear in CloudKit logs, no notifications delivered.
I am developing a VoIP service.
Usually, when receiving a VoIP Push, Callkit is exposed immediately after receiving the message and the app is designed to be used.
However, there is an extremely intermittent phenomenon (not well reproduced) where the app does not wake up even when receiving a VoIP Push. And after a long time, the app wakes up and Callkit is activated. (A long time after receiving the call…)
Has anyone experienced the above phenomenon? I wonder if there are any reported parts depending on the OS version. (I have identified that it does not occur in the 17.x version, but it is difficult to guarantee because it occurs extremely intermittently)
The app is not running in the background, but... Could this be happening if there are a lot of pending operations in the background?
I need help urgently
Hi there,
Thank you for the framework 🙏
if I use Alarm.Schedule.Relative with Alarm.Schedule.Relative.Time(hour: hour, minute: minute) and Alarm.Schedule.Relative.Recurrence.never it seems like there is some (odd?) limit where alarm will get scheduled to next day if too close?
For example, lets say the current time is 12:00 PM, if I schedule alarm for 12:02 PM, it will schedule it for next day, while if I do 12:05 PM it will work as expected.
Is that expected? If yes, what's the behavior and is that documented anywhere?
I would expect any alarm thats scheduled in the future to fire for the current day (maybe if it's only 1 minute it gets tricky).
One problem is also that even if the framework says an alarm is scheduled, I don't have access to the "next alarm date"? I wish I did as otherwise I have to compute it (by "guessing" the AlarmKit calculation) if I want to do anything with that date.
Honestly, sometimes I think I am just going crazy when the alarm doesn't fire, but there SEEMS to be some odd behavior around this?
(of course, feel free to correct me on anything - I could be missing documentation or not understanding something)
Topic:
App & System Services
SubTopic:
Notifications
I am unable to connect to APNs sandbox push endpoint from our backend servers. It works fine when hitting the request from my local machine but it fails from the infra servers. Here are the complete curl details.
Endpoint: https://api.sandbox.push.apple.com:443
CURL request and response:
curl -v https://api.sandbox.push.apple.com:443
Trying 17.188.168.149:443...
Connected to api.sandbox.push.apple.com (17.188.168.149) port 443
ALPN: curl offers h2,http/1.1
Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
TLSv1.2 (OUT), TLS handshake, Client hello (1):
CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to api.sandbox.push.apple.com:443
Closing connection
curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to api.sandbox.push.apple.com:443
There are no issues with Production endpoint.
Can someone help? Verified all certificates. Everything worked fine until 29th July but started failing since 30th July
We are currently developing a WebAPI service that uses APNs (HTTP/2) to send push notifications to iOS devices.
(Using PushSharp's HTTP/2 support)
The WebAPI service is running on IIS using .net framework 4.8 and c#.
The connection to APNs is always maintained, and the connection is checked every 30 minutes using a dummy token Ping.
KeepAlivePeriod = 30 minutes and KeepAliveRetryPeriod = 10 seconds have also been set.
However, the following issues are occurring.
Although the Ping sent immediately before was successful, a TimeoutException occurs in the notification request sent a few minutes later.
There is no explicit disconnection notification from APNs, and the connection appears to be silently disconnected.
Once a TimeoutException occurs, it occurs frequently afterwards.
Below is an excerpt from the log.
Apple Notification Failed for some unknown reason 1-1: One or more errors occurred.
Apple Notification Failed for some unknown reason 1-2:System.TimeoutException: The operation timed out.
In light of this issue, I would like to be advised on the following two points.
Are there any official specifications regarding the lifecycle and expiration date of APNs HTTP/2 connections?
Even if pings are sent periodically, is there a timeout or other setting that disables the connection on the APNs side?
What are the conditions that would cause APNs to silently terminate a connection?
For example, could this be due to inactivity, TLS restrictions, network maintenance, etc.?
If you have any official documentation or technical guidelines to improve the reliability of this system, we would appreciate it if you could share them with us.
Thank you in advance.