Why we chose Expo to build the future of photo sharing

Wassim Gharbi
Apperture
Published in
5 min readOct 16, 2018

When Apperture started as a PennApps hackathon project almost a year ago, Charlie Cheever was promoting his new platform Expo.io (a free, open-source development layer on top of React Native) during the event and encouraged everyone to give it a try. And although we developed our first prototype with Expo, we drifted away from it due to crucial unsupported features and the platform simply being at its very beginnings.

Even at the time, we had a bold and innovative idea that we knew had a great potential and just needed to be implemented correctly. We saw a need for a seamless photo sharing experience for friend groups: Bluetooth and Airdrop were fast and simple but they were limited to one-to-one sharing, Google Photos, and Google Drive required everyone to have a Google account and to go through the long process of setting up an sharing an album between the collaborators, other group chat apps such as GroupMe and Whatsapp simply were not designed for collaborative photo sharing.

We wanted to create a product that had a few simple features that would make the photo sharing experience easy and enjoyable for large and small groups of people and so our product needed to be able to

  • Discover and invite nearby devices without the need for an account (or for the person to be a known contact)
  • Share photos in real-time as they are being taken
  • Work on any possible platform (for example, Airdrop was limited to iOS)
  • Organize photos by album without the need for a long set-up process
  • Persist photos and possibly share them on the web through a generated link

Our aim was to disrupt and completely re-engineer the photo sharing experience by simply reversing it and essentially allowing users to “share photos before they take them” and we saw a great potential for this concept at parties, weddings, concerts and other group events.

The Apperture three-step photo sharing process compared to traditional photo sharing apps

To create Apperture, we explored multiple options including building native iOS and Android apps, vanilla React Native and finally Expo. We ruled out the first option very quickly since we wanted our apps to look and behave the same across all platforms which meant that native apps would essentially double our work and create inconsistencies between the implementations. At the same time, native apps wouldn’t allow us to easily implement our own user-interface elements.

We then turned to vanilla React Native, and although the development process was streamlined and we were making progress a lot faster, the project quickly became harder to maintain, especially as we added more and more native modules that required us to deal directly with Android Studio and XCode (Cocoa Pods). Particularly, react-native-camera , react-native-maps and the Facebook SDK were a pain to link to the project and would consistently break whenever an update was due.

Finally we decided to give Expo another try. We knew Expo would give us multiple benefits from the get-go:

  1. Built-in Facebook and Google native log-in with minimal configuration necessary (which were crucial to our platform since we did not want users to waste time on creating accounts)
  2. Pre-linked modules and components (most importantly the camera, location and image manipulation components) which meant we won’t have to deal with XCode and Android Studio anymore (cleaner code, smaller repo and less error-prone coding).
  3. Built-in push notifications (before we were using OneSignal which wasn’t that bad either)
  4. An easy API for managing fonts and assets (which are one of React Native’s weaknesses).
  5. A beautiful development environment that uses QR Codes and network discovery to find and push test apps to devices (in addition to the already awesome hot reloading, which allows you to see code updates in real-time on the test device, something you wouldn’t even dream of with XCode and Android Studio).
  6. Most importantly, over-the-air updates! A simple `expo publish` command would update our production apps directly without having to rebuild APKs/IPAs and go through the Apple and Google approval processes (which took most of our time)

However, Expo has its own shortcomings (that the Expo community is consistently working on every day). Most notably, our binary size increased (compared to vanilla React Native) due to Expo bundling all modules whether used or not and at the same time, we are still missing a few important features that Expo does not include yet (such as Bluetooth, WiFi management, background location tracking and react-native-fast-image).

Nevertheless, Expo has more than quadrupled our productivity and release cycle efficiency and enabled us to focus on building features instead of spending time on setting up and configuring modules. Our current plan is to stick to Expo as much as possible until features that require detaching become critical, in which case we might consider using ExpoKit instead (and the transition should be easy).

One of our concerns remains to be the dependence on Expo’s servers for building APKs/IPAs, pushing OTA updates as well as push notifications (which in case Expo ever ceases to exist might present a few problems, although most of the technology is open source).

Apperture is a location-based photo sharing platform that allows users to “share photos before they take them.”

Download Apperture on the App Store (iPhone / iPad): https://itunes.apple.com/app/id1426192435

Download Apperture on the PlayStore (Android): https://play.google.com/store/apps/details?id=re.appertu.mobile

--

--