Rewriting a real app for SwiftUI

When we founded Egeniq, almost 9 years ago, we had no experience developing iOS (or Mac) apps. So next to finding clients for our agency, we invested a lot of time in gaining some crucial experience.

We decided to build an app for AXIS security cameras. At the time there was no official AXIS app available in the app store and the few 3rd party apps that existed were of very low quality and didn’t offer a lot of functionality. AXIS cameras have a very nice and complete HTTP API which makes it an excellent target for a full featured 3rd party client.

Our app, CameraControl Pro for AXIS, was written in Objective-C and used almost every framework available at the time. We used navigation, modal and popup controllers, table views, gesture recognisers, Core Data, HTTP requests, the accelerometer, audio, push notifications and in-app purchases. In other words, it provided us with an excellent playground for learning iOS app development.

Through the years we kept maintaining the app, but didn’t really add any big new features (but we still had a nice user base). A few years back we added support for subscriptions and just recently we added support for rich push notifications and improved multitasking on iPad. The app is as of today still for 95% written in Objective-C.

As CTO of Egeniq my day to day tasks changed quite a bit over the years. At first I helped develop all the apps for our clients. Over the years my role changed from lead developer to project manager and currently my role is more that of technical supervision / direction, strategy and some sales.

I still love development / programming and I also firmly believe that I can’t do my job properly without having a good understanding of the technologies our developers use. So occasionally I still like to try out new stuff by working on client projects or on one of our own apps.

When Apple introduced SwiftUI at WWDC 2019 I immediately wanted to gain some experience to see how we could use it for future client projects. As it requires iOS 13 we will probably not start using it for our clients right away, but for our own apps we can decide which versions of iOS we want to support. So I decided it was time for a rewrite of CameraControl using Swift, SwiftUI and Combine as it seemed like a perfect match.

In the next few articles I will share some of my learnings. You can find the first article here.