Описание проблемы
Приложение падает с ошибкой SIGABRT на самом раннем этапе инициализации, если в Info.plist включена поддержка UISceneDelegate (через UIApplicationSceneManifest).
Проблема была обнаружена при проверке приложения в Apple App Review (тестировалось на iPad).
Шаги для воспроизведения
- Интегрировать пакет
mindbox: 2.15.0 в Flutter-проект.
- В
AppDelegate.swift наследоваться от MindboxFlutterAppDelegate.
- В
Info.plist добавить манифест сцен (UIApplicationSceneManifest) и указать FlutterSceneDelegate (стандартная процедура миграции Flutter на поддержку Сцен).
- Запустить приложение на симуляторе iPad или iPhone с iOS 15+.
Ожидаемое поведение
Приложение должно запускаться без ошибок. SDK должен корректно обрабатывать ситуацию, когда управление окном (window) передано Сцене, и поле window в AppDelegate остается nil.
Фактическое поведение
Приложение мгновенно завершается с ошибкой (краш)
Технические подробности
По результатам анализа:
- Данная проблема возникла после выполнения официальной миграции Flutter на UISceneDelegate (подробности: https://docs.flutter.dev/release/breaking-changes/uiscenedelegate).
- При использовании SceneDelegate поле
window в AppDelegate не инициализируется системой.
MindboxFlutterAppDelegate.swift (или нативный SDK под капотом), вероятно, пытается обратиться к self.window! в методе didFinishLaunchingWithOptions.
- Поскольку
window равно nil, происходит force unwrap crash.
- В составе пода
Mindbox присутствует MindboxSceneDelegate.swift, но нет документации о том, как его использовать совместно с FlutterSceneDelegate в Flutter-приложении.
Окружение
- Mindbox Flutter SDK: 2.15.0
- Mindbox iOS SDK (native): 2.15.0
- Flutter: 3.41.6
- ОС: iOS 13+
Описание проблемы
Приложение падает с ошибкой
SIGABRTна самом раннем этапе инициализации, если вInfo.plistвключена поддержкаUISceneDelegate(черезUIApplicationSceneManifest).Проблема была обнаружена при проверке приложения в Apple App Review (тестировалось на iPad).
Шаги для воспроизведения
mindbox: 2.15.0в Flutter-проект.AppDelegate.swiftнаследоваться отMindboxFlutterAppDelegate.Info.plistдобавить манифест сцен (UIApplicationSceneManifest) и указатьFlutterSceneDelegate(стандартная процедура миграции Flutter на поддержку Сцен).Ожидаемое поведение
Приложение должно запускаться без ошибок. SDK должен корректно обрабатывать ситуацию, когда управление окном (
window) передано Сцене, и полеwindowвAppDelegateостаетсяnil.Фактическое поведение
Приложение мгновенно завершается с ошибкой (краш)
Технические подробности
По результатам анализа:
windowвAppDelegateне инициализируется системой.MindboxFlutterAppDelegate.swift(или нативный SDK под капотом), вероятно, пытается обратиться кself.window!в методеdidFinishLaunchingWithOptions.windowравноnil, происходит force unwrap crash.MindboxприсутствуетMindboxSceneDelegate.swift, но нет документации о том, как его использовать совместно сFlutterSceneDelegateв Flutter-приложении.Окружение