Skip to content
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

"Native module cannot be null.", but only if module name begins with "RCT"! #19397

Closed
3 tasks done
shirakaba opened this issue May 22, 2018 · 5 comments
Closed
3 tasks done
Labels
Platform: iOS iOS applications. Stale There has been a lack of activity on this issue and it may be closed soon.

Comments

@shirakaba
Copy link

shirakaba commented May 22, 2018

Environment

Environment:
  OS: macOS High Sierra 10.13.4
  Node: 9.11.1
  Yarn: 1.3.2
  npm: 5.6.0
  Watchman: 4.9.0
  Xcode: Xcode 9.3.1 Build version 9E501
  Android Studio: Not Found

Packages: (wanted => installed)
  react: ^16.3.2 => 16.3.2
  react-native: ^0.55.4 => 0.55.4

Steps to Reproduce

Update minimum working example to latest dependencies

  • Clone https://github.com/ModusCreateOrg/swift-modules-for-react-native and update its react-native dependency to the latest version
  • open ios/SwiftBridge.xcodeproj
  • Comment out the no-longer-compatible constantsToExport() function in both ios/CalendarManager.swift and ios/CalendarManager.m. It is not called by index.ios.js, in any case!
  • Update the Build Phases > Bundle React Native code and images script as specified.

Run with modules named CalendarManager and alternatively RCTCalendarManager

  • Build for the iPhone simulator, then run. The program should run without fault.
  • Now replace all mentions of "CalendarManager" with "RCTCalendarManager" in ios/CalendarManager.swift, ios/CalendarManager.m and index.ios.js. No need to change their file names.
  • Re-run the program.
  • The program should crash, giving the error specified in "Actual Behavior".

Expected Behavior

I would be able to use names beginning with RCT as React Native modules, or at least see some mention of it in the documentation. It took me days to figure out the root of this bug, and I wouldn't mind this naming restriction if only it were documented.

EDIT: Note that I have tried other module names, such as "CTCalendarManager", and they all work. It really is specifically a problem with the "RCT" prefix.

Actual Behavior

This error message is emitted:

2018-05-22 21:07:14.669 [info][tid:com.facebook.react.JavaScript] 'Calendar Manager', undefined
2018-05-22 21:07:14.668706+0100 SwiftBridge[38594:554787] 'Calendar Manager', undefined
2018-05-22 21:07:14.672 [error][tid:com.facebook.react.JavaScript] Native module cannot be null.
2018-05-22 21:07:14.672077+0100 SwiftBridge[38594:554787] Native module cannot be null.
2018-05-22 21:07:14.687 [fatal][tid:com.facebook.react.ExceptionsManagerQueue] Unhandled JS Exception: Native module cannot be null.
2018-05-22 21:07:14.688316+0100 SwiftBridge[38594:554676] Unhandled JS Exception: Native module cannot be null.
2018-05-22 21:07:14.695922+0100 SwiftBridge[38594:554768] [] nw_connection_get_connected_socket 18 Connection has no connected handler
2018-05-22 21:07:14.710 [error][tid:com.facebook.react.JavaScript] Module AppRegistry is not a registered callable module (calling runApplication)
2018-05-22 21:07:14.712899+0100 SwiftBridge[38594:554787] Module AppRegistry is not a registered callable module (calling runApplication)
2018-05-22 21:07:14.734 [fatal][tid:com.facebook.react.ExceptionsManagerQueue] Unhandled JS Exception: Module AppRegistry is not a registered callable module (calling runApplication)
2018-05-22 21:07:14.734526+0100 SwiftBridge[38594:554676] Unhandled JS Exception: Module AppRegistry is not a registered callable module (calling runApplication)

Calling console.log(NativeModules) just returns an empty object.

@shirakaba
Copy link
Author

Some dtrace magic for deeper debug comparing a native module named as "CalendarManager" vs. "RCTCalendarManager", based on a different project (not the minimum working example from above), thanks entirely to Birch-san.

Note that I expose and invoke the method CalendarManager.copyBestStringLanguage(_:_:) this time.

Named as CalendarManager

Modules loaded into the process named LinguaBrowseMac

Command:

pgrep LinguaBrowseMac | xargs -n 1 sudo dtrace -ln 'pid$target:::entry' -p | awk '{print $3}' | sort | uniq

Output:

AE
APFS
ATS
AVFAudio
AVFoundation
AVKit
Accounts
AccountsDaemon
AccountsUI
AddressBook
AppKit
Apple80211
AppleFSCompression
AppleIntelBDWGraphicsMTLDriver
AppleJPEG
AppleLDAP
ApplePushService
AppleSRP
AppleSauce
AppleSystemInfo
AppleVA
AudioToolbox
AudioUnit
BackgroundTaskManagement
Backup
BezelServices
Bom
CFNetwork
CFOpenDirectory
CalendarAgentLink
CarbonCore
ChunkingLibrary
ColorSync
ColorSyncLegacy
CommonAuth
CommonPanels
CommonUtilities
Contacts
ContactsFoundation
ContactsPersistence
CoreAUC
CoreAVCHD
CoreAnalytics
CoreAudio
CoreBluetooth
CoreBrightness
CoreDaemon
CoreData
CoreDisplay
CoreEmoji
CoreFoundation
CoreGraphics
CoreImage
CoreLocation
CoreMedia
CoreMediaAuthoring
CoreMediaIO
CoreNLP
CoreOptimization
CorePDF
CorePhoneNumbers
CorePrediction
CoreServicesInternal
CoreSymbolication
CoreText
CoreUI
CoreUtils
CoreVideo
CoreWLAN
CoreWiFi
CrashReporterSupport
DFRFoundation
DSExternalDisplay
DataDetectors
DataDetectorsCore
DebugHierarchyFoundation
DebugSymbols
DesktopServicesPriv
DiagnosticLogCollection
DictionaryServices
DirectoryService
DiskArbitration
DisplayServices
Engram
FSEvents
FaceCore
Foundation
GLKit
GPUWrangler
GSS
GenerationalStorage
GeoServices
GraphVisualizer
HIServices
HIToolbox
Heimdal
Help
IDS
IDSFoundation
IMFoundation
IOAccelerator
IOBluetooth
IOKit
IOPlatformPluginFamily
IOPresentment
IOSurface
IconServices
ImageCapture
ImageCaptureCore
ImageIO
ImageKit
Ink
InternationalSupport
IntlPreferences
JavaScriptCore
Kerberos
LDAP
LangAnalysis
LanguageModeling
LaunchServices
Lexicon
LinguaBrowseMac
LinguisticData
Lookup
MODULE
MPSCore
MPSImage
MPSMatrix
MPSNeuralNetwork
Mangrove
MapKit
Marco
MediaAccessibility
MediaPlayer
MediaRemote
MediaServices
MediaToolbox
Metadata
Metal
MetalKit
MetalPerformanceShaders
MetalTools
MobileAsset
MobileKeyBag
ModelIO
MultitouchSupport
Navigation
NetAuth
NetFS
Network
OAuth
OSServices
OpenCL
OpenDirectory
OpenGL
OpenScripting
PDFKit
PerformanceAnalysis
PhoneNumbers
PlugInKit
Print
PrintCore
ProtocolBuffer
QD
QTKit
QuartzComposer
QuartzCore
QuartzFilters
QuickLook
QuickLookThumbnailing
QuickLookUI
RawCamera
RemoteServiceDiscovery
RemoteViewServices
RemoteXPC
SafariServices
SceneKit
SearchKit
Security
SecurityFoundation
SecurityHI
SecurityInterface
ServiceManagement
ShareKit
SharedFileList
Sharing
SignpostNotification
SkyLight
Social
SpeechRecognition
SpeechRecognitionCore
SpeechSynthesis
StreamingZip
Symbolication
SystemConfiguration
TCC
TextureIO
ToneKit
ToneLibrary
UIFoundation
VectorKit
VideoToolbox
ViewBridge
WebCore
WebKit
WebKitLegacy
WirelessDiagnostics
dyld
libAWDSupportFramework.dylib
libBLAS.dylib
libBNNS.dylib
libBacktraceRecording.dylib
libCGInterfaces.dylib
libCRFSuite.dylib
libCVMSPluginSupport.dylib
libChineseTokenizer.dylib
libCoreFSCache.dylib
libCoreVMClient.dylib
libDiagnosticMessagesClient.dylib
libFontParser.dylib
libFontRegistry.dylib
libFosl_dynamic.dylib
libGFXShared.dylib
libGIF.dylib
libGL.dylib
libGLImage.dylib
libGLU.dylib
libJP2.dylib
libJPEG.dylib
libLAPACK.dylib
libLinearAlgebra.dylib
libMainThreadChecker.dylib
libOpenScriptingUtil.dylib
libPng.dylib
libQuadrature.dylib
libRadiance.dylib
libScreenReader.dylib
libSparse.dylib
libSparseBLAS.dylib
libSystem.B.dylib
libTIFF.dylib
libTelephonyUtilDynamic.dylib
libThaiTokenizer.dylib
libTrueTypeScaler.dylib
libViewDebuggerSupport.dylib
libapple_nghttp2.dylib
libarchive.2.dylib
libate.dylib
libauto.dylib
libboringssl.dylib
libbsm.0.dylib
libbz2.1.0.dylib
libc++.1.dylib
libc++abi.dylib
libcache.dylib
libclosured.dylib
libcmph.dylib
libcommonCrypto.dylib
libcompiler_rt.dylib
libcompression.dylib
libcopyfile.dylib
libcorecrypto.dylib
libcoretls.dylib
libcoretls_cfhelpers.dylib
libcups.2.dylib
libdispatch.dylib
libdyld.dylib
libenergytrace.dylib
libgermantok.dylib
libheimdal-asn1.dylib
libiconv.2.dylib
libicucore.A.dylib
libkeymgr.dylib
libkxld.dylib
liblangid.dylib
liblzma.5.dylib
libmacho.dylib
libmarisa.dylib
libmecab.1.0.0.dylib
libmecabra.dylib
libmetal_timestamp.dylib
libnetwork.dylib
libobjc.A.dylib
libpam.2.dylib
libpcap.A.dylib
libprotobuf-lite.dylib
libprotobuf.dylib
libquarantine.dylib
libremovefile.dylib
libresolv.9.dylib
libsasl2.2.dylib
libspindump.dylib
libsqlite3.dylib
libswiftCore.dylib
libswiftCoreFoundation.dylib
libswiftCoreGraphics.dylib
libswiftDarwin.dylib
libswiftDispatch.dylib
libswiftFoundation.dylib
libswiftIOKit.dylib
libswiftObjectiveC.dylib
libsystem_asl.dylib
libsystem_blocks.dylib
libsystem_c.dylib
libsystem_configuration.dylib
libsystem_coreservices.dylib
libsystem_darwin.dylib
libsystem_dnssd.dylib
libsystem_info.dylib
libsystem_kernel.dylib
libsystem_m.dylib
libsystem_malloc.dylib
libsystem_network.dylib
libsystem_networkextension.dylib
libsystem_notify.dylib
libsystem_platform.dylib
libsystem_pthread.dylib
libsystem_sandbox.dylib
libsystem_secinit.dylib
libsystem_symptoms.dylib
libsystem_trace.dylib
libtidy.A.dylib
libunwind.dylib
libusrtcp.dylib
libutil.dylib
libvDSP.dylib
libvMisc.dylib
libwebrtc.dylib
libxar.1.dylib
libxml2.2.dylib
libxpc.dylib
libxslt.1.dylib
libz.1.dylib
login
loginsupport
vCard
vImage

Functions with an entry uprobe in the LinguaBrowseMac module

Command:

pgrep LinguaBrowseMac | xargs -n 1 sudo dtrace -ln 'pid$target:LinguaBrowseMac::entry' -p

(and look for mentions of desired function)

Filtered:

# Poor man's equivalent (for reference)
pgrep LinguaBrowseMac | xargs -n 1 sudo dtrace -ln 'pid$target:LinguaBrowseMac::entry' -p | grep Calendar
# Ideal way
pgrep LinguaBrowseMac | xargs -n 1 sudo dtrace -ln 'pid$target:LinguaBrowseMac:*CalendarManager*:entry' -p

Output:

   ID   PROVIDER            MODULE                          FUNCTION NAME
71897   pid27548   LinguaBrowseMac +[CalendarManager(RCTExternModule) moduleName] entry
71898   pid27548   LinguaBrowseMac +[CalendarManager(RCTExternModule) load] entry
71899   pid27548   LinguaBrowseMac +[CalendarManager(RCTExternModule) __rct_export__210] entry
71913   pid27548   LinguaBrowseMac CalendarManager.copyBestStringLanguage(_:_:) entry
71916   pid27548   LinguaBrowseMac @objc CalendarManager.copyBestStringLanguage(_:_:) entry
71917   pid27548   LinguaBrowseMac CalendarManager.__deallocating_deinit entry
71918   pid27548   LinguaBrowseMac type metadata accessor for CalendarManager entry
71919   pid27548   LinguaBrowseMac CalendarManager.__allocating_init() entry
71920   pid27548   LinguaBrowseMac            CalendarManager.init() entry
71921   pid27548   LinguaBrowseMac      @objc CalendarManager.init() entry

Get stack trace

pgrep LinguaBrowseMac | xargs -n 1 sudo dtrace -n 'pid$target:LinguaBrowseMac:*CalendarManager*:entry {
	ustack()
}' -p

Output:

dtrace: description 'pid$target:LinguaBrowseMac:*CalendarManager*:entry ' matched 10 probes
CPU     ID                    FUNCTION:NAME
  1  71161 @objc CalendarManager.copyBestStringLanguage(_:_:):entry 
              LinguaBrowseMac`@objc CalendarManager.copyBestStringLanguage(_:_:)
              CoreFoundation`__invoking___+0x8c
              CoreFoundation`-[NSInvocation invoke]+0x140
              CoreFoundation`-[NSInvocation invokeWithTarget:]+0x36
              LinguaBrowseMac`-[RCTModuleMethod invokeWithBridge:module:arguments:]+0x783
              LinguaBrowseMac`facebook::react::RCTNativeModule::invokeInner(unsigned int, folly::dynamic const&&)+0x266
              LinguaBrowseMac`facebook::react::RCTNativeModule::invoke(unsigned int, folly::dynamic&&)::$_0::operator()() const+0xda
              LinguaBrowseMac`invocation function for block in facebook::react::RCTNativeModule::invoke(unsigned int, folly::dynamic&&)+0x19
              libdispatch.dylib`_dispatch_call_block_and_release+0xc
              libdispatch.dylib`_dispatch_client_callout+0x8
              libdispatch.dylib`_dispatch_queue_serial_drain+0x491
              libdispatch.dylib`_dispatch_queue_invoke+0x142
              libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh+0x311
              libdispatch.dylib`_dispatch_workloop_worker_thread+0x37c
              libsystem_pthread.dylib`_pthread_wqthread+0x3d4
              libsystem_pthread.dylib`start_wqthread+0xd
              0x4058504320000000

  1  71160 CalendarManager.copyBestStringLanguage(_:_:):entry 
              LinguaBrowseMac`CalendarManager.copyBestStringLanguage(_:_:)
              LinguaBrowseMac`@objc CalendarManager.copyBestStringLanguage(_:_:)+0x5f
              CoreFoundation`__invoking___+0x8c
              CoreFoundation`-[NSInvocation invoke]+0x140
              CoreFoundation`-[NSInvocation invokeWithTarget:]+0x36
              LinguaBrowseMac`-[RCTModuleMethod invokeWithBridge:module:arguments:]+0x783
              LinguaBrowseMac`facebook::react::RCTNativeModule::invokeInner(unsigned int, folly::dynamic const&&)+0x266
              LinguaBrowseMac`facebook::react::RCTNativeModule::invoke(unsigned int, folly::dynamic&&)::$_0::operator()() const+0xda
              LinguaBrowseMac`invocation function for block in facebook::react::RCTNativeModule::invoke(unsigned int, folly::dynamic&&)+0x19
              libdispatch.dylib`_dispatch_call_block_and_release+0xc
              libdispatch.dylib`_dispatch_client_callout+0x8
              libdispatch.dylib`_dispatch_queue_serial_drain+0x491
              libdispatch.dylib`_dispatch_queue_invoke+0x142
              libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh+0x311
              libdispatch.dylib`_dispatch_workloop_worker_thread+0x37c
              libsystem_pthread.dylib`_pthread_wqthread+0x3d4
              libsystem_pthread.dylib`start_wqthread+0xd
              0x4058504320000000

  0  71161 @objc CalendarManager.copyBestStringLanguage(_:_:):entry 
              LinguaBrowseMac`@objc CalendarManager.copyBestStringLanguage(_:_:)
              CoreFoundation`__invoking___+0x8c
              CoreFoundation`-[NSInvocation invoke]+0x140
              CoreFoundation`-[NSInvocation invokeWithTarget:]+0x36
              LinguaBrowseMac`-[RCTModuleMethod invokeWithBridge:module:arguments:]+0x783
              LinguaBrowseMac`facebook::react::RCTNativeModule::invokeInner(unsigned int, folly::dynamic const&&)+0x266
              LinguaBrowseMac`facebook::react::RCTNativeModule::invoke(unsigned int, folly::dynamic&&)::$_0::operator()() const+0xda
              LinguaBrowseMac`invocation function for block in facebook::react::RCTNativeModule::invoke(unsigned int, folly::dynamic&&)+0x19
              libdispatch.dylib`_dispatch_call_block_and_release+0xc
              libdispatch.dylib`_dispatch_client_callout+0x8
              libdispatch.dylib`_dispatch_queue_serial_drain+0x491
              libdispatch.dylib`_dispatch_queue_invoke+0x142
              libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh+0x311
              libdispatch.dylib`_dispatch_workloop_worker_thread+0x37c
              libsystem_pthread.dylib`_pthread_wqthread+0x3d4
              libsystem_pthread.dylib`start_wqthread+0xd
              LinguaBrowseMac`0x2

  0  71160 CalendarManager.copyBestStringLanguage(_:_:):entry 
              LinguaBrowseMac`CalendarManager.copyBestStringLanguage(_:_:)
              LinguaBrowseMac`@objc CalendarManager.copyBestStringLanguage(_:_:)+0x5f
              CoreFoundation`__invoking___+0x8c
              CoreFoundation`-[NSInvocation invoke]+0x140
              CoreFoundation`-[NSInvocation invokeWithTarget:]+0x36
              LinguaBrowseMac`-[RCTModuleMethod invokeWithBridge:module:arguments:]+0x783
              LinguaBrowseMac`facebook::react::RCTNativeModule::invokeInner(unsigned int, folly::dynamic const&&)+0x266
              LinguaBrowseMac`facebook::react::RCTNativeModule::invoke(unsigned int, folly::dynamic&&)::$_0::operator()() const+0xda
              LinguaBrowseMac`invocation function for block in facebook::react::RCTNativeModule::invoke(unsigned int, folly::dynamic&&)+0x19
              libdispatch.dylib`_dispatch_call_block_and_release+0xc
              libdispatch.dylib`_dispatch_client_callout+0x8
              libdispatch.dylib`_dispatch_queue_serial_drain+0x491
              libdispatch.dylib`_dispatch_queue_invoke+0x142
              libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh+0x311
              libdispatch.dylib`_dispatch_workloop_worker_thread+0x37c
              libsystem_pthread.dylib`_pthread_wqthread+0x3d4
              libsystem_pthread.dylib`start_wqthread+0xd
              LinguaBrowseMac`0x2

objdump

Command:

objdump -t /Users/jamie/Library/Developer/Xcode/DerivedData/LinguaBrowseMac-dsqmmnocpblkyieiixlpffjsykhu/Build/Products/Debug/LinguaBrowseMac.app/Contents/MacOS/LinguaBrowseMac | grep CalendarManager

Output:

0000000000000000 l    d  *UND*  __T015LinguaBrowseMac15CalendarManagerCMn
0000000000000000 l    d  *UND*  _OBJC_CLASS_$_CalendarManager
0000000000000000 l    d  *UND*  __T015LinguaBrowseMac15CalendarManagerCN
0000000000000000 l    d  *UND*  _OBJC_METACLASS_$_CalendarManager
0000000100003870 l     F __TEXT,__text  +[CalendarManager(RCTExternModule) moduleName]
0000000100003890 l     F __TEXT,__text  +[CalendarManager(RCTExternModule) load]
00000001000038b0 l     F __TEXT,__text  +[CalendarManager(RCTExternModule) __rct_export__210]
00000001000041d0 l     F __TEXT,__text  __T015LinguaBrowseMac15CalendarManagerC22copyBestStringLanguageS2S_So8NSNumberCtF
00000001000044e0 l     F __TEXT,__text  __T015LinguaBrowseMac15CalendarManagerC22copyBestStringLanguageS2S_So8NSNumberCtFTo
0000000100004580 l     F __TEXT,__text  __T015LinguaBrowseMac15CalendarManagerCfD
00000001000045c0 l     F __TEXT,__text  __T015LinguaBrowseMac15CalendarManagerCMa
0000000100004600 l     F __TEXT,__text  __T015LinguaBrowseMac15CalendarManagerCACycfC
0000000100004630 l     F __TEXT,__text  __T015LinguaBrowseMac15CalendarManagerCACycfc
00000001000046a0 l     F __TEXT,__text  __T015LinguaBrowseMac15CalendarManagerCACycfcTo
0000000100259958 l       __TEXT,__const __T015LinguaBrowseMac15CalendarManagerCMn
000000010028f254 l       __TEXT,__swift3_fieldmd  __T015LinguaBrowseMac15CalendarManagerCMF
00000001002fdcc0 l       __DATA,__objc_data __T015LinguaBrowseMac15CalendarManagerCMf
00000001002fdcd0 l       __DATA,__objc_data __T015LinguaBrowseMac15CalendarManagerCN
00000001002fdcd0 l       __DATA,__objc_data _OBJC_CLASS_$_CalendarManager
0000000100301138 l       __DATA,__data  _OBJC_METACLASS_$_CalendarManager
0000000100303f30 l       __DATA,__bss __T015LinguaBrowseMac15CalendarManagerCML

Named as RCTCalendarManager

Get uprobes

Command:

pgrep LinguaBrowseMac | xargs -n 1 sudo dtrace -ln 'pid$target:LinguaBrowseMac:*RCTCalendarManager*:entry' -p

Output:

   ID   PROVIDER            MODULE                          FUNCTION NAME
70778   pid28049   LinguaBrowseMac +[RCTCalendarManager(RCTExternModule) moduleName] entry
70779   pid28049   LinguaBrowseMac +[RCTCalendarManager(RCTExternModule) load] entry
70780   pid28049   LinguaBrowseMac +[RCTCalendarManager(RCTExternModule) __rct_export__210] entry
70781   pid28049   LinguaBrowseMac RCTCalendarManager.copyBestStringLanguage(_:_:) entry
70782   pid28049   LinguaBrowseMac @objc RCTCalendarManager.copyBestStringLanguage(_:_:) entry
70783   pid28049   LinguaBrowseMac RCTCalendarManager.__deallocating_deinit entry
70784   pid28049   LinguaBrowseMac type metadata accessor for RCTCalendarManager entry
70785   pid28049   LinguaBrowseMac RCTCalendarManager.__allocating_init() entry
70786   pid28049   LinguaBrowseMac         RCTCalendarManager.init() entry
70787   pid28049   LinguaBrowseMac   @objc RCTCalendarManager.init() entry

Get userland stack trace

pgrep LinguaBrowseMac | xargs -n 1 sudo dtrace -n 'pid$target:LinguaBrowseMac:*RCTCalendarManager*:entry {
  ustack()
}' -p

Output:

Note how there is no occurrence of @objc RCTCalendarManager.copyBestStringLanguage(_:_:):entry

dtrace: description 'pid$target:LinguaBrowseMac:*CalendarManager*:entry ' matched 10 probes
CPU     ID                    FUNCTION:NAME
  0  70778 +[RCTCalendarManager(RCTExternModule) moduleName]:entry 
              LinguaBrowseMac`+[RCTCalendarManager(RCTExternModule) moduleName]
              LinguaBrowseMac`RCTBridgeModuleNameForClass+0x14f
              LinguaBrowseMac`-[RCTCxxBridge _initModulesWithDispatchGroup:]+0x10f6
              LinguaBrowseMac`-[RCTCxxBridge start]+0x296
              LinguaBrowseMac`-[RCTBridge setUp]+0x377
              LinguaBrowseMac`__19-[RCTBridge reload]_block_invoke+0x49
              libdispatch.dylib`_dispatch_call_block_and_release+0xc
              libdispatch.dylib`_dispatch_client_callout+0x8
              libdispatch.dylib`_dispatch_main_queue_callback_4CF+0x225
              CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__+0x9
              CoreFoundation`__CFRunLoopRun+0xa1a
              CoreFoundation`CFRunLoopRunSpecific+0x1e3
              HIToolbox`RunCurrentEventLoopInMode+0x11e
              HIToolbox`ReceiveNextEventCommon+0x16e
              HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter+0x40
              AppKit`_DPSNextEvent+0x825
              AppKit`-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]+0xbe4
              AppKit`-[NSApplication run]+0x2fc
              LinguaBrowseMac`main+0x224
              libdyld.dylib`start+0x1

  1  70787 @objc RCTCalendarManager.init():entry 
              LinguaBrowseMac`@objc RCTCalendarManager.init()
              LinguaBrowseMac`__44-[RCTModuleData initWithModuleClass:bridge:]_block_invoke+0x24
              LinguaBrowseMac`-[RCTModuleData setUpInstanceAndBridge]+0x6d6
              LinguaBrowseMac`__25-[RCTModuleData instance]_block_invoke+0x26
              LinguaBrowseMac`RCTUnsafeExecuteOnMainQueueSync+0x3e
              LinguaBrowseMac`-[RCTModuleData instance]+0x2e8
              LinguaBrowseMac`__49-[RCTCxxBridge _prepareModulesWithDispatchGroup:]_block_invoke+0xc3
              libdispatch.dylib`_dispatch_call_block_and_release+0xc
              libdispatch.dylib`_dispatch_client_callout+0x8
              libdispatch.dylib`_dispatch_main_queue_callback_4CF+0x36c
              CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__+0x9
              CoreFoundation`__CFRunLoopRun+0xa1a
              CoreFoundation`CFRunLoopRunSpecific+0x1e3
              HIToolbox`RunCurrentEventLoopInMode+0x11e
              HIToolbox`ReceiveNextEventCommon+0x265
              HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter+0x40
              AppKit`_DPSNextEvent+0x825
              AppKit`-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]+0xbe4
              AppKit`-[NSApplication run]+0x2fc
              LinguaBrowseMac`main+0x224

  1  70786  RCTCalendarManager.init():entry 
              LinguaBrowseMac`RCTCalendarManager.init()
              LinguaBrowseMac`@objc RCTCalendarManager.init()+0x13
              LinguaBrowseMac`__44-[RCTModuleData initWithModuleClass:bridge:]_block_invoke+0x24
              LinguaBrowseMac`-[RCTModuleData setUpInstanceAndBridge]+0x6d6
              LinguaBrowseMac`__25-[RCTModuleData instance]_block_invoke+0x26
              LinguaBrowseMac`RCTUnsafeExecuteOnMainQueueSync+0x3e
              LinguaBrowseMac`-[RCTModuleData instance]+0x2e8
              LinguaBrowseMac`__49-[RCTCxxBridge _prepareModulesWithDispatchGroup:]_block_invoke+0xc3
              libdispatch.dylib`_dispatch_call_block_and_release+0xc
              libdispatch.dylib`_dispatch_client_callout+0x8
              libdispatch.dylib`_dispatch_main_queue_callback_4CF+0x36c
              CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__+0x9
              CoreFoundation`__CFRunLoopRun+0xa1a
              CoreFoundation`CFRunLoopRunSpecific+0x1e3
              HIToolbox`RunCurrentEventLoopInMode+0x11e
              HIToolbox`ReceiveNextEventCommon+0x265
              HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter+0x40
              AppKit`_DPSNextEvent+0x825
              AppKit`-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]+0xbe4
              AppKit`-[NSApplication run]+0x2fc

  1  70784 type metadata accessor for RCTCalendarManager:entry 
              LinguaBrowseMac`type metadata accessor for RCTCalendarManager
              LinguaBrowseMac`RCTCalendarManager.init()+0x1f
              LinguaBrowseMac`@objc RCTCalendarManager.init()+0x13
              LinguaBrowseMac`__44-[RCTModuleData initWithModuleClass:bridge:]_block_invoke+0x24
              LinguaBrowseMac`-[RCTModuleData setUpInstanceAndBridge]+0x6d6
              LinguaBrowseMac`__25-[RCTModuleData instance]_block_invoke+0x26
              LinguaBrowseMac`RCTUnsafeExecuteOnMainQueueSync+0x3e
              LinguaBrowseMac`-[RCTModuleData instance]+0x2e8
              LinguaBrowseMac`__49-[RCTCxxBridge _prepareModulesWithDispatchGroup:]_block_invoke+0xc3
              libdispatch.dylib`_dispatch_call_block_and_release+0xc
              libdispatch.dylib`_dispatch_client_callout+0x8
              libdispatch.dylib`_dispatch_main_queue_callback_4CF+0x36c
              CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__+0x9
              CoreFoundation`__CFRunLoopRun+0xa1a
              CoreFoundation`CFRunLoopRunSpecific+0x1e3
              HIToolbox`RunCurrentEventLoopInMode+0x11e
              HIToolbox`ReceiveNextEventCommon+0x265
              HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter+0x40
              AppKit`_DPSNextEvent+0x825
              AppKit`-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]+0xbe4

  1  70778 +[RCTCalendarManager(RCTExternModule) moduleName]:entry 
              LinguaBrowseMac`+[RCTCalendarManager(RCTExternModule) moduleName]
              LinguaBrowseMac`RCTBridgeModuleNameForClass+0x14f
              LinguaBrowseMac`-[RCTModuleData name]+0x24
              LinguaBrowseMac`-[RCTModuleData setUpMethodQueue]+0x3c4
              LinguaBrowseMac`-[RCTModuleData setUpInstanceAndBridge]+0x994
              LinguaBrowseMac`__25-[RCTModuleData instance]_block_invoke+0x26
              LinguaBrowseMac`RCTUnsafeExecuteOnMainQueueSync+0x3e
              LinguaBrowseMac`-[RCTModuleData instance]+0x2e8
              LinguaBrowseMac`__49-[RCTCxxBridge _prepareModulesWithDispatchGroup:]_block_invoke+0xc3
              libdispatch.dylib`_dispatch_call_block_and_release+0xc
              libdispatch.dylib`_dispatch_client_callout+0x8
              libdispatch.dylib`_dispatch_main_queue_callback_4CF+0x36c
              CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__+0x9
              CoreFoundation`__CFRunLoopRun+0xa1a
              CoreFoundation`CFRunLoopRunSpecific+0x1e3
              HIToolbox`RunCurrentEventLoopInMode+0x11e
              HIToolbox`ReceiveNextEventCommon+0x265
              HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter+0x40
              AppKit`_DPSNextEvent+0x825
              AppKit`-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]+0xbe4

objdump

Command:

objdump -t /Users/jamie/Library/Developer/Xcode/DerivedData/LinguaBrowseMac-dsqmmnocpblkyieiixlpffjsykhu/Build/Products/Debug/LinguaBrowseMac.app/Contents/MacOS/LinguaBrowseMac | grep RCTCalendarManager

Output:

0000000000000000 l    d  *UND*  __T015LinguaBrowseMac18RCTCalendarManagerCMn
0000000000000000 l    d  *UND*  _OBJC_CLASS_$_RCTCalendarManager
0000000000000000 l    d  *UND*  __T015LinguaBrowseMac18RCTCalendarManagerCN
0000000000000000 l    d  *UND*  _OBJC_METACLASS_$_RCTCalendarManager
0000000100003870 l     F __TEXT,__text  +[RCTCalendarManager(RCTExternModule) moduleName]
0000000100003890 l     F __TEXT,__text  +[RCTCalendarManager(RCTExternModule) load]
00000001000038b0 l     F __TEXT,__text  +[RCTCalendarManager(RCTExternModule) __rct_export__210]
00000001000041d0 l     F __TEXT,__text  __T015LinguaBrowseMac18RCTCalendarManagerC22copyBestStringLanguageS2S_So8NSNumberCtF
00000001000044e0 l     F __TEXT,__text  __T015LinguaBrowseMac18RCTCalendarManagerC22copyBestStringLanguageS2S_So8NSNumberCtFTo
0000000100004580 l     F __TEXT,__text  __T015LinguaBrowseMac18RCTCalendarManagerCfD
00000001000045c0 l     F __TEXT,__text  __T015LinguaBrowseMac18RCTCalendarManagerCMa
0000000100004600 l     F __TEXT,__text  __T015LinguaBrowseMac18RCTCalendarManagerCACycfC
0000000100004630 l     F __TEXT,__text  __T015LinguaBrowseMac18RCTCalendarManagerCACycfc
00000001000046a0 l     F __TEXT,__text  __T015LinguaBrowseMac18RCTCalendarManagerCACycfcTo
0000000100259958 l       __TEXT,__const __T015LinguaBrowseMac18RCTCalendarManagerCMn
000000010028f264 l       __TEXT,__swift3_fieldmd  __T015LinguaBrowseMac18RCTCalendarManagerCMF
00000001002fdcc0 l       __DATA,__objc_data __T015LinguaBrowseMac18RCTCalendarManagerCMf
00000001002fdcd0 l       __DATA,__objc_data __T015LinguaBrowseMac18RCTCalendarManagerCN
00000001002fdcd0 l       __DATA,__objc_data _OBJC_CLASS_$_RCTCalendarManager
0000000100301138 l       __DATA,__data  _OBJC_METACLASS_$_RCTCalendarManager
0000000100303f30 l       __DATA,__bss __T015LinguaBrowseMac18RCTCalendarManagerCML

@react-native-bot react-native-bot added the Platform: iOS iOS applications. label May 23, 2018
@vovkasm
Copy link
Contributor

vovkasm commented May 30, 2018

If I understand correctly I think this behavior related to this chunk of code: https://github.com/facebook/react-native/blob/0.55-stable/React/Base/RCTBridge.m#L80

By default, RN strip "RCT" prefix from module names... this is old behavior, as I know it was born to make useful names for standard modules... so standard module RCTAlertManager (named according to Objective C rules) can be accessed from JS as NativeModules.AlertManager

@shirakaba
Copy link
Author

I see, so I would simply access my native component externally exposed as 'RCTCalendarManager', in JavaScript with the truncated name 'CalendarManager'?

If this is indeed the logic, then I don't feel that this necessitates any core code changes; clear documentation of this matter in the Native Modules docs would suffice.

@stale
Copy link

stale bot commented Aug 29, 2018

Hey there, it looks like there has been no activity on this issue recently. Has the issue been fixed, or does it still require the community's attention? This issue may be closed if no further activity occurs. You may also label this issue as "For Discussion" or "Good first issue" and I will leave it open. Thank you for your contributions.

@stale stale bot added the Stale There has been a lack of activity on this issue and it may be closed soon. label Aug 29, 2018
@stale
Copy link

stale bot commented Sep 6, 2018

Closing this issue after a prolonged period of inactivity. If this issue is still present in the latest release, please feel free to create a new issue with up-to-date information.

@stale stale bot closed this as completed Sep 6, 2018
@facebook facebook locked as resolved and limited conversation to collaborators Sep 6, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Platform: iOS iOS applications. Stale There has been a lack of activity on this issue and it may be closed soon.
Projects
None yet
Development

No branches or pull requests

3 participants