Anyone have experience with architecture for cross platform WP7 Android iOS mobile development (monotouch, monodroid, C#)

You might want to look into the MonoCross project which is designed to help you reuse C# code with multiple presentation layers:

http://code.google.com/p/monocross/

The authors of MonoCross (ITR Mobility) have created multiple mobile cross platform solutions for a variety of customers and have written two books on the subject one is "iPad in the Enterprise" (http://amzn.to/zAhQK6) and the upcoming "Cross-Platform Mobile Development with C#" (http://amzn.to/wM6RsF).

In the meantime, you can watch Scott Olson's presentation that he did at Monospace 2011 that describes how to use MonoCross to target multiple mobile and desktop platforms at once reusing the business logic:

http://www.infoq.com/presentations/The-Rise-of-Mono-in-the-Enterprise

They enforce a strict MVC split in their code:

MonoCross MVC Pattern
(source: tirania.org)

The biggest benefit of designing an application with this model is that you can run the same application with native user interfaces on each platform. You get native iOS, Android, Windows UI and they even have an ASP.NET front-end that allows you to publish Web versions of the same business logic.

This technology was used successfully by the Medtronic sample app that is showcased by Apple in their iPad business:

http://www.apple.com/ipad/business/profiles/medtronic/

I suggest you also check out Scott's blog where he posts regularly about his experiences with cross-platform architecture.


Based on your comments your requirements are for a cross-mobile platform that will integrate with their existing services, but also work offline. You are specifically interested in C# via Mono, however you have indicated that you are not discounting other approaches.

I feel that HTML / PhoneGap / JavaScript is a route that you should explore in some detail. The WP7 version of this framework has just been released, and I have had experience of releasing an application to the marketplace using this approach.

PhoneGap wraps your HTML / JavaScript code, in the case of WP7 this is loaded into local storage. This enables the application to work entirely offline. This is true for all versions (iOS, Android etc...)

Probably the biggest issue with PhoneGap / HTML5 is the same issue we have when developing complex web based applications for the browser. The tooling for JavaScript is not great and browser differences are a constant issue. However, it is a tried and tested solution.

Finally, it is possible to create an application UI that is entirely different for each platform. By using the MVVM pattern I have managed to share all my JavaScript business logic between WP7 and iOS applications whilst having a totally different UI:

enter image description here

Compare this to the WP7 screens:

enter image description here

NOTE: I plan to have the iOS version of Property Finder in the AppStore shortly, I just need to work out how to use PhoneGap Build!


Just adding another alternative to the mix - mvvmcross

This project was developed out of experiences with monocross, mvvmlight, and opennetcf.

It's quite an opinionated mvvm framework (with my opinions in it!), it includes data-binding support for Droid and Touch, and it really does encourage code reuse between the platforms.

The source is available from https://github.com/slodge/MvvmCross, it's been used in at least a couple of large projects already and it's still under active development.

There's an introductory presentation on it on slideshare: http://www.slideshare.net/cirrious/dev-evening-monotouch-monodroid-mvvm-mvvmcross-and-databinding

One of the more fully featured samples is a conference app:

sql bits app