[Xcode 27] Mandatory SceneDelegate Migration and Additional Airbridge Deep Link Settings
[Xcode 27] Mandatory SceneDelegate Migration and Additional Airbridge Deep Link Settings
This document explains the issue caused by the mandatory adoption of
SceneDelegate (the UIScene life cycle) in Xcode 27, and how to resolve it. The Airbridge Expo SDK works under the Scene life cycle from Expo SDK 58 without any additional code.Symptoms
- An app built with Xcode 27 fails to launch and quits immediately.
- After adding
UIApplicationSceneManifestto adopt the Scene life cycle, the app shows a blank screen and fails to render. - Airbridge deep link events are not collected when the app is opened through a scheme deep link or a universal link.
- The Airbridge config plugin is set in
app.jsonas described in the developer guide, but it does not work.
Cause
This is not caused by the Airbridge SDK configuration. It happens because the Expo SDK version in use does not support the UIScene life cycle.Apple is moving the app life cycle fromUIApplicationDelegate (AppDelegate) to the UIScene-based (SceneDelegate) model, and an app built with the iOS 27 SDK (Xcode 27) fails to launch and quits immediately unless it adopts the UIScene life cycle.However, the prebuild template of Expo SDK 57 and earlier does not generate a SceneDelegate and does not add UIApplicationSceneManifest to Info.plist. Instead, the AppDelegate (ExpoAppDelegate) creates the window and starts React Native in application:didFinishLaunchingWithOptions:, and receives deep links through application:openURL: and application:continueUserActivity:.If you adopt the Scene life cycle by adding only UIApplicationSceneManifest in that state, those AppDelegate callbacks are no longer called under the Scene life cycle. The window is not displayed, which leaves a blank screen, and deep links are not delivered to the app either. The Airbridge Expo SDK collects deep links in AirbridgeAppDelegate (ExpoAppDelegateSubscriber), which is invoked through the same AppDelegate callbacks, so Airbridge deep link collection stops as well.SDK initialization runs in
application:didFinishLaunchingWithOptions:, which is still called under the Scene life cycle, so it is not affected. Only deep link collection stops working.Solution
Upgrade to Expo SDK 58 or later. From Expo SDK 58,expo prebuild generates SceneDelegate.swift and adds UIApplicationSceneManifest to Info.plist, and Expo forwards scene events back to the AppDelegate. As a result, the deep link collection in AirbridgeAppDelegate is called as before, so you do not need to write a SceneDelegate or add Airbridge deep link collection code yourself.1. Upgrade to Expo SDK 58
npx expo install expo@58.0.6.2. Install the latest Airbridge SDK
3. Regenerate the native project
4. Check the deep link settings
The scheme,associatedDomains, and Android intentFilters settings remain the same as in the existing developer guide. See Initialize SDK and Set up deep linking.5. Verify the behavior
Open the app through a scheme deep link and a universal link, both when the app is terminated and when it is in the background, then confirm that the deep link events are collected in the Airbridge dashboard.A deep link is delivered to both the Airbridge
Airbridge.setOnDeeplinkReceived callback and the React Native Linking url event. If both places perform navigation, the same link can be handled twice, so handle routing in only one place. To receive an Airbridge tracking link converted back into its original scheme deep link, handle it in Airbridge.setOnDeeplinkReceived; Linking receives the URL before conversion.The domain of saved passwords appears as airbridge.io or abr.ge
The domain of saved passwords appears as airbridge.io or abr.ge
Problem
Users may see the domain of passwords stored with the Password AutoFill feature asairbridge.io or abr.ge.Cause
After setting up deep links for the Airbridge SDK, if you utilize the Password AutoFill feature, the domain is saved as the applinks domain of the Airbridge deep link, which isairbridge.io or abr.ge.Solution
The problem can be solved by setting up the webcredentials domain used in the Password AutoFill.- Prepare the domain that will store the password.
- Host the JSON below at
https://YOUR_DOMAIN/.well-known/apple-app-site-associationwithContent-Type: application/json. Your prepared domain should be entered instead ofYOUR_DOMAIN.
- Navigate to [YOUR_PROJECT]>[Signing & Capabilities] in Xcode.
- Click + Capability to add Associated Domains. Enter
webcredentials:YOUR_DOMAINin Associated Domains.
Upload Symbol Failed on Xcode
Upload Symbol Failed on Xcode
expo-routel doesn't work after installing the SDK
expo-routel doesn't work after installing the SDK
Problem
The expo-route deosn’t work after installing the SDK for users who have been using it before the SDK installation.Cause
When the app is launched via the Airbridge tracking link, Airbridge converts the deep link to a scheme deep link before routing it. However, due to the expo-router, the routing process may be duplicated, or the redirection may be processed incorrectly.Therefore, the Airbridge Expo SDK has been designed to route the Deeplink.Solution
Make sure to be routed within theAirbridge.setOnDeeplinkReceived as in the following code.