[Xcode 27] SceneDelegate 전환 필수화 및 Airbridge 딥링크 추가 설정 안내
[Xcode 27] SceneDelegate 전환 필수화 및 Airbridge 딥링크 추가 설정 안내
알립니다이 문서는 기존 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
- Objective-C:
2. SceneDelegate 생성 및 딥링크 수집 코드를 SceneDelegate로 이전
- Swift
- Objective-C
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로 이전해야 합니다.
Bitcode 컴파일 에러
Bitcode 컴파일 에러
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 를 지원하지 않습니다.해당 에러 발생 시 아래 가이드를 참고 바랍니다.settings.gradle
settings.gradle
Android build 시에
Plugin project ... not found. Please update settings.gradle 에러가 발생하면 android/settings.gradle 파일을 아래와 같이 수정해서 문제를 해결 할 수 있습니다.Could not find or use auto-linked library...
Could not find or use auto-linked library...
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 백업 규칙과 서드파티 SDK 백업 규칙 중복 적용으로 인해 빌드 에러가 발생하는 경우 해결 방법은 아래를 참고해주세요.예) 에어브릿지 SDK 백업 규칙과 Appsflyer SDK 백업 규칙이 중복 적용되는 경우 아래와 같은 빌드 에러가 표시됩니다.이 문제를 해결하기 위해서는 아래와 같이 설정해주세요.
backup_rules.xml 설정
backup_rules.xml 설정
android/app/src/main/res/xml폴더를 생성해주세요.- 생성된 xml 폴더 내부에 (e.g.
custom_backup_rules.xml) 파일을 생성해주세요. - 에어브릿지 SDK에서 정의하는 데이터 백업 규칙을 다음과 같이 추가해 주세요.
AndroidManifest.xml 설정
AndroidManifest.xml 설정