From there, we moved to Unity because we wanted to make Hexicon a cross-platform mobile game, and two of our early project partners were also experienced with Unity. We created a working demo rather quickly, but when those partners left, we took a break from the project —mainly due to our own inexperience with Unity, but also partly due to burnout. Without our experienced team members, we just didn’t have the confidence to build a good app.
We revisited Hexicon a year later, and this time we used React Native and Expo. This allowed us to develop cross platform both quickly and easily and reach a working product as soon as possible.
Expo has two major workflows: managed and bare. The managed workflow (which is what we used at first) allows the abstraction of all the complicated connections to the native code and build process. The bare workflow gives you much more control over your code but requires you to manage a lot of the native build process yourself. However, there are limitations to the managed workflow. The main feature missing is In-App Payments (IAP), and when we reached the point of needing to test IAPs, we finally had to “eject” from Expo and transition from the managed to the bare workflow.
2: Google Play app signing was another major problem. Expo handles all the keys and everything needed to correctly sign your app for upload to the Play Store. When you eject, you have to do the app signing yourself through Android Studio. This took a while to figure out, but there is a way to download your keys from the Expo servers.
As with everything in software development, there are trade-offs. By moving out of the Expo managed workflow, we lose the convenience of testing our app through Expo, which is much quicker.
We also lose Over the Air (OTA) updates. OTA updates allow you to upload new react native code to your published app without having to upload anything new to the App store. At the moment, this is only supported in the managed workflow, but I’ve read that Expo may extend this feature to the bare workflow in the future.
We’ve finished the Android build and are currently testing stability. We’re now tackling the iOS build — we’ll share an update when we get that part to work!