Could you introduce your app in a few sentences?
Ro is a privacy focused contacts management mobile app, available on iOS and Android. It was made to help individuals quickly share their contact info while networking. It generates custom QR codes with your contact information that can be scanned and added to your phone’s contact list. You can check it out here: link. We initially created it because we don’t like using business cards, but we think others can get some use out of it too.
What made you decide to use/switch to React Native?
We started using React Native from scratch because one of us already had React experience building web apps, and neither of us had lots of native iOS or Android dev experience. From what we saw, RN had the best documentation and dev support online, so there were more resources available to help us build the app. The reason we chose to create a mobile app instead of a Progressive Web App was - we needed access to native resources and APIs (such as Contacts) that PWAs do not have.
How did you transition to React Native?
We both shared a frustration with business cards in general, and believe that contacts sharing in general can be better. We’re both JS developers, and one of us had previous experience building React web apps. The transition from web apps into React/RN took some fiddling around and practice, as well as learning the idiosyncrasies and limitations of the two major mobile OSs. Thankfully, there was lots of documentation to help us get started.
Have your tried other cross platform technologies before using React Native?
Yes, we’ve tried Cordova for mobile apps and Electron for desktop. Cordova was great for simple apps. One of us used it to turn a MEAN stack app into an Android and iOS mobile app.. We’ve also used Electron to turn a React web app into a Windows desktop app that reads your mind while watching instructional videos. There were mild webpack and babel issues encountered during configuration, but overall, using Electron was painless. The same could be said for Cordova. Nevertheless, the amount of support from the dev community for React Native made the choice to move to that platform a no-brainer.
What has your experience been working with React Native in terms of app performance, have you noticed any impacts?
So far, performance (or lack of it) has not been an issue. Our app mostly deals with slow human actions (scanning a QR code, etc), so UI speed has not been an obstacle. Basically, we haven’t noticed a difference from native UI.
How has adopting React Native affected developer productivity?
I think it’s safe to say that for anyone learning React/React Native, there’s a learning curve. Once that curve levels off though, it’s pretty smooth sailing. Familiarity with the React lifecycle definitely improves developer productivity. The React Native dev community has come out with a lot of great libraries so devs don’t have to reinvent the wheel. Similarly, it helps to have some knowledge of general mobile OS concepts (like Intents on Android). That was not our strong point, and we had to learn a lot of it along the way.
Which tools, libraries and frameworks are part of your development process with React Native?
For our IDEs, we both use Xcode and Android Studio for compilation and running, and one of us uses JetBrains WebStorm for development. Our app has a lot of features related to contacts management, so we’ve used the following libraries to help create, scan, and share QR codes with embedded contact info:
For manual testing, we initially used Expo, but found that it was very limited. Using the CLI worked much better for us. We use Mocha for unit testing, and are in the process of looking for a good integration and UI testing framework.
What resources have you used to learn React Native? Books, tutorials, courses etc. Anything you can recommend?
We’ve referenced more Stack Overflow pages than we can remember. But really, the React Native documentation is pretty comprehensive, and was more than enough to get us started building the Ro app. Youtube videos very also really helpful.
What are some things that you don’t like about React Native or that need to be improved?
This is not about React Native specifically, but about cross-platform mobile development in general: There are a lot of intricacies of compiling and dependency management involved (in XCode and Android Studio), even if the framework (like React Native linking) shields you from most of it. But when you do run into a config or compilation issue outside of regular setup instructions, that leads to enormous amounts of research and debugging.
Also (and - not sure this is technically possible), we wish that crash reporting for RN was a bit more extensive (talking about the silent crash and exit situations).
Anything else you would like to mention?
Check out our website! Feel free to reach out at firstname.lastname@example.org.