Created an iPhone/iPad prototype of the Universal Viewer

FlyteComm, Inc.
Mountain View, CA
August 2011
May 2012

Developed a prototype version of the FlyteComm Universal Viewer for the iPhone/iPad as a marketing tool to guage customer interest. This prototype iOS app generated so much customer enthusiasm that the company went full speed ahead developing it into a real product. The iPad/iPhone application was written in Apple's Objective C for iOS 5 in XCode 4.3. There were many challenges. We could not use Apple's MapKit, based on Google Maps, because of Google's licensing restrictions on commercial use. Used the open-source route-me iOS framework instead, but route-me was both dated and deficient in needed features. It was necessary to upgrade the code to iOS 5 by replacing manual reference counting to iOS 5's LLVM ARC; changing instance variables to properties with ARC's memory management declarations along with upgrading all toll-free bridging APIs into iOS 5 compliance. A major feature missing in route-me was the ability to do multiple map overlays. Added this feature to route-me using the lower-level Core Animation Layer API rather than Views. Multiple pushpin layers were also added along with new types of map sources such as the ESRI map sources for USGS topo maps and upgraded route-me's classes for Microsoft Virtual Earth to the latest protocols.

This is how the prototype application looks with both street and parcel bound overlays as added to the route-me framework. (The server-side overlay tile generation was also all done by yours truly.) Also shown are pushpin layers which are sent to the application via JSON from various databases. All pushpins are interactive. Note: Because this is a prototype, UI considerations were considered secondary to functionality, hence the rather rough UI.

Image courtesy of FlyteComm, Inc.. Used by permission.

Many of the newer iOS 5 features were used in the application including Story Boards, ARC, and multiple device target UIs. Best OO practices were employed throughout including strict MVC compliance where models and views never communicate directly. All communications originating from models use the observer design pattern only. Views use delegation and target-action only to controllers.

This shows the XCode IDE using Storyboards with delegation and model classes segregated into separate folders.

Image courtesy of FlyteComm, Inc.. Used by permission.

All static text was contained within string resources. All displayed values were filtered through localization APIs. Added pluralization rules for different languages and regions which was missing in Apple's localization APIs.

This shows how the pluralization code is called.

Image courtesy of FlyteComm, Inc.. Used by permission.

Apple's network Reachability API was used to monitor dynamic network state because network access is less reliable on mobile devices together with persistence of application state for faster app recovery. A fair amount of effort was spent screen scraping FlyteComm's existing ASP .NET web pages (such as the login pages and error handling) so the iPhone/iPad app would interoperate with the FlyteComm's web-based servers without modification. More...