Skip to content

Conversation

@staltz
Copy link
Member

@staltz staltz commented Nov 30, 2022

  • configure for Android on Linux working
  • configure for Android on macOS working
  • Remove gcc version check on macs in ./android-configure
  • Compilation for Android on macOS working
  • Compilation for Android on Linux working
  • configure for iOS on macOS working
  • Compilation for iOS on macOS working
  • iOS Framework creation working
  • Android tests passing
  • Android test suite scripts fixed/adapted
  • Handle parallel/test-async-hooks-fatal-error failure on Android
  • Handle parallel/test-common-expect-warning failure on Android
  • Handle parallel/test-crypto-secure-heap failure on Android
  • Handle parallel/test-fs-write-stream-patch-open failure on Android
  • Handle parallel/test-heapsnapshot-near-heap-limit-worker failure on Android
  • Handle parallel/test-http2-clean-output failure on Android
  • Handle parallel/test-https-agent-unref-socket failure on Android
  • Handle parallel/test-pipe-unref failure on Android
  • Handle parallel/test-policy-crypto-default-encoding failure on Android
  • Handle parallel/test-policy-manifest failure on Android
  • Handle parallel/test-policy-scopes failure on Android
  • Handle parallel/test-preload-worker failure on Android
  • Handle parallel/test-repl-array-prototype-tempering failure on Android
  • Handle parallel/test-repl-built-in-modules failure on Android
  • Handle parallel/test-repl-clear-immediate-crash failure on Android
  • Handle parallel/test-repl-dynamic-import failure on Android
  • Handle parallel/test-repl-options failure on Android
  • Handle parallel/test-repl-unsafe-array-iteration failure on Android
  • Handle parallel/test-repl-unsupported-option failure on Android
  • Handle parallel/test-runner-cli failure on Android
  • Handle parallel/test-runner-exit-code failure on Android
  • Handle parallel/test-runner-import-no-scheme failure on Android
  • Handle parallel/test-runner-misc failure on Android
  • Handle parallel/test-set-http-max-http-headers failure on Android
  • Handle parallel/test-stack-size-limit failure on Android
  • Handle parallel/test-stdio-undestroy failure on Android
  • Handle parallel/test-stream-pipeline-process failure on Android
  • Handle parallel/test-timers-immediate-promisified failure on Android
  • Handle parallel/test-timers-interval-promisified failure on Android
  • Handle parallel/test-timers-timeout-promisified failure on Android
  • Handle parallel/test-tls-wrap-econnreset-pipe on Android
  • Handle parallel/test-trace-atomics-wait failure on Android
  • Handle parallel/test-trace-events-net failure on Android
  • Android: libnode/include/node headers extracted to nodejs-mobile-react-native
  • iOS: libnode/include/node headers extracted to nodejs-mobile-react-native
  • Android sample app working
  • iOS sample app working
  • iOS Framework creation scripts commited
  • Handle Android test timeout parallel/test-blob-buffer-too-large
  • Handle Android test failure parallel/test-corepack-version
  • Handle Android test failure parallel/test-fs-cp
  • Handle Android test failure parallel/test-loaders-unknown-builtin-module
  • Handle Android test failure parallel/test-process-beforeexit-throw-exit
  • iOS Test suite should pass

@staltz
Copy link
Member Author

staltz commented Nov 30, 2022

Note to self: compilation for Android arm64 on macOS (M1) failed after some 20min with this:

/usr/bin/g++ -rdynamic -fPIC  -o /Users/staltz/oss/nodejs-mobile/out/Release/mksnapshot /Users/staltz/oss/nodejs-mobile/out/Release/obj.host/mksnapshot/deps/v8/src/snapshot/embedded/embedded-empty.o /Users/staltz/oss/nodejs-mobile/out/Release/obj.host/mksnapshot/deps/v8/src/snapshot/embedded/embedded-file-writer.o /Users/staltz/oss/nodejs-mobile/out/Release/obj.host/mksnapshot/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-aix.o /Users/staltz/oss/nodejs-mobile/out/Release/obj.host/mksnapshot/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-base.o /Users/staltz/oss/nodejs-mobile/out/Release/obj.host/mksnapshot/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-generic.o /Users/staltz/oss/nodejs-mobile/out/Release/obj.host/mksnapshot/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-mac.o /Users/staltz/oss/nodejs-mobile/out/Release/obj.host/mksnapshot/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-win.o /Users/staltz/oss/nodejs-mobile/out/Release/obj.host/mksnapshot/deps/v8/src/snapshot/mksnapshot.o /Users/staltz/oss/nodejs-mobile/out/Release/obj.host/mksnapshot/deps/v8/src/snapshot/snapshot-empty.o /Users/staltz/oss/nodejs-mobile/out/Release/obj.host/tools/v8_gypfiles/libv8_base_without_compiler.a /Users/staltz/oss/nodejs-mobile/out/Release/obj.host/tools/v8_gypfiles/libv8_init.a /Users/staltz/oss/nodejs-mobile/out/Release/obj.host/tools/v8_gypfiles/libv8_libbase.a /Users/staltz/oss/nodejs-mobile/out/Release/obj.host/tools/v8_gypfiles/libv8_libplatform.a /Users/staltz/oss/nodejs-mobile/out/Release/obj.host/tools/v8_gypfiles/libv8_zlib.a /Users/staltz/oss/nodejs-mobile/out/Release/obj.host/tools/v8_gypfiles/libv8_compiler.a /Users/staltz/oss/nodejs-mobile/out/Release/obj.host/tools/v8_gypfiles/libv8_initializers.a 
Undefined symbols for architecture arm64:
  "v8::internal::trap_handler::TryHandleSignal(int, __siginfo*, void*)", referenced from:
      v8::TryHandleWebAssemblyTrapPosix(int, __siginfo*, void*) in libv8_base_without_compiler.a(api.o)
      v8::V8::TryHandleSignal(int, void*, void*) in libv8_base_without_compiler.a(api.o)
  "v8::internal::trap_handler::RegisterDefaultTrapHandler()", referenced from:
      v8::internal::trap_handler::EnableTrapHandler(bool) in libv8_base_without_compiler.a(handler-outside)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

@dao
Copy link

dao commented Nov 30, 2022

v8::internal::trap_handler::TryHandleSignal(int, __siginfo*, void*)

Think this is the issue

Found here

@staltz staltz changed the title Update node.js to v16.17.1 src: update node.js to v16.17.1 Nov 30, 2022
@staltz
Copy link
Member Author

staltz commented Dec 13, 2022

It seems like the problem isn't that trap handlers should be disabled on Android (because they already should be disabled), it seems like the Android detection isn't working, and it could be because __ANDROID__ on clang (on Mac M1) isn't working, see android/ndk#807

I'll try to compile on my Linux and see if that helps. If it does, then we can come up with a M1 clang-specific fix.

@staltz
Copy link
Member Author

staltz commented Dec 13, 2022

and it could be because __ANDROID__ on clang (on Mac M1) isn't working

That's not it, nope. I made a simple check where I just test if #if __ANDROID__ then spit out an error, and the error did appear.

@staltz
Copy link
Member Author

staltz commented Dec 13, 2022

Yeah, the problem was not __ANDROID__ undefined, because I got this error when building for Android arm64 on Linux x86 with Android SDK 23 (and NDK 21.4):

/usr/bin/ld: nodejs-mobile/out/Release/obj.host/v8_base_without_compiler/deps/v8/src/api/api.o: in function `v8::TryHandleWebAssemblyTrapPosix(int, siginfo_t*, void*)':
api.cc:(.text._ZN2v829TryHandleWebAssemblyTrapPosixEiP9siginfo_tPv+0x5): undefined reference to `v8::internal::trap_handler::TryHandleSignal(int, siginfo_t*, void*)'
/usr/bin/ld: nodejs-mobile/out/Release/obj.host/v8_base_without_compiler/deps/v8/src/trap-handler/handler-outside.o: in function `v8::internal::trap_handler::EnableTrapHandler(bool)':
handler-outside.cc:(.text._ZN2v88internal12trap_handler17EnableTrapHandlerEb+0x35): undefined reference to `v8::internal::trap_handler::RegisterDefaultTrapHandler()'
/usr/bin/ld: nodejs-mobile/out/Release/obj.host/v8_base_without_compiler/deps/v8/src/execution/arm64/simulator-arm64.o: in function `v8::internal::Simulator::ProbeMemory(unsigned long, unsigned long)':
simulator-arm64.cc:(.text._ZN2v88internal9Simulator11ProbeMemoryEmm+0x20): undefined reference to `ProbeMemory'
collect2: error: ld returned 1 exit status
make[1]: *** [tools/v8_gypfiles/mksnapshot.host.mk:180: nodejs-mobile/out/Release/mksnapshot] Error 1
rm 9d4c4da4a6df91554ca866f7c122f733d33f4d70.intermediate b17d9ae4e6ddcd7c0c372eb0ba23b725609580b9.intermediate 724ff9aa350fba35ccf456e63e736b8278b35bcf.intermediate 5fc05a88d044c8afd520e809b4a20ebb7752f9f3.intermediate
make: *** [Makefile:113: node] Error 2

@staltz
Copy link
Member Author

staltz commented Dec 14, 2022

Alright, inspired by nodejs/node@ee9aac1#diff-2f6d66c5a80c7401c5b5bba4bdc021dbe547fc2aff0dd1ef7dbb165dcc83ad3f, I just hard-disabled the trap handler because this project is anyway only going to be compiled for Android and iOS, and made some progress. The trap-handler-related error no longer shows up! V8 compiled.

Now it proceeded to compile libnode, and it succeeded with some files, but failed when compiling node_credentials.cc:

../src/node_credentials.cc:421:22: error: use of undeclared identifier 'SetEGid'; did you mean 'GetEGid'?
  registry->Register(SetEGid);
                     ^~~~~
                     GetEGid
../src/node_credentials.cc:225:13: note: 'GetEGid' declared here
static void GetEGid(const FunctionCallbackInfo<Value>& args) {
            ^
../src/node_credentials.cc:422:22: error: use of undeclared identifier 'SetEUid'; did you mean 'GetEUid'?
  registry->Register(SetEUid);
                     ^~~
                     GetEUid
../src/node_credentials.cc:218:13: note: 'GetEUid' declared here
static void GetEUid(const FunctionCallbackInfo<Value>& args) {
            ^
../src/node_credentials.cc:423:22: error: use of undeclared identifier 'SetGid'; did you mean 'GetGid'?
  registry->Register(SetGid);
                     ^~~~
                     GetGid
../src/node_credentials.cc:211:13: note: 'GetGid' declared here
static void GetGid(const FunctionCallbackInfo<Value>& args) {
            ^
../src/node_credentials.cc:424:22: error: use of undeclared identifier 'SetUid'; did you mean 'GetUid'?
  registry->Register(SetUid);
                     ^~~~~~
                     GetUid
../src/node_credentials.cc:204:13: note: 'GetUid' declared here
static void GetUid(const FunctionCallbackInfo<Value>& args) {
            ^
../src/node_credentials.cc:425:22: error: use of undeclared identifier 'SetGroups'; did you mean 'GetGroups'?
  registry->Register(SetGroups);
                     ^~~~~~~~~
                     GetGroups
../src/node_credentials.cc:311:13: note: 'GetGroups' declared here
static void GetGroups(const FunctionCallbackInfo<Value>& args) {
            ^
5 errors generated.
make[1]: *** [nodejs-mobile/out/Release/obj.target/libnode/src/node_credentials.o] Error 1
make[1]: *** Waiting for unfinished jobs....
rm 4f0575699c686011c71c8bb25170874ecd54b0a6.intermediate aa9e967d96156baaef289b8b026080fea428906a.intermediate 6b666fbb9a68e41f440219de7f344bc40249ce13.intermediate a903bbb89b72e5de4253eee3751d87830a898061.intermediate 1ed0fa3ea1a0b4d4cf63e728686261c57ed4d157.intermediate
make: *** [node] Error 2

PS: I'm reporting all this here also for my own sake, to recall what happened in between these very long compilation times.

@staltz
Copy link
Member Author

staltz commented Dec 14, 2022

Okay, that one wasn't hard. It was a matter of adding more #ifndef __ANDROID__ like commit 7ae4dd7 did.

Seems like compiling for Android (on Mac M1) succeeded! But the script itself ended with an error, something about cp. A trivial thing to fix.

Now onto running the test suite.

@staltz
Copy link
Member Author

staltz commented Dec 14, 2022

Compilation for iOS on Mac (M1) seems like it's working too, I'm just having to ignore the build for simulator because those are theoretically x86_64 and nodejs (with V8) can't be compiled for x86 on arm64 machines. This is unless we change the simulator build to assume that the simulator arch is arm64, but that's an issue for the future, when "all" Macs are M1+.

Technically the only thing missing is running the tests. Those just take a lot of hours, so it'll be slow.

@staltz
Copy link
Member Author

staltz commented Dec 14, 2022

After iOS compilation and during Framework creation, I got the following error:

fatal error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: 
file too large to be in a fat file because the size field in struct fat_arch is only 32-bits and 
the size (5967971672) of tools/ios-framework/bin/arm64/libv8_base_without_compiler.a exceeds that

I checked, and libv8_base_without_compiler is 5.6 GB :rage2:

Other files:

total 23143192
drwxr-xr-x  23 staltz  staff   736B 14 Dec 15:50 .
drwxr-xr-x  16 staltz  staff   512B 14 Dec 16:09 ..
-rw-r--r--   1 staltz  staff   5.6M 14 Dec 16:09 libbrotli.a
-rw-r--r--   1 staltz  staff   1.4M 14 Dec 16:09 libcares.a
-rw-r--r--   1 staltz  staff    11M 14 Dec 16:09 libgtest.a
-rw-r--r--   1 staltz  staff    48K 14 Dec 16:09 libgtest_main.a
-rw-r--r--   1 staltz  staff   172K 14 Dec 16:09 libhistogram.a
-rw-r--r--   1 staltz  staff   483K 14 Dec 16:09 libllhttp.a
-rw-r--r--   1 staltz  staff   1.8M 14 Dec 16:09 libnghttp2.a
-rw-r--r--   1 staltz  staff   1.7M 14 Dec 16:09 libnghttp3.a
-rw-r--r--   1 staltz  staff   3.1M 14 Dec 16:09 libngtcp2.a
-rw-r--r--   1 staltz  staff   484M 14 Dec 16:09 libnode.a
-rw-r--r--   1 staltz  staff    32M 14 Dec 16:09 libopenssl.a
-rw-r--r--   1 staltz  staff   2.2M 14 Dec 16:09 libuv.a
-rw-r--r--   1 staltz  staff   708K 14 Dec 16:09 libuvwasi.a
-rw-r--r--   1 staltz  staff   5.6G 14 Dec 16:09 libv8_base_without_compiler.a
-rw-r--r--   1 staltz  staff   1.2G 14 Dec 16:09 libv8_compiler.a
-rw-r--r--   1 staltz  staff   3.7G 14 Dec 16:09 libv8_initializers.a
-rw-r--r--   1 staltz  staff   5.7M 14 Dec 16:09 libv8_libbase.a
-rw-r--r--   1 staltz  staff   6.6M 14 Dec 16:09 libv8_libplatform.a
-rw-r--r--   1 staltz  staff   1.5M 14 Dec 16:09 libv8_snapshot.a
-rw-r--r--   1 staltz  staff   854K 14 Dec 16:09 libv8_zlib.a
-rw-r--r--   1 staltz  staff   828K 14 Dec 16:09 libzlib.a

@staltz
Copy link
Member Author

staltz commented Dec 20, 2022

ar -tv libv8_base_without_compiler.a works great for looking inside the file and seeing how much space each section takes.

@staltz
Copy link
Member Author

staltz commented Dec 20, 2022

I compared libv8_base_without_compiler.a before and after, and learned that:

  • Total size before: 3.1 GB
  • Total size after: 5.6 GB
  • Total number of .o files bundled inside the .a BEFORE: 440
  • Total number of .o files bundled inside the .a AFTER: 762

The AFTER file has 191 -tq.o files, which are Torque outputs, and in total these files occupy 681 MB. In the BEFORE file there are only 3 -tq.o files.

It's hard to say what is the culprit here in terms of file size, because -tq files occupy a lot, but subtracting only them would bring the .a down to 5.0 GB, which is still a lot larger than 3.1 GB. I'm going to try somehow to increase the fat limit when creating the .framework, other than that my option is to try to remove some unnecessary .o from the large .a, if possible. Removing -tq.o files is not enough because the fat file size limit is 4.2 GB.

@staltz
Copy link
Member Author

staltz commented Dec 20, 2022

The file too large error specifically happens when we use lipo to join arm64 .a with iphonesimulator .a into one common (so called "fat" universal binary) .a. We could just skip this lipo part, keeping the arm64 .a intact and compile the Xcode Framework project on those .a instead. This means that nodejs-mobile would drop support for iphonesimulator, at least temporarily.

@staltz
Copy link
Member Author

staltz commented Dec 20, 2022

We could just skip this lipo part, keeping the arm64 .a intact and compile the Xcode Framework project on those .a instead. This means that nodejs-mobile would drop support for iphonesimulator, at least temporarily.

This WORKED, the Framework got built, and so did the test app to run the tests on an iPhone. The test suite seems broken because the mobile app has the individual js test files in the wrong place (or missing). Will keep on working on this.

@staltz
Copy link
Member Author

staltz commented Jan 3, 2023

Running nodejs-mobile 16.17.1 on an iPhone X (A11 chip) I learned that it crashes with EXC_BAD_INSTRUCTION on an assembly instruction fjcvtzs which is available on armv8.3-A but my iPhone X has A11 chip which is armv8.2-A.

This was built on an Apple M1 Pro macOS computer. Next, I'll try to build nodejs-mobile 16.17.1 on an older x86_64 macOS computer, maybe that would generate armv8.0-A compatible instructions.

Useful links:

@staltz
Copy link
Member Author

staltz commented Jan 9, 2023

Next, I'll try to build nodejs-mobile 16.17.1 on an older x86_64 macOS computer, maybe that would generate armv8.0-A compatible instructions.

This failed to compile because of something related to gtest (a dependency in v8) using cstdio which expected the __arm__ preprocessor flag (which is not the case on x86_64 computers, but is the case on M1 Pro computers). I'll try configuring the __arm__ flag.

@staltz
Copy link
Member Author

staltz commented Jan 9, 2023

Took me a while to figure out why the cc and g++ compiler calls didn't have -arch arm64 when compiling from a x64 macbook, but it turned out to be this commit: nodejs/gyp-next#78 which broke our build. I added a hack to ignore that if guard, but would be good to find a way to commit to nodejs upstream.

@staltz
Copy link
Member Author

staltz commented Jan 10, 2023

Compilation lasts about 2h and then I get this (on x64 macbook):

    cd /Users/staltz/oss/nodejs-mobile/tools/ios-framework
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -target arm64-apple-ios9.0 -dynamiclib -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk -L/Users/staltz/oss/nodejs-mobile/out_ios/Release-iphoneos -L/Users/staltz/oss/nodejs-mobile/tools/ios-framework/bin -F/Users/staltz/oss/nodejs-mobile/out_ios/Release-iphoneos -filelist /Users/staltz/oss/nodejs-mobile/out_ios/NodeMobile.build/Release-iphoneos/NodeMobile.build/Objects-normal/arm64/NodeMobile.LinkFileList -install_name @rpath/NodeMobile.framework/NodeMobile -Xlinker -rpath -Xlinker @executable_path/Frameworks -Xlinker -rpath -Xlinker @loader_path/Frameworks -dead_strip -Xlinker -object_path_lto -Xlinker /Users/staltz/oss/nodejs-mobile/out_ios/NodeMobile.build/Release-iphoneos/NodeMobile.build/Objects-normal/arm64/NodeMobile_lto.o -stdlib\=libc++ -fapplication-extension -all_load -v -lstdc++ -lv8_compiler -lv8_snapshot -lv8_libsampler -lhistogram -lllhttp -lv8_initializers -lv8_libplatform -lbrotli -luvwasi -lv8_libbase -lv8_base_without_compiler -framework CoreFoundation -lcares -lhttp_parser -lnghttp2 -lnode -lopenssl -luv -lzlib -compatibility_version 1 -current_version 1 -Xlinker -dependency_info -Xlinker /Users/staltz/oss/nodejs-mobile/out_ios/NodeMobile.build/Release-iphoneos/NodeMobile.build/Objects-normal/arm64/NodeMobile_dependency_info.dat -o /Users/staltz/oss/nodejs-mobile/out_ios/Release-iphoneos/NodeMobile.framework/NodeMobile
Apple clang version 13.0.0 (clang-1300.0.29.30)
Target: arm64-apple-ios9.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -application_extension -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -dynamic -dylib -dylib_compatibility_version 1 -dylib_current_version 1 -arch arm64 -dylib_install_name @rpath/NodeMobile.framework/NodeMobile -all_load -dead_strip -platform_version ios 9.0.0 15.2 -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk -o /Users/staltz/oss/nodejs-mobile/out_ios/Release-iphoneos/NodeMobile.framework/NodeMobile -L/Users/staltz/oss/nodejs-mobile/out_ios/Release-iphoneos -L/Users/staltz/oss/nodejs-mobile/tools/ios-framework/bin -filelist /Users/staltz/oss/nodejs-mobile/out_ios/NodeMobile.build/Release-iphoneos/NodeMobile.build/Objects-normal/arm64/NodeMobile.LinkFileList -rpath @executable_path/Frameworks -rpath @loader_path/Frameworks -object_path_lto /Users/staltz/oss/nodejs-mobile/out_ios/NodeMobile.build/Release-iphoneos/NodeMobile.build/Objects-normal/arm64/NodeMobile_lto.o -lc++ -lv8_compiler -lv8_snapshot -lv8_libsampler -lhistogram -lllhttp -lv8_initializers -lv8_libplatform -lbrotli -luvwasi -lv8_libbase -lv8_base_without_compiler -framework CoreFoundation -lcares -lhttp_parser -lnghttp2 -lnode -lopenssl -luv -lzlib -dependency_info /Users/staltz/oss/nodejs-mobile/out_ios/NodeMobile.build/Release-iphoneos/NodeMobile.build/Objects-normal/arm64/NodeMobile_dependency_info.dat -lc++ -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.0.0/lib/darwin/libclang_rt.ios.a -F/Users/staltz/oss/nodejs-mobile/out_ios/Release-iphoneos
ld: library not found for -lv8_libsampler
clang: error: linker command failed with exit code 1 (use -v to see invocation)

@staltz
Copy link
Member Author

staltz commented Jan 16, 2023

I made some progress on the ld: library not found for -lv8_libsampler issue. Turns out that the linker can't find v8_libsampler because the .a file for it wasn't built, and that's why we're not taking it into consideration here 6b8414d

Now, need to figure out what to do with v8_libsampler. It seems it is taken into account when compiling v8_libplatform, but is it statically linked inside v8_libplatform? If so, can we remove -lv8_libsampler when linking? If not, how do we configure the project so to compile libsampler?

@staltz
Copy link
Member Author

staltz commented Jan 16, 2023

Yeah, found a solution to that by updating the tools/ios-framework/NodeMobile.xcodeproj file (via XCode's UI) because it still had references to v8_libsampler. I updated it so that it matches the same list of .a files that tools/ios_framework_prepare.sh has. Now I have the compilation and post-compilation framework scripts successful.

Next, I'm going to see whether the NodeMobile framework can be used in a React Native app, successfully in runtime.

@staltz
Copy link
Member Author

staltz commented Jan 16, 2023

Next, I'm going to see whether the NodeMobile framework can be used in a React Native app, successfully in runtime.

Yes, it can!

Final steps is massaging the test suite so that all tests pass (or skip) on both iOS and Android.

@staltz
Copy link
Member Author

staltz commented Jan 23, 2023

All tests handled! All done!

@staltz staltz merged commit 29cb628 into tiny-history Jan 23, 2023
@staltz staltz deleted the 16_17_1 branch January 23, 2023 15:34
@gmaclennan
Copy link

This is excellent, thank you so much for this work @staltz it really helps us with the work on mapeo mobile

@staltz
Copy link
Member Author

staltz commented Jan 24, 2023

@gmaclennan You're welcome! I'm now busy compiling everything and making a release of nodejs-mobile. After that, I'll make a release for nodejs-mobile-react-native

@tobias-klein
Copy link

@staltz
This is awesome! Glad to see nodejs-mobile has a future!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants