views:

133

answers:

3

Is there a distributed application framework (commercial is okay as well) that supports iPhone / iPad ?

What I'm looking for in the framework:

  • Allows me to focus on the application logic
  • I don't have to code "low-level" network programming (I've done it too many times that I dont wanna do it again =p)
  • Should be actively maintained (popular would be nice)

Basically, I can then develop faster.

We plan to develop a soft real-time TCP/IP client/server application where there are many iPhone/iPad clients (30+) connected to single server over LAN. The server most likely will run Windows (unless the framework does not support it).

I've been looking around and I see:

I'm still deciding whether to use Objective-C or MonoTouch, but leaning towards MonoTouch since we will get the .NET framework, and not be tied into just the Mac world.

Please feel free to comment if I added anything that's not related to my question---I'm new to iPhone/iPad world.

+2  A: 

You need to be a bit more explicit on your requirements. If you need only object serialization (dehydration/hydration) over REST API, then anything that supports POX or JSON will work just fine for you. However, if you need RPC-style method invocation, with authentication, encryption/digital signature, transactions, etc, then you need one of those frameworks you listed above.

If you need a framework, I personally would lean towards the MonoTouch WCF, as it gives you the ability to move your client to other platforms later as well (Windows Phone 7 for example). Then again, as you said, it's a bit rough right now, and if Mono team decides in the future that they don't have the resources to invest in maintaining it, you might end up with having to move to another framework. Of course, there's also the drawback that you need to use MonoTouch for your application, and can't use Objective-C. Granted, with the recent changes in the iOS Developer Agreement, that's not that much of an issue, but it is still something to keep in mind.

(Disclaimer: I used to work on Microsoft's WCF team, so I am biased towards the product itself)

The other option I would go for, would be Cocoa Distributed Objects. However, that would be my choice if the server is also running on OS X. I know there's Bonjour for Windows, but I doubt it's optimized for server scenarios, and I also don't know how rich is Apple's RPC implementation on top of it for the Windows platform. So I would stay with Apple's technology only if I am building exclusively for Apple's platform.

Note that WCF and Distributed Objects would give you RPC-style functionality, but they won't help you with any particular scenarios. If you need/want even higher level of abstraction, for example you need presence information or multi-user chat, you will still need to implement those yourself. It might be worth at this point to look at frameworks that provide those features for you. An example would be RakNet (which you listed above), which abstracts the remoting level and builds additional features on top of it.

Franci Penov
+1  A: 

We've used WCF/Monotouch with great success - there are some areas of the f/work that arent 100% but for most cases you should find working with WCF on monotouch a breeze.

The ability to share all of our data sync, model, tests etc between monodroid and monotouch and wm7 is seriously cool (with some working - this is easilly possible - you'll need to manage multiple prj files).

Be careful to manage calls to wcf services correctly, keep them to a minimum, keep the archetecture simple. We ended up with a fairly complex dto to minimise the amount of calls to the wcf services to sync the data - this was well worth it as the time needed to sync a device from scratch is now a fraction of what it was.

Using SSL to communicate with the server is a PITA but I think that's more a case of the way apple have managed it.

cvista
Can a WCF/MonoTouch communicate with Microsoft .NET WCF services? e.g. Can an iPhone app written in Monotouch communicate with a Windows machine running .NET framework? (Sorry if this is a stupid question..I'm just new to this)
ShaChris23
yes - it can - you create the proxy using the silverlight svcutil with the noConfig switch and inlcude the generated class in your monotouch project - it's very very simple - doing anything like that in obj cwould be a complete no no as it would just require so much messing about.
cvista
+1  A: 

You can use Google protocol buffers to implement RPC though you will need to do some network programming for transporting your messages anyway. It supports interface generation for C++, Java, Python and Objective-C and .NET so you can create a single set of RPC messages and get code for working with them for almost any mobile platform. Transport layer on your mobile platforms you will have to implement yourself.

http:// code.google.com/apis/protocolbuffers/ - main Protobuf page (C++, Java, Python) http:// code.google.com/p/protobuf-net/ - Protobuf .NET mentioned in one of the comments http:// code.google.com/p/metasyntactic/wiki/ProtocolBuffers - Protobuf for Obj-C

Kostiantyn Sokolinskyi