[iOS] Reload crashes the app while a view command is still queued

Ouverte
#59,721 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 2 jours

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
45/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
Active
Stack technique
cpp, ios, react-native
Domaine
mobile

Piste de recherche

The crash stack points to RuntimeScheduler_Modern.cpp (updateRendering, runEventLoopTick) and Scheduler::uiManagerDidDispatchCommand. Start by building the provided reproducer on an iOS simulator, then read the scheduler code around line 400 to see how queued view commands interact with reload. Done means ./loop.sh reports 0 crashes in 20 reloads.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Needs: Triage :mag: Platform: iOS Type: New Architecture
Description

On iOS, reloading the app while a view command is still queued crashes it on the JS thread with EXC_BAD_ACCESS.

scrollRef.current?.scrollTo({ y: 0, animated: false });
DevSettings.reload();
busyWait(100); // keeps the JS thread in this task for 100 ms

Likely the same crash was reported in #58601 and #53774 but without a repro.

Steps to reproduce
  1. Clone the reproducer and install it:
    npm install
    cd ios && bundle install && bundle exec pod install && cd ..
    
  2. Start Metro with npx react-native start, then build and run on an iOS simulator with npx react-native run-ios.
  3. The app reloads itself about 1 s after every mount, and usually crashes on the first reload.

My setup: Debug build, prebuilt React.xcframework, iPhone 17 simulator, iOS 26.5

To count the crashes, quit the app and run ./loop.sh default 20. It relaunches the app for each trial and prints default: N crashes in 20 reloads.

React Native Version

0.88.1

Affected Platforms

Runtime - iOS

Areas

Fabric - The New Renderer

Output of npx @react-native-community/cli info
System:
  OS: macOS 26.7.1
  CPU: (14) arm64 Apple M4 Pro
  Memory: 11.90 GB / 48.00 GB
  Shell:
    version: "5.9"
    path: /bin/zsh
Binaries:
  Node:
    version: 24.22.1
    path: /opt/homebrew/bin/node
  Yarn: Not Found
  npm:
    version: 11.19.1
    path: /opt/homebrew/bin/npm
  Watchman: Not Found
Managers:
  CocoaPods:
    version: 1.17.0
    path: /opt/homebrew/bin/pod
SDKs:
  iOS SDK:
    Platforms:
      - DriverKit 27.0
      - iOS 27.1
      - macOS 27.0
      - tvOS 27.0
      - visionOS 27.0
      - watchOS 27.0
  Android SDK: Not Found
IDEs:
  Android Studio: Not Found
  Xcode:
    version: 27.1/27A9275
    path: /usr/bin/xcodebuild
Languages:
  Java:
    version: 17.0.20.1
    path: /usr/bin/javac
  Ruby:
    version: 4.0.9
    path: /opt/homebrew/bin/ruby
npmPackages:
  "@react-native-community/cli":
    installed: 20.2.0
    wanted: 20.2.0
  react:
    installed: 19.3.0
    wanted: 19.3.0
  react-native:
    installed: 0.88.1
    wanted: 0.88.1
  react-native-macos: Not Found
npmGlobalPackages:
  "*react-native*": Not Found
Android:
  hermesEnabled: true
  newArchEnabled: true
iOS:
  hermesEnabled: true
  newArchEnabled: true
Stacktrace or Logs
Exception: EXC_BAD_ACCESS (SIGBUS) KERN_PROTECTION_FAILURE at 0x00000001090a659c
Crashed thread: com.facebook.react.runtime.JavaScript
0   ???                          0x1090a659c
1   ReproducerApp.debug.dylib    std::__invoke<facebook::react::Scheduler::uiManagerDidDispatchCommand(...)::$_0&>(...) (invoke.h:90)
2   ReproducerApp.debug.dylib    std::__invoke_void_return_wrapper<void, true>::__call<...uiManagerDidDispatchCommand(...)::$_0&>(...) (invoke.h:350)
3   ReproducerApp.debug.dylib    std::__invoke_r<void, ...uiManagerDidDispatchCommand(...)::$_0&>(...) (invoke.h:356)
4   ReproducerApp.debug.dylib    std::__function::__func<facebook::react::Scheduler::uiManagerDidDispatchCommand(...)::$_0, void ()>::operator()() (function.h:172)
5   ReproducerApp.debug.dylib    std::__function::__value_func<void ()>::operator()() const (function.h:273)
6   ReproducerApp.debug.dylib    std::function<void ()>::operator()() const (function.h:754)
7   ReproducerApp.debug.dylib    facebook::react::RuntimeScheduler_Modern::updateRendering(facebook::jsi::Runtime&, facebook::react::HighResTimeStamp) (RuntimeScheduler_Modern.cpp:400)
8   ReproducerApp.debug.dylib    facebook::react::RuntimeScheduler_Modern::runEventLoopTick(facebook::jsi::Runtime&, facebook::react::Task&) (RuntimeScheduler_Modern.cpp:343)
9   ReproducerApp.debug.dylib    facebook::react::RuntimeScheduler_Modern::runEventLoop(facebook::jsi::Runtime&) (RuntimeScheduler_Modern.cpp:287)
10  ReproducerApp.debug.dylib    facebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0::operator()(facebook::jsi::Runtime&) const (RuntimeScheduler_Modern.cpp:272)
MANDATORY Reproducer

https://github.com/Nezz/expo-repro/tree/repro/ReloadSchedulerCrash

Screenshots and Videos
Langage dominant
C++
Étoiles
127k
Forks
25.4k
Merge moyen
2 j 5 h
PR mergées (30 j)
74

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de react/react-native

Toutes les issues de react/react-native

Issues similaires

Plus d'issues C++

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.