The key idea was the cycle the runloop once after receiving the RCTJavaScriptDidLoadNotification so that the RCTDevMenu could also handle that notification and setup the bridge properly, as well as not block the main thread by spinning the runloop instead.
This is done in a way that does not override the persistent user defaults. You set this default when launching the app by supplying `-RealmReactEnableChromeDebugging YES/NO` launch arguments.
Rather than using Object.preventExtensions to throw exceptions when setting any out-of-bounds index, we must instead compromise by only throwing for the common cases, which are -1 and list.length. Having Object.keys() support is essential for List to work with React Native ListViewDataSource.
Resolves#80
This also appears to fix crashes when running ReactTests with Chrome debugging enabled!
The crash when tests failed was due to JavaScriptCore trying to create a backtrace with the native call stack.
The test structure is now provided by a JS API, that is used by all things that run tests. Also, the tests can be run manually by tapping a button in the ReactTests app.
The deleteTestFiles() function is now added to the Realm object, so that it's easy for the RPC module to handle this as well. We can only do this in testing environments in the future.
* sk-react-framework: (27 commits)
Change RealmReact to be a dynamic framework
finish Array to List rename
RJSArray -> RJSList
move property getters to object store code
move List class to its own file
ObjectArray -> List
Add Notification constructor and destructor
Small improvement to notifications test
RJSException no longer requires JS strings
Protect realm and callback from GC in addNotification
Add comments
pr fixes
minimal tests for migrations
Check for NaN inside RJSValidatedValueToNumber
allow running all tests at the same path by invalidating all cached realm paths between test runs
Native methods should convert to numbers/bools
Out of bounds getters for Results return undefined
Out of bounds list item getters return undefined
Consolidate code that verifies array index bounds
Add list item setters in JS
...
It embeds RealmJS and GCDWebServers frameworks. This fixes#58, where there were issues with building for devices rather than just the simulator.
Some changes were made so that RealmReact.m didn't need to be weakly linked to libReact.a since that would actually cause any executable that uses this framework from being able to compile with bitcode.
Turns out this API can return NaN without an exception. Also added tests to make sure these conversions either work or throw exceptions in the appropriate places.
In the case of test failures, a TestFailureError object is thrown, which removes the last two stack frames so the true source of the failure is revealed to the native code.
Clicking on a failure in the Xcode sidebar will take you to exactly where it occurred now.
Fixes#28