Skip to main content
알립니다이 문서는 기존 AppDelegate 기반 앱을 SceneDelegate(UIScene 생명주기)로 전환해야 하는 고객을 위한 트러블슈팅 가이드입니다.

문제 현상

  • Xcode 27(iOS 27 SDK)로 빌드한 앱이 실행되지 않고 UIScene life cycle is required for apps built with this SDK 런타임 이슈와 함께 즉시 종료됩니다.
  • Scene 생명주기를 채택한 뒤에는 GeneratedPluginRegistrant.register(with:) 부근에서 EXC_BAD_ACCESS (code=1, address=0x0) 크래시가 발생하며 앱이 즉시 종료됩니다.
  • 스킴 딥링크(Scheme Deeplink) 또는 유니버설 링크(Universal Links)로 앱에 진입해도 Airbridge 딥링크 이벤트가 수집되지 않습니다.
  • 개발자 가이드의 프로젝트 설정 > iOS 설정과 딥링크 설정 > iOS 딥링크 설정 예제대로 AppDelegate에 코드를 작성했는데도 동작하지 않습니다.

발생 원인

Apple은 앱 생명주기를 UIApplicationDelegate(AppDelegate) 단독 방식에서 UIScene 기반(SceneDelegate) 방식으로 전환하고 있으며, 최신 Xcode/iOS에서는 Scene 생명주기 채택이 사실상 필수가 되었습니다.앱이 UIApplicationSceneManifest를 통해 Scene 생명주기를 채택하면, 다음 AppDelegate 콜백은 더 이상 호출되지 않습니다.

해결 방법

1. Info.plist에 Scene Manifest 추가

Info.plist에 아래 UIApplicationSceneManifest를 추가합니다.UISceneDelegateClassName은 사용하는 모듈에 맞게 지정하고, UISceneStoryboardFile에 Main을 반드시 지정합니다.(이 값이 없으면 FlutterViewController가 scene의 rootViewController로 생성되지 않아 플러그인 등록이 실패합니다.)
  • UISceneDelegateClassName
    • Objective-C: SceneDelegate
    • Swift: $(PRODUCT_MODULE_NAME).SceneDelegate

2. SceneDelegate 생성 및 딥링크 수집 코드를 SceneDelegate로 이전

3. AppDelegate 정리

  • SDK 초기화 코드(Swift: AirbridgeFlutter.initSDK(appName:appToken:withLaunchOptions:), Objective-C: [AirbridgeFlutter initSDKWithAppName:appToken:withLaunchOptions:])는 application:didFinishLaunchingWithOptions:에 그대로 둡니다.
  • 딥링크 수집을 위해 작성했던 application:openURL:options:와 application:continueUserActivity:restorationHandler:는 Scene 생명주기에서 호출되지 않으므로, SceneDelegate로 이전한 뒤 AppDelegate에서는 삭제합니다.
  • GeneratedPluginRegistrant.register(with: self)는 FlutterAppDelegate가 self.window.rootViewController(FlutterViewController)를 통해 플러그인 레지스트라를 만듭니다. Scene 생명주기에서는 window가 SceneDelegate 소유라 AppDelegate의 self.window가 nil이 됩니다. 그 결과 레지스트라가 nil로 반환되고, 이를 받은 플러그인이 nil을 역참조하면서 EXC_BAD_ACCESS (address=0x0) 크래시가 발생합니다. 따라서 플러그인 등록(GeneratedPluginRegistrant.register)을 반드시 FlutterViewController가 존재하는 SceneDelegate로 이전해야 합니다.
Flutter SDK 3.0.1 이상의 버전으로 iOS 빌드 시 Bitcode 를 지원하지 않아서 아래와 같이 에러가 발생 할 수 있습니다.
Flutter SDK 3.0.1 버전 부터 Airbridge iOS SDK 1.28.0 버전 으로 업데이트 되었습니다. Airbridge iOS SDK 는 1.28.0 버전 부터 Bitcode 를 지원하지 않습니다.해당 에러 발생 시 아래 가이드를 참고 바랍니다.
Android build 시에 Plugin project ... not found. Please update settings.gradle 에러가 발생하면 android/settings.gradle 파일을 아래와 같이 수정해서 문제를 해결 할 수 있습니다.
Flutter issue: https://github.com/flutter/flutter/issues/16049Airbridge Flutter SDK 는 swift plugin 이고, Flutter 에는 100% Objective C Project 에서 Swift Plugin 을 사용하면 해당 오류가 발생하는 문제가 있습니다.File > New > File... > Swift File 을 선택해서 File.swift 파일을 생성하고, Bridge Header 를 생성하는 것으로 문제를 해결할 수 있습니다.Objective C & Swift Project 및 100% Swift Project 에서는 발생하지 않는 문제입니다.
에어브릿지 SDK 백업 규칙과 서드파티 SDK 백업 규칙 중복 적용으로 인해 빌드 에러가 발생하는 경우 해결 방법은 아래를 참고해주세요.예) 에어브릿지 SDK 백업 규칙과 Appsflyer SDK 백업 규칙이 중복 적용되는 경우 아래와 같은 빌드 에러가 표시됩니다.
이 문제를 해결하기 위해서는 아래와 같이 설정해주세요.
  1. android/app/src/main/res/xml 폴더를 생성해주세요.
  2. 생성된 xml 폴더 내부에 (e.g. custom_backup_rules.xml) 파일을 생성해주세요.
  3. 에어브릿지 SDK에서 정의하는 데이터 백업 규칙을 다음과 같이 추가해 주세요.