Фатальное исключение в RCTCxxBridge.mm после миграции на новую архитектуру React-Native.

Вопрос или проблема

Нестандартное исключение C++ сообщается Crashlytics для 5% пользователей после миграции приложения на новую архитектуру. Обратите внимание, что это невозможно воспроизвести на отладочных сборках, и это происходит редко в нижних средах. Проблема возникает при загрузке приложения и повторяется для одного и того же пользователя в приложении, загруженном из App Store. Проблема сообщается только в сборках для iOS. Ниже приводится стек вызовов ошибки.

Фатальное исключение: RCTFatalException: нестандартное исключение C++
0 CoreFoundation 0x9e88 __exceptionPreprocess
1 libobjc.A.dylib 0x178d8 objc_exception_throw
2 TSC 0x6b2f88 RCTFormatError + 167 (RCTAssert.m:167)
3 TSC 0x6ca740 -[RCTCxxBridge handleError:] + 1123 (RCTCxxBridge.mm:1123)
4 TSC 0x6c90a0 __34-[RCTCxxBridge _initializeBridge:]_block_invoke + 668 (RCTCxxBridge.mm:668)
5 TSC 0x6dd080 facebook::react::RCTMessageThread::tryFunc(std::__1::function<void ()> const&) + 72 (RCTMessageThread.mm:72)
6 TSC 0x6dce2c invocation function for block in facebook::react::RCTMessageThread::runAsync(std::__1::function<void ()>) + 45 (RCTMessageThread.mm:45)
7 CoreFoundation 0x43564 CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK
8 CoreFoundation 0xabd9c __CFRunLoopDoBlocks
9 CoreFoundation 0x7bb98 __CFRunLoopRun
10 CoreFoundation 0x80ed4 CFRunLoopRunSpecific
11 TSC 0x6c6e30 +[RCTCxxBridge runRunLoop] + 332 (RCTCxxBridge.mm:332)
12 Foundation 0x5b808 NSThread__start
13 libsystem_pthread.dylib 0x16cc _pthread_start
14 libsystem_pthread.dylib 0xba4 thread_start

Обратите внимание, что проблема не часто воспроизводится и сообщается Crashlytics примерно для 5% от общего числа пользователей. Будет полезно, если мы получим какие-либо подсказки по устранению проблемы, так как это снижает наш процент безаварийности.

Ответ или решение

Ваша проблема с "Fatal Exception in RCTCxxBridge.mm" после миграции на новую архитектуру React-Native представляет собой сложный случай, который, безусловно, требует внимательного анализа и систематического подхода к поиску решений. Давайте разберём причину и возможные пути устранения данной неисправности.

Проблема

Вы наблюдаете не стандартное исключение C++ от Crashlytics у 5% пользователей после перехода на новую архитектуру React-Native, что приводит к падениям приложения на загрузке на iOS. Это исключение не воспроизводится в отладочных сборках и возникает исключительно на сборках из App Store. Сужение проблемы до iOS сборок также указывает на возможные платформенные особенности или проблемы в кодовой базе, связанные с взаимодействием C++ и Objective-C.

Краткий анализ стек-трейса

Из стек-трейса видим:

  • RCTFormatError указывает на отсутствие некоторого требуемого значения или неправильно заданный формат данных.
  • handleError: и _initializeBridge: предполагают, что ошибка происходит во время инициализации моста (Bridge) между JavaScript и нативным кодом.

Возможные причины неисправности

  1. Асинхронные операции: Ошибка могла быть вызвана временной несогласованностью данных или асинхронностью, когда JavaScript пытается обращаться к нативным методам до их полной инициализации.

  2. Проблемы с конфигурацией: При миграции могут возникать проблемы с конфигурацией по умолчанию, что может привести к неинициализированным полям или отсутствию необходимых данных на этапе инициализации.

  3. Версии библиотек: Убедитесь, что вы используете совместимые с новой архитектурой версии библиотек, связанных с React-Native, для iOS.

  4. Инициализация модулей: Посмотрите на модули, которые инициализируются в вашем приложении. Возможно, есть зависимость между модулями, которые не учитываются в новом архитектурном подходе.

Рекомендации по устранению неисправности

  1. Логирование и трассировка: Улучшите логирование, чтобы отследить состояние данных и процесс инициализации. Это позволит лучше понять, в каком конкретно месте происходит сбой.

  2. Обработка исключений: Внедрите более детальную обработку исключений вокруг кода, который инициирует модули на JavaScript и нативной части, чтобы вы могли точно определить, какое исключение вызывается.

  3. Тестирование в реальных условиях: Попробуйте воспроизвести проблему, используя устройства с аналогичной конфигурацией, как у пользователей, у которых возникла ошибка.

  4. Обновление зависимостей: Убедитесь, что у вас установлены последние версии React-Native и связанных библиотек. Проверьте changelog для известных проблем в версиях.

  5. Проверка конфигурации проекта: Пересмотрите настройки вашего проекта Xcode для наличия несоответствий или идей о том, что могло уйти не так в процессе миграции.

Заключение

Данная ошибка, вызванная миграцией на новую архитектуру React-Native, может быть результатом множества факторов. Высокая сложность, а также отсутствие возможности воспроизведения проблемы усложняет поиск решения, однако применяя предложенные стратегии, вы сможете значительно сократить количество сбоев и повысить уровень стабильности вашего приложения. Рекомендуется также наладить коллективное обсуждение и анализ отзывов пользователей для выявления новых кейсов.

Если у вас есть доступ к профессиональным разработчикам, работающим с React-Native, можно рассмотреть возможность создания временной группы по расследованию проблем, связанных с переходом на новую архитектуру.

Оцените материал
Добавить комментарий

Капча загружается...