Inforad is an app for save driving on french roads. It has informations about speed limits, road dangers and realtime information on traffic and accidents submitted by its users.
The company behind Inforad has a hardware device with the same features and wanted to have this very feature set as an iPhone App. Since the software for the device was written using Qt C++ and ex-colleague of mine had the idea of writing an App which interfaces with the same Qt code used on the device.
The App tracks the GPS location and feeds this information into the Qt library and listens for notifications from Qt to display on the iPhone’s screen or play out via the speakers. To make this possible I had to make a two way communication between Objective-C and Qt possible without each knowing of the existence of the other (since neither would Qt compile with an imported Objective-C Header nor the other way round). Using Objective-C++, pure virtual C++ classes and several other tricks it was possible to achieve this.
Later in the project it also became obvious that we couldn’t run the communication between the Qt code and the backend server in Qt, so I set up a class to handle this socket based communication in Objective-C as well.