Blog
ENGINEERING

iOS 27 UISceneDelegate push notification deadline: What breaks and how to prepare

Mike Miller

March 19, 2026

iOS26 Push Notifications Changes

Table of contents

The full timeline

What breaks and why

Who's affected

The real risk: silent notification failure

Why this is a good time to rethink your push strategy

Your action plan

Wrapping up

Frequently asked questions

iOS 27 push notification deadline: What breaks in September 2026 and how to prepare

WWDC 2026 is coming up fast. When it arrives on June 8, Apple will release the iOS 27 SDK beta, and with it comes a hard enforcement that's been building since iOS 13: UISceneDelegate becomes mandatory.

If your app doesn't adopt the scene-based lifecycle by the time you build with the iOS 27 SDK, it won't launch. And if it doesn't launch, your push notifications go completely silent. No APNs token, no delivery, no fallback.

If you're seeing this in your Xcode console, you're on the clock:

Copied!

UIScene lifecycle will soon be required.
Failure to adopt will result in an assert in the future.

That warning started appearing in iOS 26. The "future" it's referring to is September 2026, when the final iOS 27 SDK ships alongside iPhone 18. Here's what you need to know, who's affected, and what to do about it before that deadline hits.

The full timeline

Apple has been signaling this change for years, but enforcement is arriving in stages:

DateWhat happensImpact
iOS 13 (2019)Scene-based lifecycle introducedOptional adoption
iOS 18.4 (early 2025)Console log warning for non-scene appsInformational only
iOS 26 (fall 2025)Warning escalates: "UIScene lifecycle will soon be required"Apps still work, but you're on notice
WWDC 2026 (June 8)iOS 27 SDK beta releasedEnforcement begins for apps built with the new SDK
iOS 27 (September 2026)Final SDK ships with iPhone 18Apps without scene support crash on launch

The critical detail: enforcement is tied to the SDK you build with, not the OS version running on the device. An app compiled against the iOS 26 SDK will still run on an iOS 27 device. But the moment you rebuild with Xcode 18 and the iOS 27 SDK, you need scene support or your app won't start.

This gives you a window. But that window closes the next time you need to ship an update built with the latest tools.

What breaks and why

Apple introduced UIScene to replace the single-window AppDelegate lifecycle. Scenes let each window manage its own state independently, which powers features like iPad multitasking, multiple windows, and smoother background/foreground transitions.

With iOS 27, UIKit asserts scene adoption at launch. No scene manifest in your Info.plist? The app terminates before any of your AppDelegate methods run.

Here's the chain reaction for push notifications:

  1. App crashes before AppDelegate initializes because no UISceneDelegate is found.
  2. application(_:didFinishLaunchingWithOptions:) never executes, so registerForRemoteNotifications() never fires.
  3. didRegisterForRemoteNotificationsWithDeviceToken never receives a callback, so your app never gets an APNs token.
  4. No token means no push delivery. Apple's Push Notification service has nothing to target.

Your backend, your notification service, your carefully crafted notification templates: none of it matters if the app can't start.

Who's affected

This isn't limited to developers writing native Swift or Objective-C. The UISceneDelegate requirement impacts every app that runs on iOS through UIKit.

Native UIKit apps

If your app was created before iOS 13 or uses a legacy AppDelegate-only architecture, you're directly affected. Apple's TN3187 tech note is the definitive migration reference. We also published a step-by-step migration guide that covers the exact code changes.

SwiftUI apps

You're probably fine. SwiftUI has used scenes from the start. If you're using @UIApplicationDelegateAdaptor to bridge push token callbacks (which you should be), no changes are needed.

Flutter apps

Flutter 3.41+ now supports UIScene automatically through FlutterLaunchEngine. The framework implements UISceneDelegate dynamically, so most Flutter developers don't need to manually add scene support. There's one breaking change to watch: if your app assumed UIApplicationDelegate.window.rootViewController is a FlutterViewController in didFinishLaunchingWithOptions:, you need to update to FlutterPluginRegistry APIs instead.

If you're on an older Flutter version, you'll need to upgrade before building with the iOS 27 SDK. Check Flutter's UISceneDelegate adoption guide for specifics.

React Native apps

React Native's AppDelegate template has been scene-aware since React Native 0.73+. If you're on a recent version, your generated project should already include the scene manifest. Older projects that were created before this change and never updated will need manual migration. Check your Info.plist for the UIApplicationSceneManifest key. If it's not there, you have work to do.

Xamarin / .NET MAUI

The MAUI framework handles scene configuration through its own lifecycle abstractions. If you're targeting iOS 27, confirm that your Info.plist includes the scene manifest and that your AppDelegate wires up UISceneDelegate correctly. Microsoft's documentation covers the specifics for .NET 8+.

The real risk: silent notification failure

The worst part about this deadline isn't the crash itself. Crashes are visible. You'll catch them in testing, in beta, in your crash reporting dashboard.

The real risk is the transition period. Between now and September, here's what can go wrong:

Stale tokens after rebuilding. If you rebuild your app with the iOS 27 SDK but miss the scene migration, your existing users' tokens become useless. The app crashes on launch, so it can't refresh tokens. Your backend keeps trying to send to tokens that are effectively dead, and Apple's APNs feedback service eventually marks them as invalid. By the time you fix the scene issue, you've lost your token pool and need every user to relaunch to re-register.

Inconsistent testing. Apple's own simulator produces inconsistent results for push notification registration with scene-based apps. Test on physical devices. Every time.

Third-party SDK conflicts. Some analytics and notification SDKs hook into AppDelegate lifecycle methods that behave differently (or don't fire at all) in a scene-based app. If you're using third-party push SDKs, verify their scene compatibility before you upgrade.

Why this is a good time to rethink your push strategy

Apple's scene enforcement is a forcing function. You're already going to touch your notification registration code. While you're in there, it's worth asking: is push the only channel holding up your communication with users?

Consider the numbers: push notification opt-in rates on iOS hover around 50%. That means half your users never see your push notifications to begin with. Of the half that do opt in, a meaningful percentage have Focus Mode filtering them out, are offline when the notification arrives, or have so many notifications that yours gets buried.

Push is one channel. A good notification strategy uses multiple.

Multi-channel delivery as a safety net

When push fails (whether from a scene migration issue, an expired token, or a user who opted out), having fallback channels means your notification still reaches the user:

  • Email for less time-sensitive updates, receipts, and digests
  • SMS for urgent alerts and authentication
  • In-app notifications for users who are actively using your product
  • Chat integrations (Slack, Teams, Discord) for collaborative and operational notifications

The key is that these channels shouldn't be siloed. A single notification event should be able to route intelligently across channels based on user preferences, delivery status, and urgency.

This is what Courier is built for. Instead of integrating APNs, SendGrid, Twilio, and Firebase separately (and writing the routing logic yourself), you use one API to send across all channels. Courier handles provider failover automatically. If push delivery fails, the notification routes to the next best channel without you writing conditional logic.

Automatic token management

One of the trickiest parts of push notifications is keeping tokens fresh. Courier's iOS SDK handles token lifecycle automatically through CourierDelegate. When your app registers for remote notifications, the SDK syncs the APNs token to Courier's backend without additional code. When the token refreshes (which happens more often than most developers realize), it syncs again.

With the iOS 27 scene migration, the registration flow doesn't change. didRegisterForRemoteNotificationsWithDeviceToken still lives in AppDelegate, and CourierDelegate still picks it up. You add scene support, and everything else keeps working.

User preferences baked in

Here's another angle: if you're updating your app for iOS 27 compatibility anyway, it's a good moment to add a notification preference center. Users who control their notification experience opt out less and engage more. Courier's preference management gives you this out of the box: per-channel preferences, per-notification-type preferences, and quiet hours, all without building a custom settings UI.

Your action plan

Here's what to do, in order, before September 2026:

Now (March-May 2026)

  1. Audit your Info.plist. Does it include the UIApplicationSceneManifest key? If not, you need to migrate. If you're on Flutter 3.41+ or a recent React Native version, check that the auto-generated manifest is present.

  2. Check your Xcode console. Build and run your app with iOS 26. If you see "UIScene lifecycle will soon be required," you need to act.

  3. Inventory your third-party SDKs. List every SDK that hooks into AppDelegate lifecycle methods, especially push notification SDKs. Verify each one supports scene-based apps.

  4. Test push registration on a physical device. Don't trust the simulator. Confirm that your APNs token is issued and that notifications arrive end to end.

June 2026 (WWDC week)

  1. Download the iOS 27 beta SDK on day one. WWDC keynote is June 8. The beta drops the same afternoon. Build your app with it immediately and confirm it launches.

  2. Watch for new push APIs. Apple may introduce scene-based equivalents for push callbacks. Even if they don't, the session videos will clarify any additional changes.

July-August 2026

  1. Run through the public beta cycle. Test on multiple devices and OS versions. Pay special attention to push token registration, background delivery, and notification display.

  2. Consider adding multi-channel fallback. If push is your only notification channel, this is the time to add email or in-app as a backup. Courier's multi-channel routing can get you there in a day, not months.

September 2026

  1. Ship your updated app before the iOS 27 GM. Don't be the team scrambling on launch week.

Wrapping up

The iOS 27 UISceneDelegate deadline isn't a surprise. Apple has telegraphed it since 2019 and escalated warnings over the past year. But "not a surprise" doesn't mean "not a big deal." If your app doesn't adopt scenes before you build with the iOS 27 SDK this September, it won't start, and your push notifications die with it.

The migration itself is straightforward for most apps. Add a scene manifest, create a UISceneDelegate, keep your AppDelegate for push callbacks. Cross-platform frameworks like Flutter and React Native have already shipped scene support in recent versions.

The deeper question is whether push should be your only channel. Token management, opt-in rates, Focus Mode, and platform changes like this one all create points of failure. A multi-channel approach, where push is one delivery method alongside email, SMS, and in-app, makes your notification strategy resilient to exactly this kind of platform shift.

If you want to get multi-channel notifications running without months of integration work, Courier's API handles routing, failover, and token management across every channel. It's one integration instead of five, and it keeps your notifications flowing even when Apple moves the goalposts.


Frequently asked questions

Will my existing app stop working on iOS 27?

Not automatically. Enforcement is tied to the SDK you build with, not the OS version on the device. An app compiled against the iOS 26 SDK will still run on iOS 27. But the next time you rebuild with Xcode 18 and the iOS 27 SDK, your app needs scene support or it won't launch.

Does UISceneDelegate affect push notifications?

Yes. If your app crashes on launch because it's missing scene support, registerForRemoteNotifications() never fires. That means no APNs token is issued, and Apple's Push Notification service has nothing to target. Your push notifications go completely silent with no fallback.

Do Flutter and React Native apps need to change anything?

Flutter 3.41+ handles scene support automatically through FlutterLaunchEngine. React Native 0.73+ includes the scene manifest in its default AppDelegate template. If you're on a recent version of either framework, you're likely covered. Older projects that were created before these changes will need manual migration.

When exactly does iOS 27 enforcement start?

The iOS 27 SDK beta drops on June 8, 2026 (WWDC). Enforcement begins the moment you build with that SDK. The final iOS 27 SDK ships in September 2026 alongside the new iPhone.

What should I do right now?

Check your Info.plist for the UIApplicationSceneManifest key. If it's not there, you need to migrate. Build and run with iOS 26 in Xcode and look for the console warning: "UIScene lifecycle will soon be required." If you see it, start the migration now rather than waiting for WWDC.


Related resources:

Similar resources

mcp vs cli for ai agents
Engineering

Your AI agent already knows how to use a terminal. Why CLIs beat MCP servers

LLMs already know how to use a terminal. We maintain both an MCP server and a CLI at Courier, and the difference tells you something about where AI tooling is heading.

By Mike Miller

March 13, 2026

EU data residency and translations and gdpr
EngineeringCourier

EU Data Residency for Notifications: What Engineering Teams Need to Know

Courier supports EU data residency through a dedicated datacenter in AWS EU-West-1 (Ireland), with full API feature parity, same-workspace dual-region access, built-in GDPR deletion endpoints, and localization support for multilingual notifications. Engineering teams can switch to EU hosting by changing a single base URL with no workspace migration or downtime required.

By Kyle Seyler

March 09, 2026

courier and expo push notifications
GuideEngineering

Expo Push Notifications: The Complete Implementation Guide (SDK 52+)

Expo push notifications are alerts sent from a server to a user's phone, even when the app isn't open. To set them up, install the expo-notifications library, ask the user for permission, and get a unique push token for their device. Your server sends a message to Expo's push service with that token, and Expo delivers it through Apple or Google. Push notifications only work on real phones, not simulators. Local notifications are different — they're scheduled by the app itself for things like reminders. You can also route Expo push through services like Courier to add email, SMS, and Slack fallbacks.

By Kyle Seyler

February 24, 2026

Multichannel Notifications Platform for SaaS

Products

Platform

Integrations

Customers

Blog

API Status

Subprocessors


© 2026 Courier. All rights reserved.