Prompt
How do I debug iOS push notifications after an app update?
Latest observation
Here’s a practical checklist for debugging iOS push notifications after an app update, since updates often change entitlements, tokens, app state, or server payload assumptions.
1) Confirm the app is still authorized for notifications
After an update, verify:
- Notification permission is still granted
- Focus / Do Not Disturb / Scheduled Summary isn’t suppressing alerts
- The app still has the correct Push Notifications capability in Xcode
- The provisioning profile matches the app’s current bundle ID
On-device:
- Settings → Notifications → your app
- Make sure alerts, sounds, badges are enabled
2) Check the push token didn’t change
An app update can sometimes cause the device token to be reissued. Make sure your app:
- Calls
registerForRemoteNotifications() - Logs
didRegisterForRemoteNotificationsWithDeviceToken - Sends the latest token to your backend
If your backend is still using an old token, pushes may stop working.
3) Inspect your backend APNs response
If you use APNs directly, log the response status and reason.
Common issues:
BadDeviceTokenUnregisteredTopicDisallowedDeviceTokenNotForTopicPayloadTooLargeMissingTopic
If you use Firebase Cloud Messaging, inspect FCM delivery logs and the APNs bridging config.
4) Verify APNs environment matches the build
A frequent issue after updates is sending to the wrong APNs environment:
- Development build → APNs sandbox
- App Store/TestFlight/production build → APNs production
If your server is using the wrong APNs endpoint or certificate/key setup, pushes won’t arrive.
5) Test with a minimal payload
Send a simple push first:
{
"aps": {
"alert": {
"title": "Test",
"body": "Hello"
},
"sound": "default"
}
}
Then test without custom fields, silent flags, or rich media to isolate issues.
6) Check whether the app is receiving but not displaying
Sometimes the notification is delivered but your code suppresses it.
If you use:
UNUserNotificationCenterDelegate- a custom notification handler
- foreground presentation logic
make sure your app still calls:
completionHandler([.banner, .sound, .badge])
for foreground notifications if you want them shown.
7) Look for app lifecycle changes after the update
An update may have changed:
- App group identifiers
- Notification service extension
- Notification content extension
- Background modes
- Bundle ID / team ID
- Firebase/APNs config files
Also check if the app now asks for permission later, or only after a user action.
8) Validate silent push behavior separately
If you rely on silent pushes:
- Ensure payload includes
content-available: 1 - APNs headers are correct:
apns-push-type: backgroundapns-priority: 5
- Background App Refresh must be enabled
- iOS may throttle silent pushes
Silent pushes are less reliable than visible alerts.
9) Check device logs with Console
Use macOS Console.app while the device is connected, or Xcode’s device logs.
Filter for:
- your app name
apsdpushUNUserNotificationCenter
This can reveal token registration issues, delivery failures, or permission problems.
10) Confirm the notification payload is valid
If the update changed backend payload formatting, look for:
- invalid JSON
- missing
aps - incorrect
mutable-content - bad
thread-id - malformed
category - wrong
content-availableusage
11) If using Notification Service Extension, verify it still works
If you modify payloads in a service extension:
- Confirm the extension target is included in the build
- Check its entitlement and bundle ID
- Make sure it finishes before the timeout
- Inspect logs from the extension separately
A broken extension can cause notifications to fail to display correctly.
12) Rule out token invalidation or reinstall issues
An update can behave differently from a fresh install. Test:
- Existing install → update
- Delete app → reinstall
- Device reboot
- Toggle notification permission off/on
If reinstall fixes it, the issue is likely token, backend registration, or cached state.
Quick debugging sequence
If you want the fastest path:
- Confirm notification permission
- Log the current APNs token
- Verify backend is using that token
- Send a minimal APNs payload
- Check APNs response/error
- Inspect device Console logs
- Test with app deleted and reinstalled
If you want, I can also give you:
- a Swift code snippet to log push registration and notification callbacks, or
- an APNs troubleshooting checklist for server-side debugging.