All articles

Mobile8 min read

Expo, iOS 27, macOS 27 and Xcode 27: what changes for your app

Xcode 27 requires the UIScene life cycle, or your Expo app won't launch. Here's what changed, what breaks and how to upgrade before the April 2027 deadline.

Written by Balekage Gael

Apple shipped iOS 27, macOS 27 and Xcode 27 this September. For most apps, updating is routine. For React Native apps built with Expo, there's one change you can't skip: apps built with Xcode 27 must use the UIScene life cycle, or they don't launch.

Here's what changed, what breaks, and how to upgrade as of late September 2026.

The timeline

WhenWhat
30 June 2026Expo SDK 57 ships with React Native 0.86
9 September 2026App Store opens submissions built with the Xcode 27 Release Candidate
14 September 2026iOS 27 is released to everyone
September 2026Expo SDK 57.0.23 adds opt-in Xcode 27 support; SDK 58 beta (React Native 0.88 RC) is built for iOS 27
April 2027App Store uploads must be built with the iOS 27 SDK

That last line is the real deadline: after April 2027, you can't ship an update without Xcode 27 so every Expo app has to get through this change.

What breaks: the UIScene life cycle

With Xcode 27, UIKit requires the scene-based life cycle. Apps generated by older Expo SDKs still create their window in the AppDelegate, so when you build them with Xcode 27 they crash on launch with:

Application failed to launch: UIScene life cycle is required for apps built with this SDK

The fix depends on your SDK.

SDK 58: nothing to do

SDK 58 uses the scene-based life cycle by default. Prebuild generates a SceneDelegate.swift and the scene manifest in Info.plist, and the window is created by the scene delegate. SDK 58 is in beta at the time of writing:

npx expo install expo@next --fix

SDK 57: turn it on

From expo@57.0.23, scene support is an opt-in build property. Update expo and expo-build-properties, then enable it in app.json:

{
  "expo": {
    "plugins": [
      ["expo-build-properties", { "ios": { "enableSceneSupport": true } }]
    ]
  }
}

Then regenerate the native iOS project:

npx expo prebuild --clean

SDK 56 or older: upgrade first

There's no scene support below SDK 57. Upgrade one SDK at a time (for example 55 → 56 → 57), running npx expo install --fix at each step and testing before moving on. Skipping versions makes breaking changes much harder to track down.

If you've added your own native code to the AppDelegate that touches the window, move it to the scene delegate that's where the window lives now.

Xcode 27: new tools

  • Device Hub replaces Simulator.app. SDK 58 adds an expo-device-hub dev tools plugin to control devices from the browser.
  • iPhone apps are resizable by default. Don't assume a fixed screen size: use flexbox, safe-area insets and useWindowDimensions, and test your layouts at different sizes.
  • EAS Build: when SDK 58 beta was announced, EAS images with Xcode 27 were "coming soon" (the latest was Xcode 26.6). Check the EAS changelog before relying on cloud builds for iOS 27.

macOS 27: Apple silicon only

macOS 27 runs only on Apple silicon. macOS 26 is the last version for Intel Macs and the last with Rosetta. If you build iOS apps locally on an Intel Mac, plan the move now to an Apple silicon Mac, or to EAS Build in the cloud.

iOS 27: Liquid Glass, refined

iOS 27 refines Liquid Glass with more uniform refraction and better contrast, and lets users choose between clearer or more tinted glass. For Expo apps:

  • expo-glass-effect reports isLiquidGlassAvailable() as true in apps built with the iOS 27 SDK.
  • Native tabs are stable in SDK 58 import them from expo-router/native-tabs.
  • Expo UI adds iOS navigation components: NavigationStack, Toolbar, NavigationLink and NavigationDestination.

I cover Liquid Glass in detail in Liquid Glass in React Native with Expo.

Other SDK 58 changes to check

  • Android: R8 is enabled by default in release builds test release builds, not just debug.
  • expo-file-system: File.write() is now async and returns a promise add await.
  • TypeScript: React Native's strict TypeScript API is on by default, so deep imports from react-native/... become type errors.

Upgrade checklist

  • Know your current SDK and plan one-SDK-at-a-time upgrades to 57 or 58
  • On SDK 57, enable enableSceneSupport and run npx expo prebuild --clean
  • Move any custom window code from the AppDelegate to the scene delegate
  • Build with Xcode 27 and launch on an iOS 27 device
  • Test layouts with resizable iPhone windows
  • Check your build machine: Apple silicon Mac or EAS Build
  • Ship before April 2027

Sources

Reviews & comments

0 comments

Leave a review

Your rating

No comments yet. Be the first to share your thoughts.