A quick and non-definitive list of capabilities we need to research in React Native ( RN )
Initial technical requirements
- use on-device passkey support and biometrics to authenticate users
- There seem to be some RN libraries that help with passkeys.
- Local user accounts is fine for now, eg sign in with google / apple support.
- FOLLOWUP is to create fission users with a WNFS etc
- securely create a recovery kit and store it off-device in a place the user can recover it from in case of device loss, see Rainbow Wallet for inspiration.
- deploy to the Apple App Store and Google Play Store
- store user data in a WNFS Volume
- store encrypted files in the Private FS
- publish public data directly from the app!
Followups
- design for how private data sharing could work
Sharing to our app
A core user interaction will be to share something from other apps on their phone to our app. We should show up in the native iOS and Android share sheets.
- SO article with pointers
- Android
- iOS
- React Native Share Extension apparently makes this easier / is an abstraction. Warning this extension is old and has not been updated to work with the current Xcode tooling chain.
- relatively recent blog post about a possible approach to this.
General guides
Interesting codebases
- Sealvault is an open source codebase that uses a Rust core and Swift UI
- Rainbow Wallet Is a React Native ( GPL v3 ) codebase that implements use of iCloud to store a recovery kit.
- looks like most are pretty basic but the mattermost codebase features native share integration
- Expo Examples Github
- Curated list of open source react native apps
- Passkeys support? Beyond Identity
Tooling
- Expo is the most convenient way to rapidly build UI for react native apps. What it is not good for is building native extensions.
- React Native tooling and scaffolding is the best way to integrate directly with xcode
- Hermes "is an open-source JavaScript engine optimized for React Native. "
- Nativewind - tailwind for React Native
It looks like the best developer experience is likely the latter option. React Native’s existing tools support typescript as an option and as well support easy preview of the application in the iPhone simulator.
What is somewhat arduous / an opportunity for bringing in React Native experience ( contractor? ) is the tedious integration of key platform capabilities into the app, for example the “native share” extension.
Xcode shenanigans
iOS development requires a bunch of ruby nonsense which is an extra pain to get right on M1 laptops currently. Here’s some additional stuff to help maybe: