My professional development experience has been on the Windows platform. Realistically, I am not a Windows programmer (I have rarely written a Windows application by myself), but rather write back-end services, middleware,or components that run inside a Windows application. I have had to make changes to a Windows application that someone else started, but it was just to add a small feature. I have done a few little utility applications, but nothing significant.
I have always stayed away from doing traditional Windows programming due to the truly insane programming model which is the WndProc. With past developments with MFC and current developments with .NET, there are abstractions that make it fairly painless, but they are still Leaky Abstractions and that WndProc still leaks through via overriding message processing to hook something that wasn’t exposed or even the Single-Threaded Apartment (shudder).
When I started reading about the Cocoa framework, I was interested to see that the programming model on the iPhone and the Mac is Model-View-Controller which has become very popular recently in the web development circles through Ruby on Rails. I have researched Rails in the past and noticed that quite a few of the developers come from the Mac community. Now I see that Cocoa seems to have had an impact on the start of the Rails framework.
One thing that I have learned from my Windows development background is that to write good code for a platform it helps to read code for that platform. Scott Hanselman is a well known .NET developer and advocates regularly reading code to become a better writer. The problem with reading iPhone code is that Apple had it under NDA for quite a long time. I am in search of complete applications to look at so as to understand the correct way to implement MVC in an iPhone application. I am starting by reading the WordPress iPhone source. I will also be looking at the sample code in the iPhone OS Reference Library.
Stackoverflow also has a post for Where can I find sample iPhone code? which looks promising. If you know of any source that focuses on writing correct MVC code, please post a reply on the Stackoverflow question (and let me know!).
I have been debating what would be the correct way to start. I would like to support multiple platforms and the rhomobile platform looks promising. The biggest problem with my application is connecting to the WCF web service in the backend.
I can’t affort RhoSync since this will be deployed at the end customer’s site. Also I think it would make the deployment too complex. I need to work directly against the current WCF web service. I thought about using Soap4r and go directly from Rhodes, but it look like direct HTTP access is not supported right now.
So for now, I am going to start with a native Objective-C application and get something out there so that I can get feedback from customers.
I have been researching how to develop for the iPhone platform for a while now. My day job is developing VoIP software at Interactive Intelligence (ININ). I do this development in C++ and C# on the Windows platform. I also do scripting in Ruby (and Perl in previous jobs).
I have spent a decent amount of time reading about Objective-C and I am starting to feel comfortable about it. I really like some of the features of the language, but going back to manual memory management doesn’t appeal to me. Even in C++, I use smart pointers to relieve the drudgery of memory management. I have considering using Objective-C++ but I am concerned about getting off the beaten path. Even with all of this, there is the problem with porting any application written for the iPhone to other platforms. Realistically this may not be all that big of problem if the iPhone is going to take over the mobile development. Still, I don’t like to put all my eggs in one basket.
I have several apps that I would like to start on. However, ININ is providing an iPhone and AT&T service for me to start on an iPhone client app for our Customer Interaction Center (CIC) using the Interaction Client Mobile Edition (ICME) infrastructure. ICME currently is implemented for Windows Mobile. I have spent a decent amount of time already on it, but nothing really to show for the work. The issue has been integration with the back-end, which is a SOAP service written using Windows Communication Foundation (WCF). I have also been helping a separate project getting started with development of a BlackBerry client based on my research on the iPhone client.
You would thing that it would be straight forward to integrate with SOAP! After all, it is supposed to be the ubiquitious integration framework. It is just HTTP and XML, right? Wrong. Even with the ICME web service conforming to WS-I basic profile, it still doesn’t work out-of-the-box with JSR-172 (the web service definition for J2ME used on the BlackBerry). I have also had trouble generating stubs from the WSDL using wsdl2objc for the iPhone. The WSDL is pretty substantial and there are parts that are just not supported by the stub generators for these two platforms. And what about the other mobile platforms?
So, you end up having to write some intermediate translation. So this has made me step back and rethink my approach to this application. While researching alternatives, I ran across several cross-platform frameworks for iPhone, BlackBerry, Android, Symbian, and Windows Mobile. The ones that look most promising are RhoMobile and PhoneGap. I am currently researching RhoMobile since there seems to be more back-end tooling and Ruby is the development language. I have been impressed with the Ruby on Rails stack and I really like developing in Ruby.
Hopefully, I can make some progress with RhoMobile. I am a little concerned that it will get in the way of new iPhone 3.0 features like push. It could be my opportunity to contribute back to the community!