[iOS] Reload crashes the app while a view command is still queued
维护者通常 2 天内回复
还没有人认领这个 Issue。
评估
调研方向
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.
由索引模型根据 Issue 内容生成。
描述
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
- Clone the reproducer and install it:
npm install cd ios && bundle install && bundle exec pod install && cd .. - Start Metro with
npx react-native start, then build and run on an iOS simulator withnpx react-native run-ios. - 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
- 主要语言
- C++
- 星标
- 127k
- 派生
- 25.4k
- 平均合并
- 2 天 5 小时
- 30 天内合并 PR
- 74
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
react/react-native 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 70/100
react/react-native#59722 ·
维护者通常 2 天内回复
-
🌐Networking Needs: Author Feedback Needs: Repro Platform: Android
难度 2/5 1-3 小时 新手友好度 72/100
react/react-native#59704 · 1 条评论 ·
维护者通常 2 天内回复
-
Fantom runs end 5 seconds after their last test, with "Jest did not exit one second after the test run has completed": globalTeardown never clears its shutdown timer可能已有人在做 @lazerg 于 2 天前认领。 未关闭
难度 1/5 1 小时以内 新手友好度 85/100
react/react-native#59699 ·
维护者通常 2 天内回复
-
难度 1/5 1 小时以内 新手友好度 88/100
react/react-native#59694 ·
维护者通常 2 天内回复
-
Android autolinking keeps a stale autolinking.json when only bun.lock changes, since bun.lock isn't in the default lockFiles可能已有人在做 @lazerg 于 2 天前认领。 未关闭
难度 1/5 1 小时以内 新手友好度 85/100
react/react-native#59693 ·
维护者通常 2 天内回复
查看 react/react-native 的全部 Issue
相似的 Issue
-
Issue-Bug Needs-Triage
难度 2/5 1-3 小时 新手友好度 62/100
microsoft/winget-cli#6645 ·
维护者通常 2 天内回复
-
cleanup help wanted
难度 2/5 1-3 小时 新手友好度 62/100
ESPresense/ESPresense#2602 ·
维护者通常 1 天内回复
-
devex good first issue
难度 2/5 1-3 小时 新手友好度 62/100
维护者通常 1 天内回复
-
artifact:simulation-scenario domain:physics good first issue help wanted role:validation testing
难度 2/5 1-3 小时 新手友好度 75/100
-
难度 2/5 1-3 小时 新手友好度 62/100
维护者通常 3 天内回复