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.
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.
One very quickly runs out of superlatives with Steve. He is the cleverest person I know. He is highly innovative, passionate regarding the proper maintenance of agreed standards and protocols and establishes excellent relationships with our clients.
Steve is a rare developer resource who is able to provide a good breakdown of technical solutions for all audiences to understand... Steve understands the importance of project deliverable's both from a client and business perspective and shows a personal pride in ensuring the delivery schedules are met.
I have worked closely with Steve for his time with us and long before we formed our company. His technical ability far out-performs anyone I have known or met in companies we have worked with like IBM/EDS/Cap Gemini
Steven showed a great deal of commitment and skill when he worked with me. His attention to detail, comprehensive documentation and well thought out code, using very impressive technical standards meant that it was always possible to rely on the solutions provided being top notch. Steven is an asset to any company, at any level - if I were able to, I'd love to work with him again.
I have had the pleasure of working with Steven for several years in my role as CTO. He his one to the most multi-disciplined technically skilled developers I have known but what sets him apart is his eye for, and attention to detail, particularly when considering the user experience. I would absolutely not hesitate in recommending Steven.