GitHub project

iOS 27 & UIScene support

customerio-expo-plugin 3.9.0 is ready for the scene lifecycle in Expo SDK 58. Stable Expo SDK 57 apps keep the AppDelegate path.

customerio-expo-plugin 3.9.0 is ready for the scene lifecycle that Expo SDK 58 generates. Expo SDK 58 is currently pre-release. Stable Expo SDK 57 apps keep the AppDelegate path and don’t need a scene-related Customer.io change.

After Expo SDK 58 is available as a stable release, use customerio-expo-plugin 3.9.0 and its required customerio-reactnative 6.9.0 peer. The plugin configures the native Customer.io bridge.

What changes on the scene path:

  • Deep link readiness: Register your router before routing becomes ready. With native auto-initialization, call CustomerIO.setDeepLinkRoutingReady() after the router is ready. With JavaScript initialization, register the router before CustomerIO.initialize(...); initialization marks routing ready automatically. Cold-start notification destinations arrive as Linking url events, not through Linking.getInitialURL(). Expo Router apps shouldn’t add a second navigating listener.
  • Killed-state deep links: handleDeeplinkInKilledState is the legacy AppDelegate workaround for Expo SDK 53–57. The plugin doesn’t inject it on the scene path because scene routing replaces it.
  • Live Activities: AppDelegate tap handling moves to JavaScript. Process URLs once with CustomerIO.liveActivities.handleWidgetUrl(path). Use app/+native-intent.tsx for Expo Router, or your central Linking pipeline otherwise.

Below Expo SDK 58, the plugin keeps the AppDelegate path and no change is required.

See the iOS 27 UIScene migration guide for full steps and a verification checklist.

Updated August 28, 2026