[Xcode 27] SceneDelegate 전환 필수화 및 Airbridge 딥링크 추가 설정 안내
[Xcode 27] SceneDelegate 전환 필수화 및 Airbridge 딥링크 추가 설정 안내
이 문서는 Xcode 27에서
SceneDelegate(UIScene 생명주기) 채택이 필수화되면서 발생하는 문제와 해결 방법을 안내합니다. Airbridge Expo SDK는 Expo SDK 58부터 추가 코드 작성 없이 Scene 생명주기에서 동작합니다.문제 현상
- Xcode 27에서 빌드한 앱이 실행되지 않고 즉시 종료됩니다.
- Scene 생명주기를 채택하기 위해
UIApplicationSceneManifest를 추가하면, 이번에는 앱이 흰 화면으로 표시되고 화면이 그려지지 않습니다. - 스킴 딥링크(Scheme Deeplink) 또는 유니버설 링크(Universal Links)로 앱에 진입해도 Airbridge 딥링크 이벤트가 수집되지 않습니다.
- 개발자 가이드대로
app.json에 Airbridge config plugin을 설정했는데도 동작하지 않습니다.
발생 원인
이 문제는 Airbridge SDK 설정이 아니라, 사용 중인 Expo SDK 버전이 UIScene 생명주기를 지원하지 않아 발생합니다.Apple은 앱 생명주기를UIApplicationDelegate(AppDelegate) 단독 방식에서 UIScene 기반(SceneDelegate) 방식으로 전환하고 있으며, iOS 27 SDK(Xcode 27)로 빌드한 앱은 UIScene 생명주기를 채택하지 않으면 실행되지 않고 즉시 종료됩니다.그런데 Expo SDK 57 이하의 prebuild 템플릿은 SceneDelegate를 생성하지 않고, Info.plist에 UIApplicationSceneManifest도 추가하지 않습니다. AppDelegate(ExpoAppDelegate)가 application:didFinishLaunchingWithOptions:에서 window를 만들어 React Native를 시작하고, 딥링크는 application:openURL:·application:continueUserActivity:로 받는 구조입니다.이 상태에서 UIApplicationSceneManifest만 추가해 Scene 생명주기를 채택하면, 위 AppDelegate 콜백은 Scene 생명주기에서 호출되지 않습니다. 그래서 window가 화면에 표시되지 않아 흰 화면이 되고, 딥링크도 앱에 전달되지 않습니다. Airbridge Expo SDK는 딥링크를 AirbridgeAppDelegate(ExpoAppDelegateSubscriber)에서 수집하며 이 subscriber 역시 같은 AppDelegate 콜백으로 호출되므로, Airbridge 딥링크 수집도 함께 멈춥니다.SDK 초기화는
application:didFinishLaunchingWithOptions:에서 수행되며, 이 콜백은 Scene 생명주기에서도 호출되므로 영향을 받지 않습니다. 딥링크 수집만 동작하지 않습니다.해결 방법
Expo SDK 58 이상으로 업그레이드하세요. Expo SDK 58부터는expo prebuild가 SceneDelegate.swift와 Info.plist의 UIApplicationSceneManifest를 생성하고, Expo가 scene 이벤트를 AppDelegate로 다시 전달합니다. 그 결과 AirbridgeAppDelegate의 딥링크 수집이 그대로 호출되므로, 앱에서 SceneDelegate를 직접 작성하거나 Airbridge 딥링크 수집 코드를 추가할 필요가 없습니다.1. Expo SDK 58로 업그레이드
npx expo install expo@58.0.6과 같이 버전을 직접 지정합니다.2. Airbridge SDK 최신 버전 설치
3. 네이티브 프로젝트 재생성
4. 딥링크 설정 확인
스킴,associatedDomains, Android intentFilters 설정은 기존 개발자 가이드와 동일하게 유지되어야 합니다. 설정 방법은 SDK 초기화하기와 딥링크 설정하기를 참고하세요.5. 동작 확인
앱이 종료된 상태와 백그라운드 상태 각각에서 스킴 딥링크와 유니버설 링크로 앱에 진입한 뒤, Airbridge 대시보드에서 딥링크 이벤트가 수집되는지 확인합니다.딥링크는 Airbridge의
Airbridge.setOnDeeplinkReceived 콜백과 React Native Linking의 url 이벤트에 모두 전달됩니다. 두 곳에서 각각 화면 이동을 처리하면 같은 링크가 두 번 처리될 수 있으므로 라우팅은 한 곳에서만 처리하세요. 에어브릿지 트래킹 링크를 원래 스킴 딥링크로 되돌려 받으려면 Airbridge.setOnDeeplinkReceived 콜백에서 처리해야 합니다. (Linking에는 변환 전 URL이 전달됩니다.)저장된 암호의 도메인이 airbridge.io 또는 abr.ge로 보이는 문제
저장된 암호의 도메인이 airbridge.io 또는 abr.ge로 보이는 문제
문제 현상
Password AutoFill 기능으로 저장된 암호의 도메인이airbridge.io 또는 abr.ge로 보이는 현상이 앱을 사용하는 유저에게 발생할 수 있습니다.발생 원인
에어브릿지 SDK의 딥링크를 설정한 후에 Password AutoFill 기능을 활용하면 도메인이 에어브릿지 딥링크의 앱 링크(applinks) 도메인airbridge.io 또는 abr.ge로 저장됩니다.해결 방법
Password AutoFill에 사용하는 webcredentials 도메인을 설정하면 문제를 해결할 수 있습니다.- 암호를 저장하는 도메인을 준비해주세요.
- 아래 JSON을
https://YOUR_DOMAIN/.well-known/apple-app-site-association에Content-Type: application/json으로 호스팅합니다. 준비한 도메인이YOUR_DOMAIN입니다.
- Xcode의 [YOUR_PROJECT]>[Signing & Capabilities]로 이동합니다.
- ’+ Capability’를 클릭해 Associated Domains를 추가합니다. Associated Domains에
webcredentials:YOUR_DOMAIN을 입력합니다.
Xcode에서 Upload Symbol Failed 경고 메시지가 뜨는 현상
Xcode에서 Upload Symbol Failed 경고 메시지가 뜨는 현상
SDK 설치 후 expo-route 기능이 동작 하지 않습니다
SDK 설치 후 expo-route 기능이 동작 하지 않습니다
문제 현상
기존에 expo-route 를 사용중인 경우 SDK 설치 후 expo-route 기능이 동작 하지 않습니다.발생 원인
Airbridge tracking link 를 통해서 app 진입 시 진입한 링크를 airbridge 를 통해서 scheme deeplink 로 변환 처리 후 route 처리가 되어야 합니다. 그러나 expo-router 로 인해 route 처리가 중복, 잘못된 이동 등과 같은 옳지 않은 방향으로 처리 될 수 있습니다.그리하여 Airbridge Expo SDK 에서 Deeplink 를 route 처리되도록 설계 되었습니다.해결 방법
아래 코드와 같이Airbridge.setOnDeeplinkReceived 내에서 route 되도록 처리 해주세요.