Could you introduce your app in a few sentences?

Biki is the bike sharing system application in Hawaii.

It allows users to find bike stations (on a map or in a list), rent a bike, buy a plan and find interesting places to visit in Hawaii for free. One cool feature is a practical timer that reminds you when your free ride (25 minutes) comes to an end.

The application is available on iOS and Android.

What made you decide to use/switch to React Native?

At OSEDEA, we've been using React Native since 2015. In the past, we created a few applications using Ionic (the AngularJS based mobile application framework). But the feeling was never really... mobile! It felt more like a web page inside a mobile app.

This stopped with React Native.

In the Biki app, we used a lot of location features of the phone to find the nearest station or find points of interest nearby.

In addition, from day one, the requirements were to make the app available on Android and iOS. React Native was an interesting contender from the start.

How did you transition to React Native?

Before starting to work with React Native, we were all web developers. Having experience with React, it was the logical and easy choice for us to jump on the React Native train.

What has your experience been working with React Native in terms of app performance, have you noticed any impacts?

Optimizing the map to display a certain number of pins for stations was a massive challenge, and in the first weeks of the project, using react-native-maps was not successful.

To solve for this, we switched to using Mapbox and their react-native-mapbox-gl.

How has adopting React Native affected developer productivity?

Knowing React and being a web developer, developing with React Native is a breeze... Until you need to put your hands in some native code. At that point it can get a bit tricky, but thankfully you can do a lot without having to deal with native code.

If you need to modify native code, a good idea is to have at least one Android developer and one iOS developer. With that setup, sky’s the limit and you can do anything with React Native.

The following libraries are some of our favorites, and we use them on most projects at OSEDEA:

Firebase: react-native-firebase

We mostly use Firebase for Analytics and Cloud Messaging but it seems to be very popular for Authentication in the community as well. Adding Ads to your app to monetize it is super easy with AdMob.

We mostly use Firebase for Analytics and Cloud Messaging but it seems to be very popular for Authentication in the community as well. Adding Ads to your app to monetize it is super easy with AdMob. Fabric for crash reporting (react-native-fabric + check out the ignite plugin), although it is now Firebase Crashlytics

CodePush for live update/bug fixing

CodePush allows you to update the JS package of your React Native app over the air, either live (even if the user is using the app, useful for critical bug fixing) or at the next resume/app launch.

CodePush allows you to update the JS package of your React Native app over the air, either live (even if the user is using the app, useful for critical bug fixing) or at the next resume/app launch. Detox for end to end testing of your React Native app

Ignite, an awesome tool to speed up React Native development, created by the great team at Infinite Red.

What resources have you used to learn React Native? Books, tutorials, courses etc. Anything you can recommend?

We mostly used the React Native documentation, the packages documentation, and some repositories like awesome-react-native.

If I was starting now, I would also checkout Jason Brown's (a.k.a. @browniefed) courses on egghead.io.

We also subscribed to the React Native Newsletter and the Let's React Newsletter to keep up-to-date with the latest changes.

Speaking of changes, it is always a good idea to checkout the Release notes of React Native.

What are some things that you don’t like about React Native or that need to be improved?

A thing that is often criticized about React Native is Navigation. As the default is to use react-navigation for most people, I agree that when your app gets pretty big, it gets tricky to keep 60 fps at anytime in your app.

However, alternatives exist. You can get the performance of native mobile applications along with your experience in a React Native app, but that requires a some extra work and using other libraries like Wix's React Native Navigation.

Anything else you would like to mention?

If you go on vacation in Hawaii, be sure to try the app! :) The reviews have been extremely positive.