-
Notifications
You must be signed in to change notification settings - Fork 24.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Initialization] Decouple script loading and environment setup from the root view #66
Conversation
Could I get a code review sometime this week or the next? I know you guys are super busy so when you get a breather is fine. I'm pretty sure the view controller (specifically splitting the environment setup out of RCTRootView) is a step in the right direction and it takes time to rebase on top of the latest commits, so it'd be great if this could be reviewed sometime soon. |
…he root view Introduces RCTRootViewController, which handles the controller-appropriate work that RCTRootView was doing. This decouples the view from the script loading and JS environment setup (w/the bridge), which helps ReactKit be less of a framework and more of a library. The example apps have been updated and work. On the Facebook side you will need to replace RCTRootView with RCTRootViewController which should be fairly mechanical with VC containment.
Hi James, Thanks for doing this, and sorry it's gone uncommented for so long. The thinking behind RCTRootView was that it could be used in places where it's awkward, or non-idiomatic to use a ViewController, such as inside a Table/CollectionViewCell, although I admit that's probably an uncommon scenario. It may seem odd that a view should be doing so much work, but it's loosely modelled on UIWebView, where you give it a url and it does the rest. Some would consider that a bad pattern, but the separation of responsibility between view/controller in iOS has always been a little wooly IMO anyway. I prefer the model adopted by SpriteKit (and React) where you just have a single hierarchy of nodes that manage their own content. We're currently working on remodelling RCTRootView to find a more useful division of responsibility. There's nothing wrong with this diff per-se, however it doesn't really address all the problems we're trying to solve, which are:
Having a controller instead of a view as the main entry point helps a little bit with the last of these points, and may in fact end up being part of the solution as a whole, but I'm not sure that it helps at all with the other issues we need to address. |
Thanks Nick -- appreciate the commentary and it's helpful to know the direction you guys are looking in. If I'm understanding your goals with RCTRootView right, it sounds like you want to separate the JS environment from RCTRootView so that it can manage multiple root views and orchestrate app-wide events. If you're already far along with the new RCTRootView structure that's fine but just to put an idea out there since this diff might save you guys some work - RCTRootViewController could be renamed RCTEnvironment and would be a plain NSObject subclass. RCTRootViewController doesn't actually use any of UIViewController's features so we can leave that baggage behind and make it easy to embed RCTRootViews anywhere. Sample code using it might look like: RCTEnvironment *environment = [[RCTEnvironment alloc] initWithModuleProvider:moduleProvider];
environment.executorClass = [CustomExecutor class];
environment.sourceURL = sourceURL;
RCTRootView *rootView = [environment createRootView:moduleName initialProperties:props];
// Add rootView wherever
[tableCell addSubview:rootView];
// Cleanup
[environment invalidateRootView:rootView];
// or maybe rootView has a backpointer to the enviroment and can clean itself up on
// [rootView invalidate] or when it gets deallocated Is this more in line with what you're thinking? |
That's similar to the model we use internally, where we have a RootView "factory". I was hoping to move away from that pattern though, because it seems very un-iOS like. I do think we need to move script loading out of the view, but I thought perhaps the bridge could take on that responsibility, since it has effectively become our central DI context/container anyway. Then you could init a new rootview by passing it a bridge instance, rather than requesting that the environment builds one for you I don't know though TBH; there's a few different directions to take with it, and I need to work through all the pros and cons of each. |
Got it, will sit tight for now. |
I think it would make sense to have an option to make a shared bridge and pass it into one or more -Spencer
|
Enable React devtools by exposing React (setting window.React)
Summary:The website now displays public methods on components. This was implemented mostly in react-docgen via #66. This adds a <Method> component that is used by the component and API doc pages to display documentation for a method. It also adds some missing documentation and tweak some existing one to integrate with this feature. I also prefixed some component methods with an '_' so they don't show up in the doc. **Test plan (required)** Tested every component page locally to make sure the methods doc was displayed properly. Tested an API page to make sure it still worked properly. Closes #6890 Differential Revision: D3159911 Pulled By: vjeux fb-gh-sync-id: 1e6a4640cda6794496d9844c1af6a1451c017dcc fbshipit-source-id: 1e6a4640cda6794496d9844c1af6a1451c017dcc
Summary:The website now displays public methods on components. This was implemented mostly in react-docgen via facebook#66. This adds a <Method> component that is used by the component and API doc pages to display documentation for a method. It also adds some missing documentation and tweak some existing one to integrate with this feature. I also prefixed some component methods with an '_' so they don't show up in the doc. **Test plan (required)** Tested every component page locally to make sure the methods doc was displayed properly. Tested an API page to make sure it still worked properly. Closes facebook#6890 Differential Revision: D3159911 Pulled By: vjeux fb-gh-sync-id: 1e6a4640cda6794496d9844c1af6a1451c017dcc fbshipit-source-id: 1e6a4640cda6794496d9844c1af6a1451c017dcc
Update to reason-react 0.2-4
* implement onTabLongPress event handler * style fix * defaultHandler for long press
Summary: `UIManager` gets module deadlock when start-up randomly. I think we can move it to the secondary thread safely. ``` (lldb) bt all * thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP frame #0: 0x000000010d66a5d6 libsystem_kernel.dylib`__psynch_cvwait + 10 frame #1: 0x000000010d5f476b libsystem_pthread.dylib`_pthread_cond_wait + 1211 frame #2: 0x000000010761dfe2 libc++.1.dylib`std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18 frame #3: 0x00000001034a0a52 RNTester`-[RCTTurboModuleManager _provideObjCModule:moduleHolder:shouldPerfLog:](self=0x00007fafac10e990, _cmd="_provideObjCModule:moduleHolder:shouldPerfLog:", moduleName="AccessibilityManager", moduleHolder=0x0000600003c8cbd8, shouldPerfLog=YES) at RCTTurboModuleManager.mm:599:24 frame #4: 0x00000001034a0488 RNTester`-[RCTTurboModuleManager _provideObjCModule:](self=0x00007fafac10e990, _cmd="_provideObjCModule:", moduleName="AccessibilityManager") at RCTTurboModuleManager.mm:517:32 frame #5: 0x00000001034a2cfa RNTester`-[RCTTurboModuleManager moduleForName:warnOnLookupFailure:](self=0x00007fafac10e990, _cmd="moduleForName:warnOnLookupFailure:", moduleName="AccessibilityManager", warnOnLookupFailure=NO) at RCTTurboModuleManager.mm:976:32 frame #6: 0x00000001030ba6aa RNTester`-[RCTCxxBridge moduleForName:lazilyLoadIfNecessary:](self=0x00007fafac105ab0, _cmd="moduleForName:lazilyLoadIfNecessary:", moduleName="AccessibilityManager", lazilyLoad=YES) at RCTCxxBridge.mm:568:35 * frame #7: 0x000000010316fa38 RNTester`__26-[RCTUIManager setBridge:]_block_invoke(.block_descriptor=0x000060000055cb40) at RCTUIManager.m:188:55 frame #8: 0x00000001090cc747 libdispatch.dylib`_dispatch_call_block_and_release + 12 frame #9: 0x00000001090cd9f7 libdispatch.dylib`_dispatch_client_callout + 8 frame #10: 0x00000001090dd856 libdispatch.dylib`_dispatch_main_queue_drain + 1362 frame #11: 0x00000001090dd2f6 libdispatch.dylib`_dispatch_main_queue_callback_4CF + 31 frame #12: 0x00000001088b4850 CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9 frame #13: 0x00000001088af18b CoreFoundation`__CFRunLoopRun + 2463 frame #14: 0x00000001088ae409 CoreFoundation`CFRunLoopRunSpecific + 557 frame #15: 0x0000000114ede187 GraphicsServices`GSEventRunModal + 137 frame #16: 0x0000000128be53a2 UIKitCore`-[UIApplication _run] + 972 frame #17: 0x0000000128be9e10 UIKitCore`UIApplicationMain + 123 frame #18: 0x0000000102fb7000 RNTester`main(argc=1, argv=0x00007ff7bcf4fce8) at main.m:15:12 frame #19: 0x00000001069023ee dyld_sim`start_sim + 10 frame #20: 0x000000010ea223a6 dyld`start + 1942 thread #6, name = 'com.apple.uikit.eventfetch-thread' frame #0: 0x000000010d667a2e libsystem_kernel.dylib`mach_msg2_trap + 10 frame #1: 0x000000010d675e4a libsystem_kernel.dylib`mach_msg2_internal + 84 frame #2: 0x000000010d66eb6e libsystem_kernel.dylib`mach_msg_overwrite + 653 frame #3: 0x000000010d667d1f libsystem_kernel.dylib`mach_msg + 19 frame #4: 0x00000001088b45bf CoreFoundation`__CFRunLoopServiceMachPort + 143 frame #5: 0x00000001088aed47 CoreFoundation`__CFRunLoopRun + 1371 frame #6: 0x00000001088ae409 CoreFoundation`CFRunLoopRunSpecific + 557 frame #7: 0x000000010a34ceee Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 213 frame #8: 0x000000010a34d16c Foundation`-[NSRunLoop(NSRunLoop) runUntilDate:] + 72 frame #9: 0x0000000128cbd797 UIKitCore`-[UIEventFetcher threadMain] + 518 frame #10: 0x000000010a377699 Foundation`__NSThread__start__ + 1024 frame #11: 0x000000010d5f4202 libsystem_pthread.dylib`_pthread_start + 99 frame #12: 0x000000010d5efbab libsystem_pthread.dylib`thread_start + 15 thread #9, name = 'com.facebook.react.JavaScript' frame #0: 0x000000010d6691e2 libsystem_kernel.dylib`__ulock_wait + 10 frame #1: 0x00000001090ce319 libdispatch.dylib`_dlock_wait + 46 frame #2: 0x00000001090ce170 libdispatch.dylib`_dispatch_thread_event_wait_slow + 40 frame #3: 0x00000001090debb2 libdispatch.dylib`__DISPATCH_WAIT_FOR_QUEUE__ + 371 frame #4: 0x00000001090de5c9 libdispatch.dylib`_dispatch_sync_f_slow + 240 frame #5: 0x00000001031847cb RNTester`RCTUnsafeExecuteOnMainQueueSync(block=0x00000001034a0bf0) at RCTUtils.m:277:5 frame #6: 0x00000001034a0863 RNTester`-[RCTTurboModuleManager _provideObjCModule:moduleHolder:shouldPerfLog:](self=0x00007fafac10e990, _cmd="_provideObjCModule:moduleHolder:shouldPerfLog:", moduleName="AccessibilityManager", moduleHolder=0x0000600003c8cbd8, shouldPerfLog=YES) at RCTTurboModuleManager.mm:571:9 frame #7: 0x00000001034a0488 RNTester`-[RCTTurboModuleManager _provideObjCModule:](self=0x00007fafac10e990, _cmd="_provideObjCModule:", moduleName="AccessibilityManager") at RCTTurboModuleManager.mm:517:32 frame #8: 0x00000001034a2cfa RNTester`-[RCTTurboModuleManager moduleForName:warnOnLookupFailure:](self=0x00007fafac10e990, _cmd="moduleForName:warnOnLookupFailure:", moduleName="AccessibilityManager", warnOnLookupFailure=NO) at RCTTurboModuleManager.mm:976:32 frame #9: 0x00000001030ba6aa RNTester`-[RCTCxxBridge moduleForName:lazilyLoadIfNecessary:](self=0x00007fafac105ab0, _cmd="moduleForName:lazilyLoadIfNecessary:", moduleName="AccessibilityManager", lazilyLoad=YES) at RCTCxxBridge.mm:568:35 frame #10: 0x000000010366db7c RNTester`-[RCTBaseTextInputViewManager setBridge:](self=0x0000600000b19d60, _cmd="setBridge:", bridge=0x00007fafac105ab0) at RCTBaseTextInputViewManager.mm:104:53 frame #11: 0x000000010a2c1796 Foundation`-[NSObject(NSKeyValueCoding) setValue:forKey:] + 278 frame #12: 0x0000000103116f42 RNTester`-[RCTModuleData setBridgeForInstance](self=0x0000600003eb58c0, _cmd="setBridgeForInstance") at RCTModuleData.mm:256:7 frame #13: 0x0000000103116971 RNTester`-[RCTModuleData setUpInstanceAndBridge:](self=0x0000600003eb58c0, _cmd="setUpInstanceAndBridge:", requestId=10) at RCTModuleData.mm:210:7 frame #14: 0x0000000103118990 RNTester`-[RCTModuleData instance](self=0x0000600003eb58c0, _cmd="instance") at RCTModuleData.mm:395:7 frame #15: 0x00000001030ba8b6 RNTester`-[RCTCxxBridge moduleForName:lazilyLoadIfNecessary:](self=0x00007fafac105ab0, _cmd="moduleForName:lazilyLoadIfNecessary:", moduleName="BaseTextInputViewManager", lazilyLoad=YES) at RCTCxxBridge.mm:587:23 frame #16: 0x00000001030bad90 RNTester`-[RCTCxxBridge moduleForClass:](self=0x00007fafac105ab0, _cmd="moduleForClass:", moduleClass=RCTBaseTextInputViewManager) at RCTCxxBridge.mm:631:10 frame #17: 0x000000010309bd59 RNTester`-[RCTComponentData manager](self=0x0000600002fbd920, _cmd="manager") at RCTComponentData.m:67:16 frame #18: 0x00000001030a2831 RNTester`-[RCTComponentData viewConfig](self=0x0000600002fbd920, _cmd="viewConfig") at RCTComponentData.m:518:3 frame #19: 0x0000000103180216 RNTester`moduleConstantsForComponentData(directEvents=7 key/value pairs, bubblingEvents=2 key/value pairs, componentData=0x0000600002fbd920) at RCTUIManager.m:1568:99 frame #20: 0x00000001031800ea RNTester`__28-[RCTUIManager getConstants]_block_invoke(.block_descriptor=0x00007000042d35d0, name=@"RCTBaseTextInputView", componentData=0x0000600002fbd920, stop=NO) at RCTUIManager.m:1586:13 frame #21: 0x000000010889d4fd CoreFoundation`__NSDICTIONARY_IS_CALLING_OUT_TO_A_BLOCK__ + 7 frame #22: 0x00000001089c9281 CoreFoundation`-[__NSDictionaryM enumerateKeysAndObjectsWithOptions:usingBlock:] + 249 frame #23: 0x000000010317feb7 RNTester`-[RCTUIManager getConstants](self=0x000060000206d0a0, _cmd="getConstants") at RCTUIManager.m:1582:3 frame #24: 0x000000010317fdb1 RNTester`-[RCTUIManager constantsToExport](self=0x000060000206d0a0, _cmd="constantsToExport") at RCTUIManager.m:1573:10 frame #25: 0x000000010311911b RNTester`-[RCTModuleData gatherConstantsAndSignalJSRequireEnding:](self=0x0000600003eb5500, _cmd="gatherConstantsAndSignalJSRequireEnding:", startMarkers=YES) at RCTModuleData.mm:462:28 frame #26: 0x00000001031193e9 RNTester`-[RCTModuleData exportedConstants](self=0x0000600003eb5500, _cmd="exportedConstants") at RCTModuleData.mm:477:3 frame #27: 0x0000000103125d09 RNTester`facebook::react::RCTNativeModule::getConstants(this=0x0000600000beac80) at RCTNativeModule.mm:68:42 frame #28: 0x000000010370a0f2 RNTester`facebook::react::ModuleRegistry::getConfig(this=0x0000600003e913a0, name="UIManager") at ModuleRegistry.cpp:154:30 frame #29: 0x0000000103797b6e RNTester`facebook::react::JSINativeModules::createModule(this=0x0000600002f8cf78, rt=0x0000600002f8d278, name="UIManager") at JSINativeModules.cpp:81:35 frame #30: 0x000000010379778c RNTester`facebook::react::JSINativeModules::getModule(this=0x0000600002f8cf78, rt=0x0000600002f8d278, name=0x00007000042d4138) at JSINativeModules.cpp:46:17 frame #31: 0x000000010378814a RNTester`facebook::react::JSIExecutor::NativeModuleProxy::get(this=0x000060000057ac88, rt=0x0000600002f8d278, name=0x00007000042d4138) at JSIExecutor.cpp:44:27 frame #32: 0x00000001037448d6 RNTester`facebook::jsi::DecoratedHostObject::get(this=0x0000600001e3e118, (null)=0x0000600003cb8630, name=0x00007000042d4138) at decorator.h:70:22 frame #33: 0x0000000109667ff7 hermes`facebook::hermes::HermesRuntimeImpl::JsiProxy::get(this=0x0000600000ba4d20, id=(id_ = 4435)) at hermes.cpp:698:20 [opt] frame #34: 0x00000001096e7436 hermes`hermes::vm::JSObject::getComputedWithReceiver_RJS(hermes::vm::Handle<hermes::vm::JSObject>, hermes::vm::Runtime&, hermes::vm::Handle<hermes::vm::HermesValue>, hermes::vm::Handle<hermes::vm::HermesValue>) [inlined] hermes::vm::HostObject::get(this=<unavailable>, name=<unavailable>) at HostModel.h:112:24 [opt] frame #35: 0x00000001096e742c hermes`hermes::vm::JSObject::getComputedWithReceiver_RJS(selfHandle=<unavailable>, runtime=0x00007fafae026000, nameValHandle=<unavailable>, receiver=Handle<hermes::vm::HermesValue> @ 0x00007000042d4190) at JSObject.cpp:1182:55 [opt] frame #36: 0x00000001096cc141 hermes`hermes::vm::CallResult<hermes::vm::HermesValue, (hermes::vm::detail::CallResultSpecialize)2> hermes::vm::Interpreter::interpretFunction<false, false>(hermes::vm::Runtime&, hermes::vm::InterpreterState&) [inlined] hermes::vm::JSObject::getComputed_RJS(selfHandle=<unavailable>, runtime=0x00007fafae026000, nameValHandle=<unavailable>) at JSObject.h:1940:10 [opt] frame #37: 0x00000001096cc12f hermes`hermes::vm::CallResult<hermes::vm::HermesValue, (hermes::vm::detail::CallResultSpecialize)2> hermes::vm::Interpreter::interpretFunction<false, false>(runtime=0x00007fafae026000, state=0x00007000042d4470) at Interpreter.cpp:2481:11 [opt] frame #38: 0x00000001096c84bc hermes`hermes::vm::Runtime::interpretFunctionImpl(this=0x00007fafae026000, newCodeBlock=0x0000600003068000) at Interpreter.cpp:825:12 [opt] frame #39: 0x000000010970fbc8 hermes`hermes::vm::Runtime::runBytecode(this=0x00007fafae026000, bytecode=<unavailable>, flags=<unavailable>, sourceURL=(Data = "http://localhost:8081/js/RNTesterApp.ios.bundle//&platform=ios&dev=true&lazy=true&minify=false&inlineSourceMap=false&modulesOnly=false&runModule=true&app=com.meta.RNTester.localDevelopment", Length = 188), environment=Handle<hermes::vm::Environment> @ 0x00007000042d44d0, thisArg=Handle<hermes::vm::HermesValue> @ 0x00007000042d4630) at Runtime.cpp:1079:11 [opt] frame #40: 0x000000010965ac1d hermes`facebook::hermes::HermesRuntimeImpl::evaluatePreparedJavaScript(std::__1::shared_ptr<facebook::jsi::PreparedJavaScript const> const&) [inlined] hermes::vm::Runtime::runBytecode(this=0x00007fafae026000, bytecode=nullptr, runtimeModuleFlags=RuntimeModuleFlags @ rbx, sourceURL=(Data = 0x0000000000000000, Length = 188), environment=<unavailable>) at Runtime.h:277:12 [opt] frame #41: 0x000000010965abe7 hermes`facebook::hermes::HermesRuntimeImpl::evaluatePreparedJavaScript(this=0x0000600003cb8630, js=std::__1::shared_ptr<const facebook::jsi::PreparedJavaScript>::element_type @ 0x00006000028d7038 strong=1 weak=1) at hermes.cpp:1494:23 [opt] frame #42: 0x000000010965aaa0 hermes`facebook::hermes::HermesRuntime::evaluateJavaScriptWithSourceMap(this=0x0000600003cb8630, buffer=std::__1::shared_ptr<const facebook::jsi::Buffer>::element_type @ 0x00006000009b4590 strong=2 weak=1, sourceMapBuf=nullptr, sourceURL=<unavailable>) at hermes.cpp:1361:22 [opt] frame #43: 0x000000010965bdef hermes`facebook::hermes::HermesRuntimeImpl::evaluateJavaScript(this=<unavailable>, buffer=<unavailable>, sourceURL=<unavailable>) at hermes.cpp:1506:10 [opt] frame #44: 0x0000000103742ef1 RNTester`facebook::jsi::RuntimeDecorator<facebook::jsi::Runtime, facebook::jsi::Runtime>::evaluateJavaScript(this=0x0000600002f8d278, buffer=std::__1::shared_ptr<const facebook::jsi::Buffer>::element_type @ 0x00006000009b4590 strong=2 weak=1, sourceURL="http://localhost:8081/js/RNTesterApp.ios.bundle//&platform=ios&dev=true&lazy=true&minify=false&inlineSourceMap=false&modulesOnly=false&runModule=true&app=com.meta.RNTester.localDevelopment") at decorator.h:118:20 frame #45: 0x000000010374086d RNTester`facebook::jsi::WithRuntimeDecorator<facebook::react::(anonymous namespace)::ReentrancyCheck, facebook::jsi::Runtime, facebook::jsi::Runtime>::evaluateJavaScript(this=0x0000600002f8d278, buffer=std::__1::shared_ptr<const facebook::jsi::Buffer>::element_type @ 0x00006000009b4590 strong=2 weak=1, sourceURL="http://localhost:8081/js/RNTesterApp.ios.bundle//&platform=ios&dev=true&lazy=true&minify=false&inlineSourceMap=false&modulesOnly=false&runModule=true&app=com.meta.RNTester.localDevelopment") at decorator.h:530:16 frame #46: 0x0000000103782c60 RNTester`facebook::react::JSIExecutor::loadBundle(this=0x00007fafabb07990, script=nullptr, sourceURL="http://localhost:8081/js/RNTesterApp.ios.bundle//&platform=ios&dev=true&lazy=true&minify=false&inlineSourceMap=false&modulesOnly=false&runModule=true&app=com.meta.RNTester.localDevelopment") at JSIExecutor.cpp:160:13 frame #47: 0x0000000103718719 RNTester`facebook::react::NativeToJsBridge::loadBundle(std::__1::unique_ptr<facebook::react::RAMBundleRegistry, std::__1::default_delete<facebook::react::RAMBundleRegistry>>, std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>)::$_1::operator()(this=0x0000600001e81fc8, executor=0x00007fafabb07990) at NativeToJsBridge.cpp:144:21 frame #48: 0x0000000103718600 RNTester`decltype(std::declval<facebook::react::NativeToJsBridge::loadBundle(std::__1::unique_ptr<facebook::react::RAMBundleRegistry, std::__1::default_delete<facebook::react::RAMBundleRegistry>>, std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>)::$_1&>()(std::declval<facebook::react::JSExecutor*>())) std::__1::__invoke[abi:v160006]<facebook::react::NativeToJsBridge::loadBundle(std::__1::unique_ptr<facebook::react::RAMBundleRegistry, std::__1::default_delete<facebook::react::RAMBundleRegistry>>, std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>)::$_1&, facebook::react::JSExecutor*>(__f=0x0000600001e81fc8, __args=0x00007000042d4aa0) at invoke.h:394:23 frame #49: 0x00000001037185ad RNTester`void std::__1::__invoke_void_return_wrapper<void, true>::__call<facebook::react::NativeToJsBridge::loadBundle(std::__1::unique_ptr<facebook::react::RAMBundleRegistry, std::__1::default_delete<facebook::react::RAMBundleRegistry>>, std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>)::$_1&, facebook::react::JSExecutor*>(__args=0x0000600001e81fc8, __args=0x00007000042d4aa0) at invoke.h:487:9 frame #50: 0x0000000103718585 RNTester`std::__1::__function::__alloc_func<facebook::react::NativeToJsBridge::loadBundle(std::__1::unique_ptr<facebook::react::RAMBundleRegistry, std::__1::default_delete<facebook::react::RAMBundleRegistry>>, std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>)::$_1, std::__1::allocator<facebook::react::NativeToJsBridge::loadBundle(std::__1::unique_ptr<facebook::react::RAMBundleRegistry, std::__1::default_delete<facebook::react::RAMBundleRegistry>>, std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>)::$_1>, void (facebook::react::JSExecutor*)>::operator()[abi:v160006](this=0x0000600001e81fc8, __arg=0x00007000042d4aa0) at function.h:185:16 frame #51: 0x0000000103717311 RNTester`std::__1::__function::__func<facebook::react::NativeToJsBridge::loadBundle(std::__1::unique_ptr<facebook::react::RAMBundleRegistry, std::__1::default_delete<facebook::react::RAMBundleRegistry>>, std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>)::$_1, std::__1::allocator<facebook::react::NativeToJsBridge::loadBundle(std::__1::unique_ptr<facebook::react::RAMBundleRegistry, std::__1::default_delete<facebook::react::RAMBundleRegistry>>, std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>)::$_1>, void (facebook::react::JSExecutor*)>::operator()(this=0x0000600001e81fc0, __arg=0x00007000042d4aa0) at function.h:356:12 frame #52: 0x0000000103723f2a RNTester`std::__1::__function::__value_func<void (facebook::react::JSExecutor*)>::operator()[abi:v160006](this=0x0000600002fad4d0, __args=0x00007000042d4aa0) const at function.h:510:16 frame #53: 0x0000000103723ebd RNTester`std::__1::function<void (facebook::react::JSExecutor*)>::operator()(this=0x0000600002fad4d0, __arg=0x00007fafabb07990) const at function.h:1156:12 frame #54: 0x0000000103723e97 RNTester`facebook::react::NativeToJsBridge::runOnExecutorQueue(std::__1::function<void (facebook::react::JSExecutor*)>&&)::$_8::operator()(this=0x0000600002fad4b0) const at NativeToJsBridge.cpp:308:9 frame #55: 0x0000000103723e35 RNTester`decltype(std::declval<facebook::react::NativeToJsBridge::runOnExecutorQueue(std::__1::function<void (facebook::react::JSExecutor*)>&&)::$_8&>()()) std::__1::__invoke[abi:v160006]<facebook::react::NativeToJsBridge::runOnExecutorQueue(std::__1::function<void (facebook::react::JSExecutor*)>&&)::$_8&>(__f=0x0000600002fad4b0) at invoke.h:394:23 frame #56: 0x0000000103723df5 RNTester`void std::__1::__invoke_void_return_wrapper<void, true>::__call<facebook::react::NativeToJsBridge::runOnExecutorQueue(std::__1::function<void (facebook::react::JSExecutor*)>&&)::$_8&>(__args=0x0000600002fad4b0) at invoke.h:487:9 frame #57: 0x0000000103723dcd RNTester`std::__1::__function::__alloc_func<facebook::react::NativeToJsBridge::runOnExecutorQueue(std::__1::function<void (facebook::react::JSExecutor*)>&&)::$_8, std::__1::allocator<facebook::react::NativeToJsBridge::runOnExecutorQueue(std::__1::function<void (facebook::react::JSExecutor*)>&&)::$_8>, void ()>::operator()[abi:v160006](this=0x0000600002fad4b0) at function.h:185:16 frame #58: 0x0000000103722b89 RNTester`std::__1::__function::__func<facebook::react::NativeToJsBridge::runOnExecutorQueue(std::__1::function<void (facebook::react::JSExecutor*)>&&)::$_8, std::__1::allocator<facebook::react::NativeToJsBridge::runOnExecutorQueue(std::__1::function<void (facebook::react::JSExecutor*)>&&)::$_8>, void ()>::operator()(this=0x0000600002fad4a0) at function.h:356:12 frame #59: 0x00000001030cdd72 RNTester`std::__1::__function::__value_func<void ()>::operator()[abi:v160006](this=0x00006000028f85c0) const at function.h:510:16 frame #60: 0x00000001030cdd35 RNTester`std::__1::function<void ()>::operator()(this= Lambda in File NativeToJsBridge.cpp at Line 298) const at function.h:1156:12 frame #61: 0x00000001030e1145 RNTester`facebook::react::tryAndReturnError(func= Lambda in File NativeToJsBridge.cpp at Line 298) at RCTCxxUtils.mm:73:7 frame #62: 0x000000010310a5c1 RNTester`facebook::react::RCTMessageThread::tryFunc(this=0x00006000028f0018, func= Lambda in File NativeToJsBridge.cpp at Line 298) at RCTMessageThread.mm:68:20 frame #63: 0x000000010310e823 RNTester`facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1::operator()(this=0x0000600000538d88) const at RCTMessageThread.mm:81:19 frame #64: 0x000000010310e7c5 RNTester`decltype(std::declval<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1&>()()) std::__1::__invoke[abi:v160006]<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1&>(__f=0x0000600000538d88) at invoke.h:394:23 frame #65: 0x000000010310e785 RNTester`void std::__1::__invoke_void_return_wrapper<void, true>::__call<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1&>(__args=0x0000600000538d88) at invoke.h:487:9 frame #66: 0x000000010310e75d RNTester`std::__1::__function::__alloc_func<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1, std::__1::allocator<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1>, void ()>::operator()[abi:v160006](this=0x0000600000538d88) at function.h:185:16 frame #67: 0x000000010310d709 RNTester`std::__1::__function::__func<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1, std::__1::allocator<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1>, void ()>::operator()(this=0x0000600000538d80) at function.h:356:12 frame #68: 0x00000001030cdd72 RNTester`std::__1::__function::__value_func<void ()>::operator()[abi:v160006](this=0x00006000028fa690) const at function.h:510:16 frame #69: 0x00000001030cdd35 RNTester`std::__1::function<void ()>::operator()(this= Lambda in File RCTMessageThread.mm at Line 79) const at function.h:1156:12 frame #70: 0x000000010310a39a RNTester`invocation function for block in facebook::react::RCTMessageThread::runAsync(.block_descriptor=0x00006000028fa670) at RCTMessageThread.mm:44:7 frame #71: 0x00000001088b4b06 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12 frame #72: 0x00000001088b42b9 CoreFoundation`__CFRunLoopDoBlocks + 391 frame #73: 0x00000001088af076 CoreFoundation`__CFRunLoopRun + 2186 frame #74: 0x00000001088ae409 CoreFoundation`CFRunLoopRunSpecific + 557 frame #75: 0x00000001030b6ec5 RNTester`+[RCTCxxBridge runRunLoop](self=RCTCxxBridge, _cmd="runRunLoop") at RCTCxxBridge.mm:332:12 frame #76: 0x000000010a377699 Foundation`__NSThread__start__ + 1024 frame #77: 0x000000010d5f4202 libsystem_pthread.dylib`_pthread_start + 99 frame #78: 0x000000010d5efbab libsystem_pthread.dylib`thread_start + 15 thread #10, name = 'hades' frame #0: 0x000000010d66a5d6 libsystem_kernel.dylib`__psynch_cvwait + 10 frame #1: 0x000000010d5f476b libsystem_pthread.dylib`_pthread_cond_wait + 1211 frame #2: 0x000000010761dfe2 libc++.1.dylib`std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18 frame #3: 0x00000001097aee78 hermes`hermes::vm::HadesGC::Executor::worker() [inlined] void std::__1::condition_variable::wait<hermes::vm::HadesGC::Executor::worker()::'lambda'()>(this=0x0000600003cb8300, __lk=0x0000700004358f20, __pred=(unnamed class) @ rbx) at __mutex_base:400:9 [opt] frame #4: 0x00000001097aee5a hermes`hermes::vm::HadesGC::Executor::worker(this=0x0000600003cb82c0) at HadesGC.cpp:1084:11 [opt] frame #5: 0x00000001097aedba hermes`void* std::__1::__thread_proxy[abi:v160006]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, hermes::vm::HadesGC::Executor::Executor()::'lambda'()>>(void*) [inlined] hermes::vm::HadesGC::Executor::Executor(this=0x00006000009a8ba8)::'lambda'()::operator()() const at HadesGC.cpp:1051:33 [opt] frame #6: 0x00000001097aedb5 hermes`void* std::__1::__thread_proxy[abi:v160006]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, hermes::vm::HadesGC::Executor::Executor()::'lambda'()>>(void*) [inlined] decltype(std::declval<hermes::vm::HadesGC::Executor::Executor()::'lambda'()>()()) std::__1::__invoke[abi:v160006]<hermes::vm::HadesGC::Executor::Executor()::'lambda'()>(__f=0x00006000009a8ba8) at invoke.h:394:23 [opt] frame #7: 0x00000001097aedb5 hermes`void* std::__1::__thread_proxy[abi:v160006]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, hermes::vm::HadesGC::Executor::Executor()::'lambda'()>>(void*) [inlined] void std::__1::__thread_execute[abi:v160006]<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, hermes::vm::HadesGC::Executor::Executor()::'lambda'()>(__t=size=2, (null)=<unavailable>) at thread:288:5 [opt] frame #8: 0x00000001097aedb5 hermes`void* std::__1::__thread_proxy[abi:v160006]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, hermes::vm::HadesGC::Executor::Executor()::'lambda'()>>(__vp=0x00006000009a8ba0) at thread:299:5 [opt] frame #9: 0x000000010d5f4202 libsystem_pthread.dylib`_pthread_start + 99 frame #10: 0x000000010d5efbab libsystem_pthread.dylib`thread_start + 15 thread #11, name = 'com.apple.CFStream.LegacyThread' frame #0: 0x000000010d667a2e libsystem_kernel.dylib`mach_msg2_trap + 10 frame #1: 0x000000010d675e4a libsystem_kernel.dylib`mach_msg2_internal + 84 frame #2: 0x000000010d66eb6e libsystem_kernel.dylib`mach_msg_overwrite + 653 frame #3: 0x000000010d667d1f libsystem_kernel.dylib`mach_msg + 19 frame #4: 0x00000001088b45bf CoreFoundation`__CFRunLoopServiceMachPort + 143 frame #5: 0x00000001088aed47 CoreFoundation`__CFRunLoopRun + 1371 frame #6: 0x00000001088ae409 CoreFoundation`CFRunLoopRunSpecific + 557 frame #7: 0x00000001088d1e34 CoreFoundation`_legacyStreamRunLoop_workThread + 251 frame #8: 0x000000010d5f4202 libsystem_pthread.dylib`_pthread_start + 99 frame #9: 0x000000010d5efbab libsystem_pthread.dylib`thread_start + 15 thread #12, name = 'com.facebook.SocketRocket.NetworkThread' frame #0: 0x000000010d667a2e libsystem_kernel.dylib`mach_msg2_trap + 10 frame #1: 0x000000010d675e4a libsystem_kernel.dylib`mach_msg2_internal + 84 frame #2: 0x000000010d66eb6e libsystem_kernel.dylib`mach_msg_overwrite + 653 frame #3: 0x000000010d667d1f libsystem_kernel.dylib`mach_msg + 19 frame #4: 0x00000001088b45bf CoreFoundation`__CFRunLoopServiceMachPort + 143 frame #5: 0x00000001088aed47 CoreFoundation`__CFRunLoopRun + 1371 frame #6: 0x00000001088ae409 CoreFoundation`CFRunLoopRunSpecific + 557 frame #7: 0x000000010a34ceee Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 213 frame #8: 0x000000010381a49b RNTester`-[SRRunLoopThread main](self=0x00006000028e80f0, _cmd="main") at SRRunLoopThread.m:71:16 frame #9: 0x000000010a377699 Foundation`__NSThread__start__ + 1024 frame #10: 0x000000010d5f4202 libsystem_pthread.dylib`_pthread_start + 99 frame #11: 0x000000010d5efbab libsystem_pthread.dylib`thread_start + 15 thread #13 frame #0: 0x000000010d5efb88 libsystem_pthread.dylib`start_wqthread thread #14, name = 'com.apple.NSURLConnectionLoader' frame #0: 0x000000010d667a2e libsystem_kernel.dylib`mach_msg2_trap + 10 frame #1: 0x000000010d675e4a libsystem_kernel.dylib`mach_msg2_internal + 84 frame #2: 0x000000010d66eb6e libsystem_kernel.dylib`mach_msg_overwrite + 653 frame #3: 0x000000010d667d1f libsystem_kernel.dylib`mach_msg + 19 frame #4: 0x00000001088b45bf CoreFoundation`__CFRunLoopServiceMachPort + 143 frame #5: 0x00000001088aed47 CoreFoundation`__CFRunLoopRun + 1371 frame #6: 0x00000001088ae409 CoreFoundation`CFRunLoopRunSpecific + 557 frame #7: 0x00000001093cf78b CFNetwork`___lldb_unnamed_symbol13826 + 444 frame #8: 0x000000010a377699 Foundation`__NSThread__start__ + 1024 frame #9: 0x000000010d5f4202 libsystem_pthread.dylib`_pthread_start + 99 frame #10: 0x000000010d5efbab libsystem_pthread.dylib`thread_start + 15 thread #15, name = 'com.apple.CFSocket.private' frame #0: 0x000000010d670922 libsystem_kernel.dylib`__select + 10 frame #1: 0x00000001088c2dcf CoreFoundation`__CFSocketManager + 643 frame #2: 0x000000010d5f4202 libsystem_pthread.dylib`_pthread_start + 99 frame #3: 0x000000010d5efbab libsystem_pthread.dylib`thread_start + 15 ``` ## Changelog: [IOS] [FIXED] - Fix module create dead-lock when start-up Pull Request resolved: #41194 Test Plan: Null. Reviewed By: javache Differential Revision: D50800290 Pulled By: sammy-SC fbshipit-source-id: b60b8e0681cbec7b7aa8812188c9f7ea5f03966b
Summary: `UIManager` gets module deadlock when start-up randomly. I think we can move it to the secondary thread safely. ``` (lldb) bt all * thread facebook#1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP frame #0: 0x000000010d66a5d6 libsystem_kernel.dylib`__psynch_cvwait + 10 frame facebook#1: 0x000000010d5f476b libsystem_pthread.dylib`_pthread_cond_wait + 1211 frame facebook#2: 0x000000010761dfe2 libc++.1.dylib`std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18 frame facebook#3: 0x00000001034a0a52 RNTester`-[RCTTurboModuleManager _provideObjCModule:moduleHolder:shouldPerfLog:](self=0x00007fafac10e990, _cmd="_provideObjCModule:moduleHolder:shouldPerfLog:", moduleName="AccessibilityManager", moduleHolder=0x0000600003c8cbd8, shouldPerfLog=YES) at RCTTurboModuleManager.mm:599:24 frame facebook#4: 0x00000001034a0488 RNTester`-[RCTTurboModuleManager _provideObjCModule:](self=0x00007fafac10e990, _cmd="_provideObjCModule:", moduleName="AccessibilityManager") at RCTTurboModuleManager.mm:517:32 frame facebook#5: 0x00000001034a2cfa RNTester`-[RCTTurboModuleManager moduleForName:warnOnLookupFailure:](self=0x00007fafac10e990, _cmd="moduleForName:warnOnLookupFailure:", moduleName="AccessibilityManager", warnOnLookupFailure=NO) at RCTTurboModuleManager.mm:976:32 frame facebook#6: 0x00000001030ba6aa RNTester`-[RCTCxxBridge moduleForName:lazilyLoadIfNecessary:](self=0x00007fafac105ab0, _cmd="moduleForName:lazilyLoadIfNecessary:", moduleName="AccessibilityManager", lazilyLoad=YES) at RCTCxxBridge.mm:568:35 * frame facebook#7: 0x000000010316fa38 RNTester`__26-[RCTUIManager setBridge:]_block_invoke(.block_descriptor=0x000060000055cb40) at RCTUIManager.m:188:55 frame facebook#8: 0x00000001090cc747 libdispatch.dylib`_dispatch_call_block_and_release + 12 frame facebook#9: 0x00000001090cd9f7 libdispatch.dylib`_dispatch_client_callout + 8 frame facebook#10: 0x00000001090dd856 libdispatch.dylib`_dispatch_main_queue_drain + 1362 frame facebook#11: 0x00000001090dd2f6 libdispatch.dylib`_dispatch_main_queue_callback_4CF + 31 frame facebook#12: 0x00000001088b4850 CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9 frame facebook#13: 0x00000001088af18b CoreFoundation`__CFRunLoopRun + 2463 frame facebook#14: 0x00000001088ae409 CoreFoundation`CFRunLoopRunSpecific + 557 frame facebook#15: 0x0000000114ede187 GraphicsServices`GSEventRunModal + 137 frame facebook#16: 0x0000000128be53a2 UIKitCore`-[UIApplication _run] + 972 frame facebook#17: 0x0000000128be9e10 UIKitCore`UIApplicationMain + 123 frame facebook#18: 0x0000000102fb7000 RNTester`main(argc=1, argv=0x00007ff7bcf4fce8) at main.m:15:12 frame facebook#19: 0x00000001069023ee dyld_sim`start_sim + 10 frame facebook#20: 0x000000010ea223a6 dyld`start + 1942 thread facebook#6, name = 'com.apple.uikit.eventfetch-thread' frame #0: 0x000000010d667a2e libsystem_kernel.dylib`mach_msg2_trap + 10 frame facebook#1: 0x000000010d675e4a libsystem_kernel.dylib`mach_msg2_internal + 84 frame facebook#2: 0x000000010d66eb6e libsystem_kernel.dylib`mach_msg_overwrite + 653 frame facebook#3: 0x000000010d667d1f libsystem_kernel.dylib`mach_msg + 19 frame facebook#4: 0x00000001088b45bf CoreFoundation`__CFRunLoopServiceMachPort + 143 frame facebook#5: 0x00000001088aed47 CoreFoundation`__CFRunLoopRun + 1371 frame facebook#6: 0x00000001088ae409 CoreFoundation`CFRunLoopRunSpecific + 557 frame facebook#7: 0x000000010a34ceee Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 213 frame facebook#8: 0x000000010a34d16c Foundation`-[NSRunLoop(NSRunLoop) runUntilDate:] + 72 frame facebook#9: 0x0000000128cbd797 UIKitCore`-[UIEventFetcher threadMain] + 518 frame facebook#10: 0x000000010a377699 Foundation`__NSThread__start__ + 1024 frame facebook#11: 0x000000010d5f4202 libsystem_pthread.dylib`_pthread_start + 99 frame facebook#12: 0x000000010d5efbab libsystem_pthread.dylib`thread_start + 15 thread facebook#9, name = 'com.facebook.react.JavaScript' frame #0: 0x000000010d6691e2 libsystem_kernel.dylib`__ulock_wait + 10 frame facebook#1: 0x00000001090ce319 libdispatch.dylib`_dlock_wait + 46 frame facebook#2: 0x00000001090ce170 libdispatch.dylib`_dispatch_thread_event_wait_slow + 40 frame facebook#3: 0x00000001090debb2 libdispatch.dylib`__DISPATCH_WAIT_FOR_QUEUE__ + 371 frame facebook#4: 0x00000001090de5c9 libdispatch.dylib`_dispatch_sync_f_slow + 240 frame facebook#5: 0x00000001031847cb RNTester`RCTUnsafeExecuteOnMainQueueSync(block=0x00000001034a0bf0) at RCTUtils.m:277:5 frame facebook#6: 0x00000001034a0863 RNTester`-[RCTTurboModuleManager _provideObjCModule:moduleHolder:shouldPerfLog:](self=0x00007fafac10e990, _cmd="_provideObjCModule:moduleHolder:shouldPerfLog:", moduleName="AccessibilityManager", moduleHolder=0x0000600003c8cbd8, shouldPerfLog=YES) at RCTTurboModuleManager.mm:571:9 frame facebook#7: 0x00000001034a0488 RNTester`-[RCTTurboModuleManager _provideObjCModule:](self=0x00007fafac10e990, _cmd="_provideObjCModule:", moduleName="AccessibilityManager") at RCTTurboModuleManager.mm:517:32 frame facebook#8: 0x00000001034a2cfa RNTester`-[RCTTurboModuleManager moduleForName:warnOnLookupFailure:](self=0x00007fafac10e990, _cmd="moduleForName:warnOnLookupFailure:", moduleName="AccessibilityManager", warnOnLookupFailure=NO) at RCTTurboModuleManager.mm:976:32 frame facebook#9: 0x00000001030ba6aa RNTester`-[RCTCxxBridge moduleForName:lazilyLoadIfNecessary:](self=0x00007fafac105ab0, _cmd="moduleForName:lazilyLoadIfNecessary:", moduleName="AccessibilityManager", lazilyLoad=YES) at RCTCxxBridge.mm:568:35 frame facebook#10: 0x000000010366db7c RNTester`-[RCTBaseTextInputViewManager setBridge:](self=0x0000600000b19d60, _cmd="setBridge:", bridge=0x00007fafac105ab0) at RCTBaseTextInputViewManager.mm:104:53 frame facebook#11: 0x000000010a2c1796 Foundation`-[NSObject(NSKeyValueCoding) setValue:forKey:] + 278 frame facebook#12: 0x0000000103116f42 RNTester`-[RCTModuleData setBridgeForInstance](self=0x0000600003eb58c0, _cmd="setBridgeForInstance") at RCTModuleData.mm:256:7 frame facebook#13: 0x0000000103116971 RNTester`-[RCTModuleData setUpInstanceAndBridge:](self=0x0000600003eb58c0, _cmd="setUpInstanceAndBridge:", requestId=10) at RCTModuleData.mm:210:7 frame facebook#14: 0x0000000103118990 RNTester`-[RCTModuleData instance](self=0x0000600003eb58c0, _cmd="instance") at RCTModuleData.mm:395:7 frame facebook#15: 0x00000001030ba8b6 RNTester`-[RCTCxxBridge moduleForName:lazilyLoadIfNecessary:](self=0x00007fafac105ab0, _cmd="moduleForName:lazilyLoadIfNecessary:", moduleName="BaseTextInputViewManager", lazilyLoad=YES) at RCTCxxBridge.mm:587:23 frame facebook#16: 0x00000001030bad90 RNTester`-[RCTCxxBridge moduleForClass:](self=0x00007fafac105ab0, _cmd="moduleForClass:", moduleClass=RCTBaseTextInputViewManager) at RCTCxxBridge.mm:631:10 frame facebook#17: 0x000000010309bd59 RNTester`-[RCTComponentData manager](self=0x0000600002fbd920, _cmd="manager") at RCTComponentData.m:67:16 frame facebook#18: 0x00000001030a2831 RNTester`-[RCTComponentData viewConfig](self=0x0000600002fbd920, _cmd="viewConfig") at RCTComponentData.m:518:3 frame facebook#19: 0x0000000103180216 RNTester`moduleConstantsForComponentData(directEvents=7 key/value pairs, bubblingEvents=2 key/value pairs, componentData=0x0000600002fbd920) at RCTUIManager.m:1568:99 frame facebook#20: 0x00000001031800ea RNTester`__28-[RCTUIManager getConstants]_block_invoke(.block_descriptor=0x00007000042d35d0, name=@"RCTBaseTextInputView", componentData=0x0000600002fbd920, stop=NO) at RCTUIManager.m:1586:13 frame facebook#21: 0x000000010889d4fd CoreFoundation`__NSDICTIONARY_IS_CALLING_OUT_TO_A_BLOCK__ + 7 frame facebook#22: 0x00000001089c9281 CoreFoundation`-[__NSDictionaryM enumerateKeysAndObjectsWithOptions:usingBlock:] + 249 frame facebook#23: 0x000000010317feb7 RNTester`-[RCTUIManager getConstants](self=0x000060000206d0a0, _cmd="getConstants") at RCTUIManager.m:1582:3 frame facebook#24: 0x000000010317fdb1 RNTester`-[RCTUIManager constantsToExport](self=0x000060000206d0a0, _cmd="constantsToExport") at RCTUIManager.m:1573:10 frame facebook#25: 0x000000010311911b RNTester`-[RCTModuleData gatherConstantsAndSignalJSRequireEnding:](self=0x0000600003eb5500, _cmd="gatherConstantsAndSignalJSRequireEnding:", startMarkers=YES) at RCTModuleData.mm:462:28 frame facebook#26: 0x00000001031193e9 RNTester`-[RCTModuleData exportedConstants](self=0x0000600003eb5500, _cmd="exportedConstants") at RCTModuleData.mm:477:3 frame facebook#27: 0x0000000103125d09 RNTester`facebook::react::RCTNativeModule::getConstants(this=0x0000600000beac80) at RCTNativeModule.mm:68:42 frame facebook#28: 0x000000010370a0f2 RNTester`facebook::react::ModuleRegistry::getConfig(this=0x0000600003e913a0, name="UIManager") at ModuleRegistry.cpp:154:30 frame facebook#29: 0x0000000103797b6e RNTester`facebook::react::JSINativeModules::createModule(this=0x0000600002f8cf78, rt=0x0000600002f8d278, name="UIManager") at JSINativeModules.cpp:81:35 frame facebook#30: 0x000000010379778c RNTester`facebook::react::JSINativeModules::getModule(this=0x0000600002f8cf78, rt=0x0000600002f8d278, name=0x00007000042d4138) at JSINativeModules.cpp:46:17 frame facebook#31: 0x000000010378814a RNTester`facebook::react::JSIExecutor::NativeModuleProxy::get(this=0x000060000057ac88, rt=0x0000600002f8d278, name=0x00007000042d4138) at JSIExecutor.cpp:44:27 frame facebook#32: 0x00000001037448d6 RNTester`facebook::jsi::DecoratedHostObject::get(this=0x0000600001e3e118, (null)=0x0000600003cb8630, name=0x00007000042d4138) at decorator.h:70:22 frame facebook#33: 0x0000000109667ff7 hermes`facebook::hermes::HermesRuntimeImpl::JsiProxy::get(this=0x0000600000ba4d20, id=(id_ = 4435)) at hermes.cpp:698:20 [opt] frame facebook#34: 0x00000001096e7436 hermes`hermes::vm::JSObject::getComputedWithReceiver_RJS(hermes::vm::Handle<hermes::vm::JSObject>, hermes::vm::Runtime&, hermes::vm::Handle<hermes::vm::HermesValue>, hermes::vm::Handle<hermes::vm::HermesValue>) [inlined] hermes::vm::HostObject::get(this=<unavailable>, name=<unavailable>) at HostModel.h:112:24 [opt] frame facebook#35: 0x00000001096e742c hermes`hermes::vm::JSObject::getComputedWithReceiver_RJS(selfHandle=<unavailable>, runtime=0x00007fafae026000, nameValHandle=<unavailable>, receiver=Handle<hermes::vm::HermesValue> @ 0x00007000042d4190) at JSObject.cpp:1182:55 [opt] frame facebook#36: 0x00000001096cc141 hermes`hermes::vm::CallResult<hermes::vm::HermesValue, (hermes::vm::detail::CallResultSpecialize)2> hermes::vm::Interpreter::interpretFunction<false, false>(hermes::vm::Runtime&, hermes::vm::InterpreterState&) [inlined] hermes::vm::JSObject::getComputed_RJS(selfHandle=<unavailable>, runtime=0x00007fafae026000, nameValHandle=<unavailable>) at JSObject.h:1940:10 [opt] frame facebook#37: 0x00000001096cc12f hermes`hermes::vm::CallResult<hermes::vm::HermesValue, (hermes::vm::detail::CallResultSpecialize)2> hermes::vm::Interpreter::interpretFunction<false, false>(runtime=0x00007fafae026000, state=0x00007000042d4470) at Interpreter.cpp:2481:11 [opt] frame facebook#38: 0x00000001096c84bc hermes`hermes::vm::Runtime::interpretFunctionImpl(this=0x00007fafae026000, newCodeBlock=0x0000600003068000) at Interpreter.cpp:825:12 [opt] frame facebook#39: 0x000000010970fbc8 hermes`hermes::vm::Runtime::runBytecode(this=0x00007fafae026000, bytecode=<unavailable>, flags=<unavailable>, sourceURL=(Data = "http://localhost:8081/js/RNTesterApp.ios.bundle//&platform=ios&dev=true&lazy=true&minify=false&inlineSourceMap=false&modulesOnly=false&runModule=true&app=com.meta.RNTester.localDevelopment", Length = 188), environment=Handle<hermes::vm::Environment> @ 0x00007000042d44d0, thisArg=Handle<hermes::vm::HermesValue> @ 0x00007000042d4630) at Runtime.cpp:1079:11 [opt] frame facebook#40: 0x000000010965ac1d hermes`facebook::hermes::HermesRuntimeImpl::evaluatePreparedJavaScript(std::__1::shared_ptr<facebook::jsi::PreparedJavaScript const> const&) [inlined] hermes::vm::Runtime::runBytecode(this=0x00007fafae026000, bytecode=nullptr, runtimeModuleFlags=RuntimeModuleFlags @ rbx, sourceURL=(Data = 0x0000000000000000, Length = 188), environment=<unavailable>) at Runtime.h:277:12 [opt] frame facebook#41: 0x000000010965abe7 hermes`facebook::hermes::HermesRuntimeImpl::evaluatePreparedJavaScript(this=0x0000600003cb8630, js=std::__1::shared_ptr<const facebook::jsi::PreparedJavaScript>::element_type @ 0x00006000028d7038 strong=1 weak=1) at hermes.cpp:1494:23 [opt] frame facebook#42: 0x000000010965aaa0 hermes`facebook::hermes::HermesRuntime::evaluateJavaScriptWithSourceMap(this=0x0000600003cb8630, buffer=std::__1::shared_ptr<const facebook::jsi::Buffer>::element_type @ 0x00006000009b4590 strong=2 weak=1, sourceMapBuf=nullptr, sourceURL=<unavailable>) at hermes.cpp:1361:22 [opt] frame facebook#43: 0x000000010965bdef hermes`facebook::hermes::HermesRuntimeImpl::evaluateJavaScript(this=<unavailable>, buffer=<unavailable>, sourceURL=<unavailable>) at hermes.cpp:1506:10 [opt] frame facebook#44: 0x0000000103742ef1 RNTester`facebook::jsi::RuntimeDecorator<facebook::jsi::Runtime, facebook::jsi::Runtime>::evaluateJavaScript(this=0x0000600002f8d278, buffer=std::__1::shared_ptr<const facebook::jsi::Buffer>::element_type @ 0x00006000009b4590 strong=2 weak=1, sourceURL="http://localhost:8081/js/RNTesterApp.ios.bundle//&platform=ios&dev=true&lazy=true&minify=false&inlineSourceMap=false&modulesOnly=false&runModule=true&app=com.meta.RNTester.localDevelopment") at decorator.h:118:20 frame facebook#45: 0x000000010374086d RNTester`facebook::jsi::WithRuntimeDecorator<facebook::react::(anonymous namespace)::ReentrancyCheck, facebook::jsi::Runtime, facebook::jsi::Runtime>::evaluateJavaScript(this=0x0000600002f8d278, buffer=std::__1::shared_ptr<const facebook::jsi::Buffer>::element_type @ 0x00006000009b4590 strong=2 weak=1, sourceURL="http://localhost:8081/js/RNTesterApp.ios.bundle//&platform=ios&dev=true&lazy=true&minify=false&inlineSourceMap=false&modulesOnly=false&runModule=true&app=com.meta.RNTester.localDevelopment") at decorator.h:530:16 frame facebook#46: 0x0000000103782c60 RNTester`facebook::react::JSIExecutor::loadBundle(this=0x00007fafabb07990, script=nullptr, sourceURL="http://localhost:8081/js/RNTesterApp.ios.bundle//&platform=ios&dev=true&lazy=true&minify=false&inlineSourceMap=false&modulesOnly=false&runModule=true&app=com.meta.RNTester.localDevelopment") at JSIExecutor.cpp:160:13 frame facebook#47: 0x0000000103718719 RNTester`facebook::react::NativeToJsBridge::loadBundle(std::__1::unique_ptr<facebook::react::RAMBundleRegistry, std::__1::default_delete<facebook::react::RAMBundleRegistry>>, std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>)::$_1::operator()(this=0x0000600001e81fc8, executor=0x00007fafabb07990) at NativeToJsBridge.cpp:144:21 frame facebook#48: 0x0000000103718600 RNTester`decltype(std::declval<facebook::react::NativeToJsBridge::loadBundle(std::__1::unique_ptr<facebook::react::RAMBundleRegistry, std::__1::default_delete<facebook::react::RAMBundleRegistry>>, std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>)::$_1&>()(std::declval<facebook::react::JSExecutor*>())) std::__1::__invoke[abi:v160006]<facebook::react::NativeToJsBridge::loadBundle(std::__1::unique_ptr<facebook::react::RAMBundleRegistry, std::__1::default_delete<facebook::react::RAMBundleRegistry>>, std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>)::$_1&, facebook::react::JSExecutor*>(__f=0x0000600001e81fc8, __args=0x00007000042d4aa0) at invoke.h:394:23 frame facebook#49: 0x00000001037185ad RNTester`void std::__1::__invoke_void_return_wrapper<void, true>::__call<facebook::react::NativeToJsBridge::loadBundle(std::__1::unique_ptr<facebook::react::RAMBundleRegistry, std::__1::default_delete<facebook::react::RAMBundleRegistry>>, std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>)::$_1&, facebook::react::JSExecutor*>(__args=0x0000600001e81fc8, __args=0x00007000042d4aa0) at invoke.h:487:9 frame facebook#50: 0x0000000103718585 RNTester`std::__1::__function::__alloc_func<facebook::react::NativeToJsBridge::loadBundle(std::__1::unique_ptr<facebook::react::RAMBundleRegistry, std::__1::default_delete<facebook::react::RAMBundleRegistry>>, std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>)::$_1, std::__1::allocator<facebook::react::NativeToJsBridge::loadBundle(std::__1::unique_ptr<facebook::react::RAMBundleRegistry, std::__1::default_delete<facebook::react::RAMBundleRegistry>>, std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>)::$_1>, void (facebook::react::JSExecutor*)>::operator()[abi:v160006](this=0x0000600001e81fc8, __arg=0x00007000042d4aa0) at function.h:185:16 frame facebook#51: 0x0000000103717311 RNTester`std::__1::__function::__func<facebook::react::NativeToJsBridge::loadBundle(std::__1::unique_ptr<facebook::react::RAMBundleRegistry, std::__1::default_delete<facebook::react::RAMBundleRegistry>>, std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>)::$_1, std::__1::allocator<facebook::react::NativeToJsBridge::loadBundle(std::__1::unique_ptr<facebook::react::RAMBundleRegistry, std::__1::default_delete<facebook::react::RAMBundleRegistry>>, std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>)::$_1>, void (facebook::react::JSExecutor*)>::operator()(this=0x0000600001e81fc0, __arg=0x00007000042d4aa0) at function.h:356:12 frame facebook#52: 0x0000000103723f2a RNTester`std::__1::__function::__value_func<void (facebook::react::JSExecutor*)>::operator()[abi:v160006](this=0x0000600002fad4d0, __args=0x00007000042d4aa0) const at function.h:510:16 frame facebook#53: 0x0000000103723ebd RNTester`std::__1::function<void (facebook::react::JSExecutor*)>::operator()(this=0x0000600002fad4d0, __arg=0x00007fafabb07990) const at function.h:1156:12 frame facebook#54: 0x0000000103723e97 RNTester`facebook::react::NativeToJsBridge::runOnExecutorQueue(std::__1::function<void (facebook::react::JSExecutor*)>&&)::$_8::operator()(this=0x0000600002fad4b0) const at NativeToJsBridge.cpp:308:9 frame facebook#55: 0x0000000103723e35 RNTester`decltype(std::declval<facebook::react::NativeToJsBridge::runOnExecutorQueue(std::__1::function<void (facebook::react::JSExecutor*)>&&)::$_8&>()()) std::__1::__invoke[abi:v160006]<facebook::react::NativeToJsBridge::runOnExecutorQueue(std::__1::function<void (facebook::react::JSExecutor*)>&&)::$_8&>(__f=0x0000600002fad4b0) at invoke.h:394:23 frame facebook#56: 0x0000000103723df5 RNTester`void std::__1::__invoke_void_return_wrapper<void, true>::__call<facebook::react::NativeToJsBridge::runOnExecutorQueue(std::__1::function<void (facebook::react::JSExecutor*)>&&)::$_8&>(__args=0x0000600002fad4b0) at invoke.h:487:9 frame facebook#57: 0x0000000103723dcd RNTester`std::__1::__function::__alloc_func<facebook::react::NativeToJsBridge::runOnExecutorQueue(std::__1::function<void (facebook::react::JSExecutor*)>&&)::$_8, std::__1::allocator<facebook::react::NativeToJsBridge::runOnExecutorQueue(std::__1::function<void (facebook::react::JSExecutor*)>&&)::$_8>, void ()>::operator()[abi:v160006](this=0x0000600002fad4b0) at function.h:185:16 frame facebook#58: 0x0000000103722b89 RNTester`std::__1::__function::__func<facebook::react::NativeToJsBridge::runOnExecutorQueue(std::__1::function<void (facebook::react::JSExecutor*)>&&)::$_8, std::__1::allocator<facebook::react::NativeToJsBridge::runOnExecutorQueue(std::__1::function<void (facebook::react::JSExecutor*)>&&)::$_8>, void ()>::operator()(this=0x0000600002fad4a0) at function.h:356:12 frame facebook#59: 0x00000001030cdd72 RNTester`std::__1::__function::__value_func<void ()>::operator()[abi:v160006](this=0x00006000028f85c0) const at function.h:510:16 frame facebook#60: 0x00000001030cdd35 RNTester`std::__1::function<void ()>::operator()(this= Lambda in File NativeToJsBridge.cpp at Line 298) const at function.h:1156:12 frame facebook#61: 0x00000001030e1145 RNTester`facebook::react::tryAndReturnError(func= Lambda in File NativeToJsBridge.cpp at Line 298) at RCTCxxUtils.mm:73:7 frame facebook#62: 0x000000010310a5c1 RNTester`facebook::react::RCTMessageThread::tryFunc(this=0x00006000028f0018, func= Lambda in File NativeToJsBridge.cpp at Line 298) at RCTMessageThread.mm:68:20 frame facebook#63: 0x000000010310e823 RNTester`facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1::operator()(this=0x0000600000538d88) const at RCTMessageThread.mm:81:19 frame facebook#64: 0x000000010310e7c5 RNTester`decltype(std::declval<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1&>()()) std::__1::__invoke[abi:v160006]<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1&>(__f=0x0000600000538d88) at invoke.h:394:23 frame facebook#65: 0x000000010310e785 RNTester`void std::__1::__invoke_void_return_wrapper<void, true>::__call<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1&>(__args=0x0000600000538d88) at invoke.h:487:9 frame facebook#66: 0x000000010310e75d RNTester`std::__1::__function::__alloc_func<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1, std::__1::allocator<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1>, void ()>::operator()[abi:v160006](this=0x0000600000538d88) at function.h:185:16 frame facebook#67: 0x000000010310d709 RNTester`std::__1::__function::__func<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1, std::__1::allocator<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1>, void ()>::operator()(this=0x0000600000538d80) at function.h:356:12 frame facebook#68: 0x00000001030cdd72 RNTester`std::__1::__function::__value_func<void ()>::operator()[abi:v160006](this=0x00006000028fa690) const at function.h:510:16 frame facebook#69: 0x00000001030cdd35 RNTester`std::__1::function<void ()>::operator()(this= Lambda in File RCTMessageThread.mm at Line 79) const at function.h:1156:12 frame facebook#70: 0x000000010310a39a RNTester`invocation function for block in facebook::react::RCTMessageThread::runAsync(.block_descriptor=0x00006000028fa670) at RCTMessageThread.mm:44:7 frame facebook#71: 0x00000001088b4b06 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12 frame facebook#72: 0x00000001088b42b9 CoreFoundation`__CFRunLoopDoBlocks + 391 frame facebook#73: 0x00000001088af076 CoreFoundation`__CFRunLoopRun + 2186 frame facebook#74: 0x00000001088ae409 CoreFoundation`CFRunLoopRunSpecific + 557 frame facebook#75: 0x00000001030b6ec5 RNTester`+[RCTCxxBridge runRunLoop](self=RCTCxxBridge, _cmd="runRunLoop") at RCTCxxBridge.mm:332:12 frame facebook#76: 0x000000010a377699 Foundation`__NSThread__start__ + 1024 frame facebook#77: 0x000000010d5f4202 libsystem_pthread.dylib`_pthread_start + 99 frame facebook#78: 0x000000010d5efbab libsystem_pthread.dylib`thread_start + 15 thread facebook#10, name = 'hades' frame #0: 0x000000010d66a5d6 libsystem_kernel.dylib`__psynch_cvwait + 10 frame facebook#1: 0x000000010d5f476b libsystem_pthread.dylib`_pthread_cond_wait + 1211 frame facebook#2: 0x000000010761dfe2 libc++.1.dylib`std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18 frame facebook#3: 0x00000001097aee78 hermes`hermes::vm::HadesGC::Executor::worker() [inlined] void std::__1::condition_variable::wait<hermes::vm::HadesGC::Executor::worker()::'lambda'()>(this=0x0000600003cb8300, __lk=0x0000700004358f20, __pred=(unnamed class) @ rbx) at __mutex_base:400:9 [opt] frame facebook#4: 0x00000001097aee5a hermes`hermes::vm::HadesGC::Executor::worker(this=0x0000600003cb82c0) at HadesGC.cpp:1084:11 [opt] frame facebook#5: 0x00000001097aedba hermes`void* std::__1::__thread_proxy[abi:v160006]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, hermes::vm::HadesGC::Executor::Executor()::'lambda'()>>(void*) [inlined] hermes::vm::HadesGC::Executor::Executor(this=0x00006000009a8ba8)::'lambda'()::operator()() const at HadesGC.cpp:1051:33 [opt] frame facebook#6: 0x00000001097aedb5 hermes`void* std::__1::__thread_proxy[abi:v160006]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, hermes::vm::HadesGC::Executor::Executor()::'lambda'()>>(void*) [inlined] decltype(std::declval<hermes::vm::HadesGC::Executor::Executor()::'lambda'()>()()) std::__1::__invoke[abi:v160006]<hermes::vm::HadesGC::Executor::Executor()::'lambda'()>(__f=0x00006000009a8ba8) at invoke.h:394:23 [opt] frame facebook#7: 0x00000001097aedb5 hermes`void* std::__1::__thread_proxy[abi:v160006]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, hermes::vm::HadesGC::Executor::Executor()::'lambda'()>>(void*) [inlined] void std::__1::__thread_execute[abi:v160006]<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, hermes::vm::HadesGC::Executor::Executor()::'lambda'()>(__t=size=2, (null)=<unavailable>) at thread:288:5 [opt] frame facebook#8: 0x00000001097aedb5 hermes`void* std::__1::__thread_proxy[abi:v160006]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, hermes::vm::HadesGC::Executor::Executor()::'lambda'()>>(__vp=0x00006000009a8ba0) at thread:299:5 [opt] frame facebook#9: 0x000000010d5f4202 libsystem_pthread.dylib`_pthread_start + 99 frame facebook#10: 0x000000010d5efbab libsystem_pthread.dylib`thread_start + 15 thread facebook#11, name = 'com.apple.CFStream.LegacyThread' frame #0: 0x000000010d667a2e libsystem_kernel.dylib`mach_msg2_trap + 10 frame facebook#1: 0x000000010d675e4a libsystem_kernel.dylib`mach_msg2_internal + 84 frame facebook#2: 0x000000010d66eb6e libsystem_kernel.dylib`mach_msg_overwrite + 653 frame facebook#3: 0x000000010d667d1f libsystem_kernel.dylib`mach_msg + 19 frame facebook#4: 0x00000001088b45bf CoreFoundation`__CFRunLoopServiceMachPort + 143 frame facebook#5: 0x00000001088aed47 CoreFoundation`__CFRunLoopRun + 1371 frame facebook#6: 0x00000001088ae409 CoreFoundation`CFRunLoopRunSpecific + 557 frame facebook#7: 0x00000001088d1e34 CoreFoundation`_legacyStreamRunLoop_workThread + 251 frame facebook#8: 0x000000010d5f4202 libsystem_pthread.dylib`_pthread_start + 99 frame facebook#9: 0x000000010d5efbab libsystem_pthread.dylib`thread_start + 15 thread facebook#12, name = 'com.facebook.SocketRocket.NetworkThread' frame #0: 0x000000010d667a2e libsystem_kernel.dylib`mach_msg2_trap + 10 frame facebook#1: 0x000000010d675e4a libsystem_kernel.dylib`mach_msg2_internal + 84 frame facebook#2: 0x000000010d66eb6e libsystem_kernel.dylib`mach_msg_overwrite + 653 frame facebook#3: 0x000000010d667d1f libsystem_kernel.dylib`mach_msg + 19 frame facebook#4: 0x00000001088b45bf CoreFoundation`__CFRunLoopServiceMachPort + 143 frame facebook#5: 0x00000001088aed47 CoreFoundation`__CFRunLoopRun + 1371 frame facebook#6: 0x00000001088ae409 CoreFoundation`CFRunLoopRunSpecific + 557 frame facebook#7: 0x000000010a34ceee Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 213 frame facebook#8: 0x000000010381a49b RNTester`-[SRRunLoopThread main](self=0x00006000028e80f0, _cmd="main") at SRRunLoopThread.m:71:16 frame facebook#9: 0x000000010a377699 Foundation`__NSThread__start__ + 1024 frame facebook#10: 0x000000010d5f4202 libsystem_pthread.dylib`_pthread_start + 99 frame facebook#11: 0x000000010d5efbab libsystem_pthread.dylib`thread_start + 15 thread facebook#13 frame #0: 0x000000010d5efb88 libsystem_pthread.dylib`start_wqthread thread facebook#14, name = 'com.apple.NSURLConnectionLoader' frame #0: 0x000000010d667a2e libsystem_kernel.dylib`mach_msg2_trap + 10 frame facebook#1: 0x000000010d675e4a libsystem_kernel.dylib`mach_msg2_internal + 84 frame facebook#2: 0x000000010d66eb6e libsystem_kernel.dylib`mach_msg_overwrite + 653 frame facebook#3: 0x000000010d667d1f libsystem_kernel.dylib`mach_msg + 19 frame facebook#4: 0x00000001088b45bf CoreFoundation`__CFRunLoopServiceMachPort + 143 frame facebook#5: 0x00000001088aed47 CoreFoundation`__CFRunLoopRun + 1371 frame facebook#6: 0x00000001088ae409 CoreFoundation`CFRunLoopRunSpecific + 557 frame facebook#7: 0x00000001093cf78b CFNetwork`___lldb_unnamed_symbol13826 + 444 frame facebook#8: 0x000000010a377699 Foundation`__NSThread__start__ + 1024 frame facebook#9: 0x000000010d5f4202 libsystem_pthread.dylib`_pthread_start + 99 frame facebook#10: 0x000000010d5efbab libsystem_pthread.dylib`thread_start + 15 thread facebook#15, name = 'com.apple.CFSocket.private' frame #0: 0x000000010d670922 libsystem_kernel.dylib`__select + 10 frame facebook#1: 0x00000001088c2dcf CoreFoundation`__CFSocketManager + 643 frame facebook#2: 0x000000010d5f4202 libsystem_pthread.dylib`_pthread_start + 99 frame facebook#3: 0x000000010d5efbab libsystem_pthread.dylib`thread_start + 15 ``` ## Changelog: [IOS] [FIXED] - Fix module create dead-lock when start-up Pull Request resolved: facebook#41194 Test Plan: Null. Reviewed By: javache Differential Revision: D50800290 Pulled By: sammy-SC fbshipit-source-id: b60b8e0681cbec7b7aa8812188c9f7ea5f03966b
Introduces RCTRootViewController, which handles the controller-appropriate work that RCTRootView was doing. This decouples the view from the script loading and JS environment setup (w/the bridge), which helps ReactKit be less of a framework and more of a library.
One thing that's valuable about moving in this direction is that the more the initialization of the JS environment can be customized (while still providing convenience classes & methods for small apps), the more it encourages established apps to try out ReactKit. I believe this is especially true for apps that use something like Cordova, ex: using the existing Cordova web view's JS context to run React Native and slowly replacing bits of Cordova.
The example apps have been updated and work. On the Facebook side you will need to replace RCTRootView with RCTRootViewController which should be fairly mechanical with VC containment (I hope!)