Remote control aircraft flight logging
Remote Control Aircraft Flight Logging

Why this app?

I needed a bigger challenge than the apps I have previously worked on. In the Windows world, I am used to working on very large applications that require complex inter-window communications and a lot of screens. The apps iOS I have created to date have all been a relatively simple structure with limited complexity (though the Management Standards app is far from a simple app).

I was promoted to create the RC Flight Log by an old boss of mine who, as you can probably guess, flys remote control aircraft. Not your piddling little 'toy' planes but rather large jet propelled aircraft. After a brief conversation, he outlined some of the requirements that the CAA put on him to log his aircraft flights. From there I extrapolated the RC Flight Log app.

The basic premiss is very simple. We have one or more pilots and one or more remote control aircraft that they can fly. We don't need to collect a lot of detail at this stage. Then things get complicated as we have to define the third element of the app; flights. We need a lot of data for flights.

Then we add the complication that these flights are reportable to the CAA. This leads to a subtle requirement that we cannot allow pilots, aircraft or flights to be deleted. I needed a way to ensure that users could 'delete' these items without the actual data being removed. So, pilots, aircraft and flights can be deleted and undeleted with ease.

It's far from perfect and is still missing a few of the features that a full app would require. However, the point of the exercise was to produce a complex app and to have a play with some more advances iOS features during the development. It certainly fulfils that brief.

The images and video shown here are all for an iPhone app. The app, however, runs perfectly well, if not better, on an iPad. That's involved code that I didn't know you could write; specifically, detecting whether you're on an iPhone or an iPad and adjusting the size of screen elements to fit. That was fun.

Key Learning Points

What did I want to achieve

At the time of writing this, this was the most complex app that I have embarked on. It took much longer to complete than I had hoped and was much more complex that I expected. But that was the point of the exercise, so I'm not disappointed at how long it has taken.The beauty of a complex app is that it gives you the prefect opportunity to experiment. That's not as easy to do with a simple app.

  • A complex app with many screens.
  • Storing my data in Core Data.
  • Creating and implementing a shared framework.
  • Accessing the photo library and the camera.
  • Writing code to handle variable screen sizes depending on whether it's run on an iPhone or an iPad

The screen specific code came about because of a minor complication. The app contains a 'card view' for pilots and aircraft. These were carefully crafted to look good on the iPhone. Sadly, when run on the iPad as a master/detail app, the size of the master (left most) view is fixed. So, my carefully created cards would not fit in the available space. Lots of Googling later, I had a GeometryReader solution that let me ensure that the cards always fit well into the available space.

The development of this app also led to the creation of the Utility Views framework. This was a significant distraction (hence the extended development time) but a worth while exercise.

What it looks like

And the end result is...

And this is what I ended up with once the first version was complete. Please forgive the weirdness around the keyboard. While I'm getting better at recording the iOS simulator, I'm not quite there yet. It's also fair to warn you that this is quite a long video (about 30 minutes) because it's quite a complex app.

Source code

No secrets here

I have completed the whole app as far as I intend to take it for this exercise. As far as I know, it's got no obvious bugs, but I'm not entirely done with cleaning up the code and project structure. Assuming I don't get distracted on to something else, I will upload the source code.


Am I really any good?

Don't take my word for my abilities, take a look at other peoples opinions about me.