Notes on Expo - What I Learned Building and Launching a Location Based Wikipedia Search Tool

I recently launched Geoflow, an Android and iOS app that uses your phone's location to find nearby Wikipedia articles. I built it in part to learn more about Expo, a React Native library / sdk / development tool / cloud service that has picked up quite a bit of steam in the last year.

React Native has come a long way as well, and the eco-system around it has exploded. There's a lot of junk out there, but there are also many very cool, well-maintained libraries that let silly web developers like me, with not much Objective-C/Swift/Java experience get in on all the app making fun.

Here are some notes on what I learned using Expo to build and launch Geoflow:

You only need one icon image.

I'm sick of running around the web looking for iOS icon image generators to get all the right sizes produced. With Expo you drop in a single image reference in your exp.json and the app icon magically works. Very cool.

For my other apps, Ive been using this script which works well.

You don't need an Android phone...but it would help.

I did my development on a Mac, tested on an iPhone. Used the iOS simulator to develop, and Genymotion to make sure everything looked okay on Android. Genymotion was a bit of a pain to setup...

It's very cool writing an "isomorphic" code base (is that the right term?) and seeing your single Javascript directory running consistently on both Android and iOS - with the corresponding UI differences.

Expo doesn't do everything, plan your app accordingly.

The XDE is very cool. Not having to deal with Xcode and Android Studio is relaxing. Not having to handle signing certificates is pretty nice. Literal one-click deploys in the XDE to deliver an update to a live app is almost magical. Expo does a lot of sweet stuff "behind the scenes," but it comes at a cost. At least as of this writing. If you want to request extra app permissions (background geo), make use of libraries with native code (native Mixpanel), or do anything that might require "dropping down" to the native code level you lose some of the Expo magic. So make sure you have a clear understanding of what libraries and permissions your app needs and will need before choosing Expo.

That being said, the community is very active and Expo is constantly looking for new integrations.

I've had great experience in the Expo Slack chat, on their forums, and using the feature request board. There's an active and helpful community developing around Expo which I relied on and continue to rely on for answers and advice. It's very easy to reach out, and get answers back. So make yourself heard if you feel strongly about a native library or feature that needs to be integrated.

Push notifications need some love.

Expo is rolling their own push notification service, and adding that functionality to your app is easy to do...but you're locked into their tools. I found this frustrating when I learned that I couldn't use Mixpanel for automated notifications without "detaching" my app.

I'd say their push notification service isn't "ready for primetime" mainly because it requires you to set-up and manage your own backend services to send notifications. Not the end of the world, and they do have a Node.js library. But it'd be great if there was a dashboard / scheduling tool available. It's frustrating that it's not possible to integrate with existing services that already do this.

Launching your app is hard.

I'm still trying to figure this part out. No longer Expo related. How do I get people to download what I've built? I think Geoflow is pretty cool..and very fun to use walking around NYC, and other cities as well I'm sure.