A Little Background
I started developing apps ten plus years ago for iOS using Objective C and Xcode. Even back then I knew I didn’t want to limit myself to a single device or operating system, which has led me on the an ever-winding road from one development environment to another.
The question was, and still is, how does one person develop apps for multiple platforms and keep the code base and features in sync?
While I used Java for some of my web application projects and I taught myself Objective C and XCode to develop a magazine app and a hiking app for the iPhone, there was little chance I was going to maintain two sets of code. The headache of simply keeping the apps up to date with OS updates and Apple and Google’s ever changing app requirements would’ve been a nightmare.
To answer this question I routinely research app development environments. Some of the ones I’ve looked at are:
• Ionic https://ionicframework.com/
• React Native https://reactnative.dev/
• Flutter https://flutter.dev/
• Xamarin https://dotnet.microsoft.com/en-us/apps/xamarin
• NativeScript https://nativescript.org/
• Node.js https://nodejs.org/en/
• Cordova https://cordova.apache.org/
• Swift https://www.swift.org/
And popular ones I looked at at one point that now seem to be deprecated: PhoneGap, Appcelerator.
Solar2d and LUA
Initially I adopted Corona (name changed to Solar2d… another victim of the pandemic!). Solar2d’s claim was that it was quick and easy to build apps using the LUA programming language. A single code base, testing in the built-in simulator and release to the stores without much fuss.
Solar2d is a great development environment and I highly recommend it for building business-focused apps and 2d game apps. I’ve created multiple business-focused apps with Solar2d: ADK46erNow, MotoTripNow. I’ve built a couple of card game apps – one for Bezier Games, Silver, one of my own – Travel Light Travelers and a maze exploration game – Illumimaze.
The SDK, the language, the support, the ease-of-use and development all make Solar2d a great development environment. However, there were a couple of issues that led me to look for yet another development environment:
- My primary issue was Solar2d’s inability to capture and stream the device’s camera view on Android. This is something I needed for my hiking app.
- Next was the fact that Corona’s history of company ownership has been rather fluid and in May of 2020 Corona Labs Inc stopped operations and Solar2d became a completely open source project. I’m a big fan of open source solutions, however, Solar2d’s future and marketshare made me nervous.
Unity and C#
Unity seemed like it might be a good option to replace Solar2d, but I needed to evaluate it to see if it could support the app features I needed. Without going into a lot of detail, the major app features I needed from a development environment were support for:
- Screen navigation: Unity has the concept of “scenes.”
- Tables: the ability to create a scrollable list of items.
- Feedback & Contact: Send an email, go to a website.
- Access a devices photo library: Available with a plugin.
- Social Media Share: Available with a plugin.
- Camera view: AR feature works on iOS and Android.
- GPS location: Access to the device’s GPS location. Works, but not in the background.
- Device magnetometer: “Compass.”
- Maps: Lots of map options.
- Weather: Access an outside data source, parse an XML file, store the data and then display that data.
- Database: Really convoluted, but it works. There are hoops you need to jump through to install and configure what should be a basic service.
My evaluation of Unity proved it would meet my needs and I’ve released my first Unity / C# built game app, The Art of Recall, a memory matching game. It is available in the Apple App Store and in Google Play. Next, I plan on redeveloping my hiking app, ADK46erNow, so it includes the AR camera view for Android.
That’s a long intro. Here’s a concise list of the app development skills I’ve acquired and continue to use: